<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dantia+Gothly</id>
	<title>Second Life Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dantia+Gothly"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/wiki/Special:Contributions/Dantia_Gothly"/>
	<updated>2026-07-28T13:06:39Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSetLinkGLTFOverrides&amp;diff=1218294</id>
		<title>LlSetLinkGLTFOverrides</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSetLinkGLTFOverrides&amp;diff=1218294"/>
		<updated>2025-05-14T02:32:42Z</updated>

		<summary type="html">&lt;p&gt;Dantia Gothly: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{LSL Function/color|color}}{{LSL_Function/link-face|link|face}}&lt;br /&gt;
|func=llSetLinkGLTFOverrides&lt;br /&gt;
|func_desc=Sets or removes individual overrides applied to a PBR texture on a face&lt;br /&gt;
|p1_type= integer|p1_name= link|p1_desc= &lt;br /&gt;
|p2_type= integer|p2_name= face|p2_desc= &lt;br /&gt;
|p3_type= list|p3_name= params|p3_desc= List of overrides and override values.&lt;br /&gt;
|constants=&lt;br /&gt;
{{LSL Constants/GLTF Overrides}}&lt;br /&gt;
|caveats=&lt;br /&gt;
* {{LSLP|OVERRIDE_GLTF_BASE_COLOR_FACTOR}} and {{LSLP|OVERRIDE_GLTF_BASE_ALPHA}} parameters are coupled.  If an override is set for one parameter, then the other is automatically given an override.  The default {{LSLP|OVERRIDE_GLTF_BASE_COLOR_FACTOR}} is &amp;lt;1,1,1&amp;gt;, and the default {{LSLP|OVERRIDE_GLTF_BASE_ALPHA}} is 1.0.&lt;br /&gt;
|examples=&lt;br /&gt;
Toggle alpha on\off&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer toggle;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer num_detected)&lt;br /&gt;
    {&lt;br /&gt;
        toggle=!toggle;&lt;br /&gt;
        llSetLinkGLTFOverrides( LINK_THIS, 0, [&lt;br /&gt;
            OVERRIDE_GLTF_BASE_ALPHA_MODE, PRIM_GLTF_ALPHA_MODE_BLEND,&lt;br /&gt;
            OVERRIDE_GLTF_BASE_ALPHA, toggle]);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[LlSetPrimitiveParams]]|Sets the parameters for a prim}}&lt;br /&gt;
{{LSL DefineRow||[[LlGetPrimitiveParams]]|Gets the parameters set on a prim}}&lt;br /&gt;
|notes&lt;br /&gt;
|cat1=Experience&lt;br /&gt;
|cat2=Permissions/Experience&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Dantia Gothly</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSetLinkGLTFOverrides&amp;diff=1218293</id>
		<title>LlSetLinkGLTFOverrides</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSetLinkGLTFOverrides&amp;diff=1218293"/>
		<updated>2025-05-14T02:31:03Z</updated>

		<summary type="html">&lt;p&gt;Dantia Gothly: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{LSL Function/color|color}}{{LSL_Function/link-face|link|face}}&lt;br /&gt;
|func=llSetLinkGLTFOverrides&lt;br /&gt;
|func_desc=Sets or removes individual overrides applied to a PBR texture on a face&lt;br /&gt;
|p1_type= integer|p1_name= link|p1_desc= &lt;br /&gt;
|p2_type= integer|p2_name= face|p2_desc= &lt;br /&gt;
|p3_type= list|p3_name= params|p3_desc= List of overrides and override values.&lt;br /&gt;
|constants=&lt;br /&gt;
{{LSL Constants/GLTF Overrides}}&lt;br /&gt;
|caveats=&lt;br /&gt;
* {{LSLP|OVERRIDE_GLTF_BASE_COLOR_FACTOR}} and {{LSLP|OVERRIDE_GLTF_BASE_ALPHA}} parameters are coupled.  If an override is set for one parameter, then the other is automatically given an override.  The default {{LSLP|OVERRIDE_GLTF_BASE_COLOR_FACTOR}} is &amp;lt;1,1,1&amp;gt;, and the default {{LSLP|OVERRIDE_GLTF_BASE_ALPHA}} is 1.0.&lt;br /&gt;
|examples&lt;br /&gt;
Toggle alpha on\off&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer toggle;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer num_detected)&lt;br /&gt;
    {&lt;br /&gt;
        toggle=!toggle;&lt;br /&gt;
        llSetLinkGLTFOverrides( LINK_THIS, 0, [&lt;br /&gt;
            OVERRIDE_GLTF_BASE_ALPHA_MODE, PRIM_GLTF_ALPHA_MODE_BLEND,&lt;br /&gt;
            OVERRIDE_GLTF_BASE_ALPHA, toggle]);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[LlSetPrimitiveParams]]|Sets the parameters for a prim}}&lt;br /&gt;
{{LSL DefineRow||[[LlGetPrimitiveParams]]|Gets the parameters set on a prim}}&lt;br /&gt;
|notes&lt;br /&gt;
|cat1=Experience&lt;br /&gt;
|cat2=Permissions/Experience&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Dantia Gothly</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSetLinkGLTFOverrides&amp;diff=1218292</id>
		<title>LlSetLinkGLTFOverrides</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSetLinkGLTFOverrides&amp;diff=1218292"/>
		<updated>2025-05-14T02:29:10Z</updated>

		<summary type="html">&lt;p&gt;Dantia Gothly: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{LSL Function/color|color}}{{LSL_Function/link-face|link|face}}&lt;br /&gt;
|func=llSetLinkGLTFOverrides&lt;br /&gt;
|func_desc=Sets or removes individual overrides applied to a PBR texture on a face&lt;br /&gt;
|p1_type= integer|p1_name= link|p1_desc= &lt;br /&gt;
|p2_type= integer|p2_name= face|p2_desc= &lt;br /&gt;
|p3_type= list|p3_name= params|p3_desc= List of overrides and override values.&lt;br /&gt;
|constants=&lt;br /&gt;
{{LSL Constants/GLTF Overrides}}&lt;br /&gt;
|caveats=&lt;br /&gt;
* {{LSLP|OVERRIDE_GLTF_BASE_COLOR_FACTOR}} and {{LSLP|OVERRIDE_GLTF_BASE_ALPHA}} parameters are coupled.  If an override is set for one parameter, then the other is automatically given an override.  The default {{LSLP|OVERRIDE_GLTF_BASE_COLOR_FACTOR}} is &amp;lt;1,1,1&amp;gt;, and the default {{LSLP|OVERRIDE_GLTF_BASE_ALPHA}} is 1.0.&lt;br /&gt;
|examples&lt;br /&gt;
&lt;br /&gt;
Toggle alpha on\off&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer toggle;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer num_detected)&lt;br /&gt;
    {&lt;br /&gt;
        toggle=!toggle;&lt;br /&gt;
        llSetLinkGLTFOverrides( LINK_THIS, 0, [&lt;br /&gt;
            OVERRIDE_GLTF_BASE_ALPHA_MODE,PRIM_GLTF_ALPHA_MODE_BLEND,&lt;br /&gt;
            OVERRIDE_GLTF_BASE_ALPHA,toggle]);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[LlSetPrimitiveParams]]|Sets the parameters for a prim}}&lt;br /&gt;
{{LSL DefineRow||[[LlGetPrimitiveParams]]|Gets the parameters set on a prim}}&lt;br /&gt;
|notes&lt;br /&gt;
|cat1=Experience&lt;br /&gt;
|cat2=Permissions/Experience&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Dantia Gothly</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSetLinkGLTFOverrides&amp;diff=1218291</id>
		<title>LlSetLinkGLTFOverrides</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSetLinkGLTFOverrides&amp;diff=1218291"/>
		<updated>2025-05-14T02:25:08Z</updated>

		<summary type="html">&lt;p&gt;Dantia Gothly: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|inject-2={{LSL Function/color|color}}{{LSL_Function/link-face|link|face}}&lt;br /&gt;
|func=llSetLinkGLTFOverrides&lt;br /&gt;
|func_desc=Sets or removes individual overrides applied to a PBR texture on a face&lt;br /&gt;
|p1_type= integer|p1_name= link|p1_desc= &lt;br /&gt;
|p2_type= integer|p2_name= face|p2_desc= &lt;br /&gt;
|p3_type= list|p3_name= params|p3_desc= List of overrides and override values.&lt;br /&gt;
|constants=&lt;br /&gt;
{{LSL Constants/GLTF Overrides}}&lt;br /&gt;
|caveats=&lt;br /&gt;
* {{LSLP|OVERRIDE_GLTF_BASE_COLOR_FACTOR}} and {{LSLP|OVERRIDE_GLTF_BASE_ALPHA}} parameters are coupled.  If an override is set for one parameter, then the other is automatically given an override.  The default {{LSLP|OVERRIDE_GLTF_BASE_COLOR_FACTOR}} is &amp;lt;1,1,1&amp;gt;, and the default {{LSLP|OVERRIDE_GLTF_BASE_ALPHA}} is 1.0.&lt;br /&gt;
|examples&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
// Toggle alpha on\off&lt;br /&gt;
integer toggle;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer num_detected)&lt;br /&gt;
    {&lt;br /&gt;
        toggle=!toggle;&lt;br /&gt;
        llSetLinkGLTFOverrides( LINK_THIS, 0, [&lt;br /&gt;
            OVERRIDE_GLTF_BASE_ALPHA_MODE,PRIM_GLTF_ALPHA_MODE_BLEND,&lt;br /&gt;
            OVERRIDE_GLTF_BASE_ALPHA,toggle]);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[LlSetPrimitiveParams]]|Sets the parameters for a prim}}&lt;br /&gt;
{{LSL DefineRow||[[LlGetPrimitiveParams]]|Gets the parameters set on a prim}}&lt;br /&gt;
|notes&lt;br /&gt;
|cat1=Experience&lt;br /&gt;
|cat2=Permissions/Experience&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Dantia Gothly</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Project_Bento_Resources_and_Information&amp;diff=1218210</id>
		<title>Project Bento Resources and Information</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Project_Bento_Resources_and_Information&amp;diff=1218210"/>
		<updated>2025-04-28T04:57:47Z</updated>

		<summary type="html">&lt;p&gt;Dantia Gothly: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Welcome to Project Bento! As we mentioned in [https://community.secondlife.com/t5/Featured-News/Introducing-Project-Bento-New-Bones-Added-to-Second-Life-Avatar/ba-p/2987206 our announcement], Project Bento is adding new bones and attachment points to the avatar skeleton.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Project Bento Testing is now Complete!  Project Bento is now Live in all regions on all viewers!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== What is Project Bento?? ==&lt;br /&gt;
&lt;br /&gt;
Project Bento is an update to the Second Life Avatar Skeleton which is what allows Second Life Avatars to move and come to life, as well as enabling the creation of more lifelike and intricate rigged mesh attachments.&lt;br /&gt;
&lt;br /&gt;
===Bone Updates===&lt;br /&gt;
&lt;br /&gt;
The Project Bento Update added bones to the skeleton to expand rigging and animation support in the following areas:&lt;br /&gt;
&lt;br /&gt;
* Facial Area (new)&lt;br /&gt;
* Spine (additional bones)&lt;br /&gt;
* Hands (new finger bones)&lt;br /&gt;
* Tail (new)&lt;br /&gt;
* Wings (new)&lt;br /&gt;
* Hind Legs for Quadruped Avatars (new)&lt;br /&gt;
&lt;br /&gt;
A full list of the alterations for the skeleton are [[Project Bento Skeleton Guide|here]].&lt;br /&gt;
&lt;br /&gt;
===Slider System / Shape Updates===&lt;br /&gt;
Additionally Project Bento updated the existing avatar shape system to make the adjustment sliders affect these new bones on top of it&#039;s previous (unaltered) shape control functionality.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Scope of slider interactions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
While the updates to the slider system made it so that these new bones move with sliders, it does not override, or affect in any way existing behavior on the default Linden Avatar head and hands.  The default Linden Avatar depends on &#039;&#039;morph targets&#039;&#039; to perform hand poses and facial expressions.  This is a completely different system from using &#039;&#039;bone based rigging&#039;&#039; on mesh attachments worn in the same regions of the body (which is what Project Bento adds support for).  While these two systems are affected &#039;&#039;similarly&#039;&#039; by slider manipulation by design, it is good to keep in mind that it is an approximation, and only that.  It is fundamentally impossible to exactly mimic the motion of a morph target based system with a bone based rigging system.  For example : sliders will affect a mesh attachment head differently than it affects the Linden Avatar head.  This is unavoidable due to how both systems differ mechanically.&lt;br /&gt;
&lt;br /&gt;
===Animation File Updates===&lt;br /&gt;
On top of additional bones and slider integration, Project Bento also increased the maximum allowable size of animation files, and also removed the restriction on BVH animation file uploads that prevented translation based bone movement.&lt;br /&gt;
&lt;br /&gt;
===Partial Skeletons===&lt;br /&gt;
Upload of rigged content no longer needs all the bones specified in the DAE file for convenience purposes. For rigged content, simply omitting unused/missing bones from the skinning data is now allowed.&lt;br /&gt;
&lt;br /&gt;
== Caveats &amp;amp; Best Practices ==&lt;br /&gt;
&lt;br /&gt;
*Due to the restrictions of the pre-existing Second Life Animation System. Playing animations that affect bone scale will (continue to) not work with Project Bento, however the slider system has been incorporated to adjust bone positions and bone scale.&lt;br /&gt;
*Any slider controls that affect the position ( translation ) of a specific bone will be overridden if the user plays an animation that moves that bone.  Since presently the animation system has no means of knowing the positional offset that the slider is providing, that animation will be played based off of the bones natural ( pre-slider adjustment ) position.  However the slider&#039;s influence on the affected bones scale will not be altered, as animations presently cannot affect bone scale.&lt;br /&gt;
&lt;br /&gt;
Because of the above two restrictions it is ill advised, to mix content where you want the translation based sliders to work with translation based animations. Because the animation will always override the slider.&lt;br /&gt;
For a list of all the bones that are influenced by sliders that adjust their position refer to this : https://wiki.secondlife.com/wiki/Project_Bento_Skeleton_Guide#Bones_Currently_Affected_By_Positional_Sliders&lt;br /&gt;
&lt;br /&gt;
This was the best practical alternative to simply not allowing translation based animations at all due to the possibility of them overriding sliders.   The community asked for the ability to have translation/position based animations available for greater creative control and it was agreed upon that suffering the confusion from this conflict of behavior was still an overall gain.&lt;br /&gt;
&lt;br /&gt;
Prior to Project Bento, rigging to attachment points was never formally supported, and was strongly discouraged, as once an animation stops playing it often leaves the attachment points in a deformed location that is very difficult for a resident to understand.  With the addition of Project Bento, meshes rigged to Attachment points &#039;&#039;may be rejected by the server&#039;&#039;  since one of the primary reasons for the addition of these new bones was to discourage this process.&lt;br /&gt;
&lt;br /&gt;
== Current Content &amp;amp; Resources ==&lt;br /&gt;
&lt;br /&gt;
=== Models &amp;amp; Skeleton Files / Test Content ===&lt;br /&gt;
&lt;br /&gt;
Note: to add new test content to the wiki, you can first attach it to [https://jira.secondlife.com/browse/BUG-10981 BUG-10981], then post a link to that attachment in the wiki. The wiki does not allow attaching most file formats directly.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Collada (dae) files&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
The following model files are compatible with the current project viewer, as of 2016-07-14, and should work with currently implemented sliders. Includes weighting to the new mFaceJawShaper bone.&lt;br /&gt;
&lt;br /&gt;
* [https://bitbucket.org/lindenlab/secondlife-creator-resources/raw/master/models/collada/female_2016_08_05.dae.zip human female] (August 5, 2016) (attention, this rig is broken)&lt;br /&gt;
* [https://bitbucket.org/lindenlab/secondlife-creator-resources/raw/master/models/collada/male_2016_08_05.dae.zip human male] (August 5, 2016)&lt;br /&gt;
* [https://bitbucket.org/lindenlab/secondlife-creator-resources/raw/master/models/collada/angel_2016_08_05.dae.zip angel] (August 5, 2016)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Maya (ma) files&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
These are also current with the skeleton of July 14, 2016:&lt;br /&gt;
&lt;br /&gt;
* [https://bitbucket.org/lindenlab/secondlife-creator-resources/raw/master/models/maya/MayaBentoFemaleAugust2016.ma.zip maya human female] (August 17, 2016)&lt;br /&gt;
(NOTE: Standard Skeleton with bone located in standard positions determined by the avatar_skeleton.xml file.)&lt;br /&gt;
* [https://bitbucket.org/lindenlab/secondlife-creator-resources/raw/master/models/maya/MayaBentoMaleAugust2016.ma.zip maya human male] (August 17, 2016)&lt;br /&gt;
(NOTE: Standard Skeleton with bone located in standard positions determined by the avatar_skeleton.xml file.)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FBX files&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* [https://bitbucket.org/lindenlab/secondlife-creator-resources/raw/master/models/fbx/FBXBentoFemaleSeptember2016.fbx fbx human female] (September 10, 2016)&lt;br /&gt;
* [https://bitbucket.org/lindenlab/secondlife-creator-resources/raw/master/models/fbx/FBXBentoMaleSeptember2016.fbx fbx human male] (September 10, 2016)&lt;br /&gt;
&lt;br /&gt;
These are based on the Maya files above.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3ds Max (max) files&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
All files are saved as 3dsmax2012 files, if your version predates this, they probably won&#039;t load.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Basic&amp;quot; skeleton files contain no additional nodes and will not work for advanced control rigs and animation export, but are simpler, contain less clutter and might be ideal for simple rigging&amp;amp;skinning work.  However bone rotation axis will not behave ideally for animations.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Normal/Animation&amp;quot; Rigs have additional nodes for ease of use with animations, but animation must be done on &amp;quot;mBoneName_DRV&amp;quot; point helper nodes instead of the bones directly. These skeleton files have nodes oriented in a manner that will make joints rotate on their local axis.  This is particularly useful for mimicing animation in parts of the bento skeleton such as the hands and face where the bone is not aligned with an axis ( perpendicular to other things in the scene ).  Hopefully these skeleton rigs will help understanding of the new joints.&lt;br /&gt;
&lt;br /&gt;
For both skeletons ( both &amp;quot;basic&amp;quot; and &amp;quot;animation&amp;quot; ) the mesh skinning and rigging should be done to the mBoneName or &amp;quot;collision volume&amp;quot; (fitmesh) bones / dummies only. All skeletons are default (female) bone positions ONLY.&lt;br /&gt;
&lt;br /&gt;
* [https://bitbucket.org/polysail/bento-max2012-skeletons/raw/bc20e9c13a37b6d834ce92b63339f911f08c2e5b/BentoBones_BonesOnly_2012.max basic skeleton bone nodes] (December 26, 2016)&lt;br /&gt;
* [https://bitbucket.org/polysail/bento-max2012-skeletons/raw/bc20e9c13a37b6d834ce92b63339f911f08c2e5b/BentoBones_DummyNodesOnly_2012.max basic skeleton dummy nodes] (December 26, 2016)&lt;br /&gt;
* [https://bitbucket.org/polysail/bento-max2012-skeletons/raw/bc20e9c13a37b6d834ce92b63339f911f08c2e5b/LocalAnimationOrientation_Bones_2012.max skeleton bone nodes] (December 26, 2016)&lt;br /&gt;
* [https://bitbucket.org/polysail/bento-max2012-skeletons/raw/bc20e9c13a37b6d834ce92b63339f911f08c2e5b/LocalAnimationOrientation_DummyNodes_2012.max skeleton dummy nodes] (December 26, 2016)&lt;br /&gt;
&lt;br /&gt;
Dec, 2016 update fixes minor rotation issues in the collision volume bones that existed in the initial August 2016 posting.&lt;br /&gt;
&lt;br /&gt;
=== Test Animations ===&lt;br /&gt;
* [https://bitbucket.org/lindenlab/secondlife-creator-resources/raw/master/animations/anim/bento_randomize_bones_and_attachments.anim scramble the positions] of all bones and attachments&lt;br /&gt;
* [https://bitbucket.org/lindenlab/secondlife-creator-resources/raw/master/animations/anim/bento_reset_bones_and_attachments.anim reset the positions] of all bones and attachments to the default.&lt;br /&gt;
&lt;br /&gt;
=== Animation Export Tools ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Maya&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following tools are used for export of BVH animation files from Autodesk Maya Software.  The exporter was authored by Aura Linden and is available for free below.&lt;br /&gt;
&lt;br /&gt;
It works ideally with the skeleton included in [https://marketplace.secondlife.com/p/MayaStar-Plugin-System-for-Maya-Autodesk/5454253 Mayastar], maintained by Cathy Foil.  But should be able to be used as a standalone script as well.&lt;br /&gt;
&lt;br /&gt;
* [https://bitbucket.org/lindenlab/secondlife-creator-resources/raw/master/tools/maya/Maya_BVH_Export_Bento_Project.mel Maya BVH Animation Exporter] - mel script --&#039;&#039;&#039;Note: when animating in Maya for export, orient your skeleton in Y+ up , X+ forward orientation.&#039;&#039;&#039;&lt;br /&gt;
* [https://bitbucket.org/lindenlab/secondlife-creator-resources/raw/master/tools/maya/maya_bvh_export_instructions.txt Maya BVH exporter instructions] - text file&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Blender&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
While blender does not have any freely available animation exporters specifically for Second Life, it has an excellently maintained plugin package known as [https://blog.machinimatrix.org/avastar/ Avastar] maintained by Gaia Clary.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3DSMax&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Autodesk 3D Studio Max presently does not have any publicly available animation exporters.  However, polysail resident is presently working on a plugin that will do so.  Completion date is TBD.&lt;br /&gt;
&lt;br /&gt;
=== Reference ===&lt;br /&gt;
&lt;br /&gt;
* Some helpful models to show the locations of various types of bones can be found at [https://marketplace.secondlife.com/p/Avatar-Testing-and-Visualization-Kit/9842033 Avatar Testing and Visualization Kit]&lt;br /&gt;
&lt;br /&gt;
== Scale Locking Option ==&lt;br /&gt;
&lt;br /&gt;
With Project Bento, the option to have an uploaded mesh attachment completely ignore all slider input was also added.&lt;br /&gt;
&lt;br /&gt;
When you upload a model beneath the standard &amp;quot;Include skin weight&amp;quot; and &amp;quot;Include joint positions&amp;quot; check boxes, there is now an additional check box for &amp;quot;Lock scale if joint position defined&amp;quot;. If you check this box, then any joint that has a position defined will also have its scale locked. Scale locking will be enforced whenever a joint would normally be scaled by a slider thus &amp;quot;immunizing&amp;quot; it to all slider influence.&lt;br /&gt;
To make a bone truly slider-proof, you will have to pay attention to the joint hierarchy. Any change to the scale of a parent bone will also cause the child bone to move, so you will have to make sure the bone&#039;s ancestors also have joint positions defined. A joint position will be ignored unless it differs from the bone&#039;s default location by at least 0.1 mm (ie, 0.0001 m in the units used by the skeleton definition file). If you want to lock a joint without changing its position, use a very small offset that will not be large enough to have a visual effect (some fraction of a mm).&lt;br /&gt;
&lt;br /&gt;
This feature was primarily included to assist with making &amp;quot;animated attachments&amp;quot; that re-purpose bone sets, such as the hind legs, wings or tail into pets or weapon attachments.  Ideally such attachments would not want slider influences due to the fact that the bones comprising them are &amp;quot;borrowed&amp;quot; from another part of the body.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reset Skeleton Menu Option [Viewer]==&lt;br /&gt;
With the addition of Project Bento a new menu option was added to the viewer.  If you Right-Click another avatar the option to &amp;quot;&#039;&#039;Reset Skeleton&#039;&#039;&amp;quot; will appear, along with it&#039;s cousin &amp;quot;&#039;&#039;Reset Skeleton and Animations&#039;&#039;&amp;quot;.  This added functionality provides any resident the ability to attempt to visually fix another avatar that looks deformed on their screen.&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;Note this option does not send any data to the server.  This means that if you use &amp;quot;Reset Skeleton&amp;quot; on a deformed avatar ( including yourself ) that currently does NOT perform this action for everyone else viewing the deformed avatar.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This was done because visibly deformed avatars aren&#039;t always deformed universally.  The logic for why this is is long and complex, involving the mechanics of how avatars are loaded.  This feature isn&#039;t a fix-all, but is a great alternative to completely logging out of the client and reconnecting, which, prior to this update, used to be the only reliable way to resolve this sort of issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==I found a problem? How can I give feedback?==&lt;br /&gt;
&lt;br /&gt;
As always if you discover an undocumented bug please report it at [https://feedback.secondlife.com Second Life Feedback Portal] with the tag [BENTO]  in the summary line for it to be properly addressed!&lt;br /&gt;
&lt;br /&gt;
If you have a display problem, please test to see if there is a difference with with hardware skinning Enabled and Disabled&lt;br /&gt;
:Me-&amp;gt;Preferences-&amp;gt;Graphics-&amp;gt;Advanced-&amp;gt;Avatar Rendering-&amp;gt;Hardware skinning checkbox&lt;/div&gt;</summary>
		<author><name>Dantia Gothly</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Project_Bento_Resources_and_Information&amp;diff=1218209</id>
		<title>Project Bento Resources and Information</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Project_Bento_Resources_and_Information&amp;diff=1218209"/>
		<updated>2025-04-28T04:55:35Z</updated>

		<summary type="html">&lt;p&gt;Dantia Gothly: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Welcome to Project Bento! As we mentioned in [https://community.secondlife.com/t5/Featured-News/Introducing-Project-Bento-New-Bones-Added-to-Second-Life-Avatar/ba-p/2987206 our announcement], Project Bento is adding new bones and attachment points to the avatar skeleton.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Project Bento Testing is now Complete!  Project Bento is now Live in all regions on all viewers!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== What is Project Bento?? ==&lt;br /&gt;
&lt;br /&gt;
Project Bento is an update to the Second Life Avatar Skeleton which is what allows Second Life Avatars to move and come to life, as well as enabling the creation of more lifelike and intricate rigged mesh attachments.&lt;br /&gt;
&lt;br /&gt;
===Bone Updates===&lt;br /&gt;
&lt;br /&gt;
The Project Bento Update added bones to the skeleton to expand rigging and animation support in the following areas:&lt;br /&gt;
&lt;br /&gt;
* Facial Area (new)&lt;br /&gt;
* Spine (additional bones)&lt;br /&gt;
* Hands (new finger bones)&lt;br /&gt;
* Tail (new)&lt;br /&gt;
* Wings (new)&lt;br /&gt;
* Hind Legs for Quadruped Avatars (new)&lt;br /&gt;
&lt;br /&gt;
A full list of the alterations for the skeleton are [[Project Bento Skeleton Guide|here]].&lt;br /&gt;
&lt;br /&gt;
===Slider System / Shape Updates===&lt;br /&gt;
Additionally Project Bento updated the existing avatar shape system to make the adjustment sliders affect these new bones on top of it&#039;s previous (unaltered) shape control functionality.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Scope of slider interactions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
While the updates to the slider system made it so that these new bones move with sliders, it does not override, or affect in any way existing behavior on the default Linden Avatar head and hands.  The default Linden Avatar depends on &#039;&#039;morph targets&#039;&#039; to perform hand poses and facial expressions.  This is a completely different system from using &#039;&#039;bone based rigging&#039;&#039; on mesh attachments worn in the same regions of the body (which is what Project Bento adds support for).  While these two systems are affected &#039;&#039;similarly&#039;&#039; by slider manipulation by design, it is good to keep in mind that it is an approximation, and only that.  It is fundamentally impossible to exactly mimic the motion of a morph target based system with a bone based rigging system.  For example : sliders will affect a mesh attachment head differently than it affects the Linden Avatar head.  This is unavoidable due to how both systems differ mechanically.&lt;br /&gt;
&lt;br /&gt;
===Animation File Updates===&lt;br /&gt;
On top of additional bones and slider integration, Project Bento also increased the maximum allowable size of animation files, and also removed the restriction on BVH animation file uploads that prevented translation based bone movement.&lt;br /&gt;
&lt;br /&gt;
===Partial Skeletons===&lt;br /&gt;
Upload of rigged content no longer needs all the bones specified in the DAE file for convenience purposes. For rigged content, simply omitting unused/missing bones from the skinning data is now allowed.&lt;br /&gt;
&lt;br /&gt;
== Caveats &amp;amp; Best Practices ==&lt;br /&gt;
&lt;br /&gt;
*Due to the restrictions of the pre-existing Second Life Animation System. Playing animations that affect bone scale will (continue to) not work with Project Bento, however the slider system has been incorporated to adjust bone positions and bone scale.&lt;br /&gt;
*Any slider controls that affect the position ( translation ) of a specific bone will be overridden if the user plays an animation that moves that bone.  Since presently the animation system has no means of knowing the positional offset that the slider is providing, that animation will be played based off of the bones natural ( pre-slider adjustment ) position.  However the slider&#039;s influence on the affected bones scale will not be altered, as animations presently cannot affect bone scale.&lt;br /&gt;
&lt;br /&gt;
Because of the above two restrictions it is ill advised, to mix content where you want the translation based sliders to work with translation based animations. Because the animation will always override the slider.&lt;br /&gt;
For a list of all the bones that are influenced by sliders that adjust their position refer to this : https://wiki.secondlife.com/wiki/Project_Bento_Skeleton_Guide#Bones_Currently_Affected_By_Positional_Sliders&lt;br /&gt;
&lt;br /&gt;
This was the best practical alternative to simply not allowing translation based animations at all due to the possibility of them overriding sliders.   The community asked for the ability to have translation/position based animations available for greater creative control and it was agreed upon that suffering the confusion from this conflict of behavior was still an overall gain.&lt;br /&gt;
&lt;br /&gt;
Prior to Project Bento, rigging to attachment points was never formally supported, and was strongly discouraged, as once an animation stops playing it often leaves the attachment points in a deformed location that is very difficult for a resident to understand.  With the addition of Project Bento, meshes rigged to Attachment points &#039;&#039;may be rejected by the server&#039;&#039;  since one of the primary reasons for the addition of these new bones was to discourage this process.&lt;br /&gt;
&lt;br /&gt;
== Current Content &amp;amp; Resources ==&lt;br /&gt;
&lt;br /&gt;
=== Models &amp;amp; Skeleton Files / Test Content ===&lt;br /&gt;
&lt;br /&gt;
Note: to add new test content to the wiki, you can first attach it to [https://jira.secondlife.com/browse/BUG-10981 BUG-10981], then post a link to that attachment in the wiki. The wiki does not allow attaching most file formats directly.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Collada (dae) files&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
The following model files are compatible with the current project viewer, as of 2016-07-14, and should work with currently implemented sliders. Includes weighting to the new mFaceJawShaper bone.&lt;br /&gt;
&lt;br /&gt;
* [https://bitbucket.org/lindenlab/secondlife-creator-resources/raw/master/models/collada/female_2016_08_05.dae.zip human female] (August 5, 2016) (attention, this rig is broken)&lt;br /&gt;
* [https://bitbucket.org/lindenlab/secondlife-creator-resources/raw/master/models/collada/male_2016_08_05.dae.zip human male] (August 5, 2016)&lt;br /&gt;
* [https://bitbucket.org/lindenlab/secondlife-creator-resources/raw/master/models/collada/angel_2016_08_05.dae.zip angel] (August 5, 2016)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Maya (ma) files&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
These are also current with the skeleton of July 14, 2016:&lt;br /&gt;
&lt;br /&gt;
* [https://bitbucket.org/lindenlab/secondlife-creator-resources/raw/master/models/maya/MayaBentoFemaleAugust2016.ma.zip maya human female] (August 17, 2016)&lt;br /&gt;
(NOTE: Standard Skeleton with bone located in standard positions determined by the avatar_skeleton.xml file.)&lt;br /&gt;
* [https://bitbucket.org/lindenlab/secondlife-creator-resources/raw/master/models/maya/MayaBentoMaleAugust2016.ma.zip maya human male] (August 17, 2016)&lt;br /&gt;
(NOTE: Standard Skeleton with bone located in standard positions determined by the avatar_skeleton.xml file.)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FBX files&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* [https://bitbucket.org/lindenlab/secondlife-creator-resources/raw/master/models/fbx/FBXBentoFemaleSeptember2016.fbx fbx human female] (September 10, 2016)&lt;br /&gt;
* [https://bitbucket.org/lindenlab/secondlife-creator-resources/raw/master/models/fbx/FBXBentoMaleSeptember2016.fbx fbx human male] (September 10, 2016)&lt;br /&gt;
&lt;br /&gt;
These are based on the Maya files above.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3ds Max (max) files&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
All files are saved as 3dsmax2012 files, if your version predates this, they probably won&#039;t load.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Basic&amp;quot; skeleton files contain no additional nodes and will not work for advanced control rigs and animation export, but are simpler, contain less clutter and might be ideal for simple rigging&amp;amp;skinning work.  However bone rotation axis will not behave ideally for animations.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Normal/Animation&amp;quot; Rigs have additional nodes for ease of use with animations, but animation must be done on &amp;quot;mBoneName_DRV&amp;quot; point helper nodes instead of the bones directly. These skeleton files have nodes oriented in a manner that will make joints rotate on their local axis.  This is particularly useful for mimicing animation in parts of the bento skeleton such as the hands and face where the bone is not aligned with an axis ( perpendicular to other things in the scene ).  Hopefully these skeleton rigs will help understanding of the new joints.&lt;br /&gt;
&lt;br /&gt;
For both skeletons ( both &amp;quot;basic&amp;quot; and &amp;quot;animation&amp;quot; ) the mesh skinning and rigging should be done to the mBoneName or &amp;quot;collision volume&amp;quot; (fitmesh) bones / dummies only. All skeletons are default (female) bone positions ONLY.&lt;br /&gt;
&lt;br /&gt;
* [https://bitbucket.org/polysail/bento-max2012-skeletons/raw/bc20e9c13a37b6d834ce92b63339f911f08c2e5b/BentoBones_BonesOnly_2012.max basic skeleton bone nodes] (December 26, 2016)&lt;br /&gt;
* [https://bitbucket.org/polysail/bento-max2012-skeletons/raw/bc20e9c13a37b6d834ce92b63339f911f08c2e5b/BentoBones_DummyNodesOnly_2012.max basic skeleton dummy nodes] (December 26, 2016)&lt;br /&gt;
* [https://bitbucket.org/polysail/bento-max2012-skeletons/raw/bc20e9c13a37b6d834ce92b63339f911f08c2e5b/LocalAnimationOrientation_Bones_2012.max skeleton bone nodes] (December 26, 2016)&lt;br /&gt;
* [https://bitbucket.org/polysail/bento-max2012-skeletons/raw/bc20e9c13a37b6d834ce92b63339f911f08c2e5b/LocalAnimationOrientation_DummyNodes_2012.max skeleton dummy nodes] (December 26, 2016)&lt;br /&gt;
&lt;br /&gt;
Dec, 2016 update fixes minor rotation issues in the collision volume bones that existed in the initial August 2016 posting.&lt;br /&gt;
&lt;br /&gt;
=== Test Animations ===&lt;br /&gt;
* [https://bitbucket.org/lindenlab/secondlife-creator-resources/raw/master/animations/anim/bento_randomize_bones_and_attachments.anim scramble the positions] of all bones and attachments&lt;br /&gt;
* [https://bitbucket.org/lindenlab/secondlife-creator-resources/raw/master/animations/anim/bento_reset_bones_and_attachments.anim reset the positions] of all bones and attachments to the default.&lt;br /&gt;
&lt;br /&gt;
=== Animation Export Tools ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Maya&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following tools are used for export of BVH animation files from Autodesk Maya Software.  The exporter was authored by Aura Linden and is available for free below.&lt;br /&gt;
&lt;br /&gt;
It works ideally with the skeleton included in [https://marketplace.secondlife.com/p/MayaStar-Plugin-System-for-Maya-Autodesk/5454253 Mayastar], maintained by Cathy Foil.  But should be able to be used as a standalone script as well.&lt;br /&gt;
&lt;br /&gt;
* [https://bitbucket.org/lindenlab/secondlife-creator-resources/raw/master/tools/maya/Maya_BVH_Export_Bento_Project.mel Maya BVH Animation Exporter] - mel script --&#039;&#039;&#039;Note: when animating in Maya for export, orient your skeleton in Y+ up , X+ forward orientation.&#039;&#039;&#039;&lt;br /&gt;
* [https://bitbucket.org/lindenlab/secondlife-creator-resources/raw/master/tools/maya/maya_bvh_export_instructions.txt Maya BVH exporter instructions] - text file&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Blender&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
While blender does not have any freely available animation exporters specifically for Second Life, it has an excellently maintained plugin package known as [https://blog.machinimatrix.org/avastar/ Avastar] maintained by Gaia Clary.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3DSMax&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Autodesk 3D Studio Max presently does not have any publicly available animation exporters.  However, polysail resident is presently working on a plugin that will do so.  Completion date is TBD.&lt;br /&gt;
&lt;br /&gt;
=== Reference ===&lt;br /&gt;
&lt;br /&gt;
* Some helpful models to show the locations of various types of bones can be found at https://marketplace.secondlife.com/p/Avatar-Testing-and-Visualization-Kit/9842033&lt;br /&gt;
&lt;br /&gt;
== Scale Locking Option ==&lt;br /&gt;
&lt;br /&gt;
With Project Bento, the option to have an uploaded mesh attachment completely ignore all slider input was also added.&lt;br /&gt;
&lt;br /&gt;
When you upload a model beneath the standard &amp;quot;Include skin weight&amp;quot; and &amp;quot;Include joint positions&amp;quot; check boxes, there is now an additional check box for &amp;quot;Lock scale if joint position defined&amp;quot;. If you check this box, then any joint that has a position defined will also have its scale locked. Scale locking will be enforced whenever a joint would normally be scaled by a slider thus &amp;quot;immunizing&amp;quot; it to all slider influence.&lt;br /&gt;
To make a bone truly slider-proof, you will have to pay attention to the joint hierarchy. Any change to the scale of a parent bone will also cause the child bone to move, so you will have to make sure the bone&#039;s ancestors also have joint positions defined. A joint position will be ignored unless it differs from the bone&#039;s default location by at least 0.1 mm (ie, 0.0001 m in the units used by the skeleton definition file). If you want to lock a joint without changing its position, use a very small offset that will not be large enough to have a visual effect (some fraction of a mm).&lt;br /&gt;
&lt;br /&gt;
This feature was primarily included to assist with making &amp;quot;animated attachments&amp;quot; that re-purpose bone sets, such as the hind legs, wings or tail into pets or weapon attachments.  Ideally such attachments would not want slider influences due to the fact that the bones comprising them are &amp;quot;borrowed&amp;quot; from another part of the body.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reset Skeleton Menu Option [Viewer]==&lt;br /&gt;
With the addition of Project Bento a new menu option was added to the viewer.  If you Right-Click another avatar the option to &amp;quot;&#039;&#039;Reset Skeleton&#039;&#039;&amp;quot; will appear, along with it&#039;s cousin &amp;quot;&#039;&#039;Reset Skeleton and Animations&#039;&#039;&amp;quot;.  This added functionality provides any resident the ability to attempt to visually fix another avatar that looks deformed on their screen.&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;Note this option does not send any data to the server.  This means that if you use &amp;quot;Reset Skeleton&amp;quot; on a deformed avatar ( including yourself ) that currently does NOT perform this action for everyone else viewing the deformed avatar.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This was done because visibly deformed avatars aren&#039;t always deformed universally.  The logic for why this is is long and complex, involving the mechanics of how avatars are loaded.  This feature isn&#039;t a fix-all, but is a great alternative to completely logging out of the client and reconnecting, which, prior to this update, used to be the only reliable way to resolve this sort of issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==I found a problem? How can I give feedback?==&lt;br /&gt;
&lt;br /&gt;
As always if you discover an undocumented bug please report it at [https://feedback.secondlife.com Second Life Feedback Portal] with the tag [BENTO]  in the summary line for it to be properly addressed!&lt;br /&gt;
&lt;br /&gt;
If you have a display problem, please test to see if there is a difference with with hardware skinning Enabled and Disabled&lt;br /&gt;
:Me-&amp;gt;Preferences-&amp;gt;Graphics-&amp;gt;Advanced-&amp;gt;Avatar Rendering-&amp;gt;Hardware skinning checkbox&lt;/div&gt;</summary>
		<author><name>Dantia Gothly</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Project_Bento_Resources_and_Information&amp;diff=1218208</id>
		<title>Project Bento Resources and Information</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Project_Bento_Resources_and_Information&amp;diff=1218208"/>
		<updated>2025-04-28T04:51:40Z</updated>

		<summary type="html">&lt;p&gt;Dantia Gothly: Updated the bug report URL to point to the feedback portal.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Welcome to Project Bento! As we mentioned in [https://community.secondlife.com/t5/Featured-News/Introducing-Project-Bento-New-Bones-Added-to-Second-Life-Avatar/ba-p/2987206 our announcement], Project Bento is adding new bones and attachment points to the avatar skeleton.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Project Bento Testing is now Complete!  Project Bento is now Live in all regions on all viewers!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== What is Project Bento?? ==&lt;br /&gt;
&lt;br /&gt;
Project Bento is an update to the Second Life Avatar Skeleton which is what allows Second Life Avatars to move and come to life, as well as enabling the creation of more lifelike and intricate rigged mesh attachments.&lt;br /&gt;
&lt;br /&gt;
===Bone Updates===&lt;br /&gt;
&lt;br /&gt;
The Project Bento Update added bones to the skeleton to expand rigging and animation support in the following areas:&lt;br /&gt;
&lt;br /&gt;
* Facial Area (new)&lt;br /&gt;
* Spine (additional bones)&lt;br /&gt;
* Hands (new finger bones)&lt;br /&gt;
* Tail (new)&lt;br /&gt;
* Wings (new)&lt;br /&gt;
* Hind Legs for Quadruped Avatars (new)&lt;br /&gt;
&lt;br /&gt;
A full list of the alterations for the skeleton are [[Project Bento Skeleton Guide|here]].&lt;br /&gt;
&lt;br /&gt;
===Slider System / Shape Updates===&lt;br /&gt;
Additionally Project Bento updated the existing avatar shape system to make the adjustment sliders affect these new bones on top of it&#039;s previous (unaltered) shape control functionality.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Scope of slider interactions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
While the updates to the slider system made it so that these new bones move with sliders, it does not override, or affect in any way existing behavior on the default Linden Avatar head and hands.  The default Linden Avatar depends on &#039;&#039;morph targets&#039;&#039; to perform hand poses and facial expressions.  This is a completely different system from using &#039;&#039;bone based rigging&#039;&#039; on mesh attachments worn in the same regions of the body (which is what Project Bento adds support for).  While these two systems are affected &#039;&#039;similarly&#039;&#039; by slider manipulation by design, it is good to keep in mind that it is an approximation, and only that.  It is fundamentally impossible to exactly mimic the motion of a morph target based system with a bone based rigging system.  For example : sliders will affect a mesh attachment head differently than it affects the Linden Avatar head.  This is unavoidable due to how both systems differ mechanically.&lt;br /&gt;
&lt;br /&gt;
===Animation File Updates===&lt;br /&gt;
On top of additional bones and slider integration, Project Bento also increased the maximum allowable size of animation files, and also removed the restriction on BVH animation file uploads that prevented translation based bone movement.&lt;br /&gt;
&lt;br /&gt;
===Partial Skeletons===&lt;br /&gt;
Upload of rigged content no longer needs all the bones specified in the DAE file for convenience purposes. For rigged content, simply omitting unused/missing bones from the skinning data is now allowed.&lt;br /&gt;
&lt;br /&gt;
== Caveats &amp;amp; Best Practices ==&lt;br /&gt;
&lt;br /&gt;
*Due to the restrictions of the pre-existing Second Life Animation System. Playing animations that affect bone scale will (continue to) not work with Project Bento, however the slider system has been incorporated to adjust bone positions and bone scale.&lt;br /&gt;
*Any slider controls that affect the position ( translation ) of a specific bone will be overridden if the user plays an animation that moves that bone.  Since presently the animation system has no means of knowing the positional offset that the slider is providing, that animation will be played based off of the bones natural ( pre-slider adjustment ) position.  However the slider&#039;s influence on the affected bones scale will not be altered, as animations presently cannot affect bone scale.&lt;br /&gt;
&lt;br /&gt;
Because of the above two restrictions it is ill advised, to mix content where you want the translation based sliders to work with translation based animations. Because the animation will always override the slider.&lt;br /&gt;
For a list of all the bones that are influenced by sliders that adjust their position refer to this : https://wiki.secondlife.com/wiki/Project_Bento_Skeleton_Guide#Bones_Currently_Affected_By_Positional_Sliders&lt;br /&gt;
&lt;br /&gt;
This was the best practical alternative to simply not allowing translation based animations at all due to the possibility of them overriding sliders.   The community asked for the ability to have translation/position based animations available for greater creative control and it was agreed upon that suffering the confusion from this conflict of behavior was still an overall gain.&lt;br /&gt;
&lt;br /&gt;
Prior to Project Bento, rigging to attachment points was never formally supported, and was strongly discouraged, as once an animation stops playing it often leaves the attachment points in a deformed location that is very difficult for a resident to understand.  With the addition of Project Bento, meshes rigged to Attachment points &#039;&#039;may be rejected by the server&#039;&#039;  since one of the primary reasons for the addition of these new bones was to discourage this process.&lt;br /&gt;
&lt;br /&gt;
== Current Content &amp;amp; Resources ==&lt;br /&gt;
&lt;br /&gt;
=== Models &amp;amp; Skeleton Files / Test Content ===&lt;br /&gt;
&lt;br /&gt;
Note: to add new test content to the wiki, you can first attach it to [https://jira.secondlife.com/browse/BUG-10981 BUG-10981], then post a link to that attachment in the wiki. The wiki does not allow attaching most file formats directly.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Collada (dae) files&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
The following model files are compatible with the current project viewer, as of 2016-07-14, and should work with currently implemented sliders. Includes weighting to the new mFaceJawShaper bone.&lt;br /&gt;
&lt;br /&gt;
* [https://bitbucket.org/lindenlab/secondlife-creator-resources/raw/master/models/collada/female_2016_08_05.dae.zip human female] (August 5, 2016) (attention, this rig is broken)&lt;br /&gt;
* [https://bitbucket.org/lindenlab/secondlife-creator-resources/raw/master/models/collada/male_2016_08_05.dae.zip human male] (August 5, 2016)&lt;br /&gt;
* [https://bitbucket.org/lindenlab/secondlife-creator-resources/raw/master/models/collada/angel_2016_08_05.dae.zip angel] (August 5, 2016)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Maya (ma) files&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
These are also current with the skeleton of July 14, 2016:&lt;br /&gt;
&lt;br /&gt;
* [https://bitbucket.org/lindenlab/secondlife-creator-resources/raw/master/models/maya/MayaBentoFemaleAugust2016.ma.zip maya human female] (August 17, 2016)&lt;br /&gt;
(NOTE: Standard Skeleton with bone located in standard positions determined by the avatar_skeleton.xml file.)&lt;br /&gt;
* [https://bitbucket.org/lindenlab/secondlife-creator-resources/raw/master/models/maya/MayaBentoMaleAugust2016.ma.zip maya human male] (August 17, 2016)&lt;br /&gt;
(NOTE: Standard Skeleton with bone located in standard positions determined by the avatar_skeleton.xml file.)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FBX files&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* [https://bitbucket.org/lindenlab/secondlife-creator-resources/raw/master/models/fbx/FBXBentoFemaleSeptember2016.fbx fbx human female] (September 10, 2016)&lt;br /&gt;
* [https://bitbucket.org/lindenlab/secondlife-creator-resources/raw/master/models/fbx/FBXBentoMaleSeptember2016.fbx fbx human male] (September 10, 2016)&lt;br /&gt;
&lt;br /&gt;
These are based on the Maya files above.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3ds Max (max) files&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
All files are saved as 3dsmax2012 files, if your version predates this, they probably won&#039;t load.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Basic&amp;quot; skeleton files contain no additional nodes and will not work for advanced control rigs and animation export, but are simpler, contain less clutter and might be ideal for simple rigging&amp;amp;skinning work.  However bone rotation axis will not behave ideally for animations.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Normal/Animation&amp;quot; Rigs have additional nodes for ease of use with animations, but animation must be done on &amp;quot;mBoneName_DRV&amp;quot; point helper nodes instead of the bones directly. These skeleton files have nodes oriented in a manner that will make joints rotate on their local axis.  This is particularly useful for mimicing animation in parts of the bento skeleton such as the hands and face where the bone is not aligned with an axis ( perpendicular to other things in the scene ).  Hopefully these skeleton rigs will help understanding of the new joints.&lt;br /&gt;
&lt;br /&gt;
For both skeletons ( both &amp;quot;basic&amp;quot; and &amp;quot;animation&amp;quot; ) the mesh skinning and rigging should be done to the mBoneName or &amp;quot;collision volume&amp;quot; (fitmesh) bones / dummies only. All skeletons are default (female) bone positions ONLY.&lt;br /&gt;
&lt;br /&gt;
* [https://bitbucket.org/polysail/bento-max2012-skeletons/raw/bc20e9c13a37b6d834ce92b63339f911f08c2e5b/BentoBones_BonesOnly_2012.max basic skeleton bone nodes] (December 26, 2016)&lt;br /&gt;
* [https://bitbucket.org/polysail/bento-max2012-skeletons/raw/bc20e9c13a37b6d834ce92b63339f911f08c2e5b/BentoBones_DummyNodesOnly_2012.max basic skeleton dummy nodes] (December 26, 2016)&lt;br /&gt;
* [https://bitbucket.org/polysail/bento-max2012-skeletons/raw/bc20e9c13a37b6d834ce92b63339f911f08c2e5b/LocalAnimationOrientation_Bones_2012.max skeleton bone nodes] (December 26, 2016)&lt;br /&gt;
* [https://bitbucket.org/polysail/bento-max2012-skeletons/raw/bc20e9c13a37b6d834ce92b63339f911f08c2e5b/LocalAnimationOrientation_DummyNodes_2012.max skeleton dummy nodes] (December 26, 2016)&lt;br /&gt;
&lt;br /&gt;
Dec, 2016 update fixes minor rotation issues in the collision volume bones that existed in the initial August 2016 posting.&lt;br /&gt;
&lt;br /&gt;
=== Test Animations ===&lt;br /&gt;
* [https://bitbucket.org/lindenlab/secondlife-creator-resources/raw/master/animations/anim/bento_randomize_bones_and_attachments.anim scramble the positions] of all bones and attachments&lt;br /&gt;
* [https://bitbucket.org/lindenlab/secondlife-creator-resources/raw/master/animations/anim/bento_reset_bones_and_attachments.anim reset the positions] of all bones and attachments to the default.&lt;br /&gt;
&lt;br /&gt;
=== Animation Export Tools ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Maya&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following tools are used for export of BVH animation files from Autodesk Maya Software.  The exporter was authored by Aura Linden and is available for free below.&lt;br /&gt;
&lt;br /&gt;
It works ideally with the skeleton included in [https://marketplace.secondlife.com/p/MayaStar-Plugin-System-for-Maya-Autodesk/5454253 Mayastar], maintained by Cathy Foil.  But should be able to be used as a standalone script as well.&lt;br /&gt;
&lt;br /&gt;
* [https://bitbucket.org/lindenlab/secondlife-creator-resources/raw/master/tools/maya/Maya_BVH_Export_Bento_Project.mel Maya BVH Animation Exporter] - mel script --&#039;&#039;&#039;Note: when animating in Maya for export, orient your skeleton in Y+ up , X+ forward orientation.&#039;&#039;&#039;&lt;br /&gt;
* [https://bitbucket.org/lindenlab/secondlife-creator-resources/raw/master/tools/maya/maya_bvh_export_instructions.txt Maya BVH exporter instructions] - text file&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Blender&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
While blender does not have any freely available animation exporters specifically for Second Life, it has an excellently maintained plugin package known as [https://blog.machinimatrix.org/avastar/ Avastar] maintained by Gaia Clary.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3DSMax&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Autodesk 3D Studio Max presently does not have any publicly available animation exporters.  However, polysail resident is presently working on a plugin that will do so.  Completion date is TBD.&lt;br /&gt;
&lt;br /&gt;
=== Reference ===&lt;br /&gt;
&lt;br /&gt;
* Some helpful models to show the locations of various types of bones can be found at https://marketplace.secondlife.com/p/Avatar-Testing-and-Visualization-Kit/9842033&lt;br /&gt;
&lt;br /&gt;
== Scale Locking Option ==&lt;br /&gt;
&lt;br /&gt;
With Project Bento, the option to have an uploaded mesh attachment completely ignore all slider input was also added.&lt;br /&gt;
&lt;br /&gt;
When you upload a model beneath the standard &amp;quot;Include skin weight&amp;quot; and &amp;quot;Include joint positions&amp;quot; check boxes, there is now an additional check box for &amp;quot;Lock scale if joint position defined&amp;quot;. If you check this box, then any joint that has a position defined will also have its scale locked. Scale locking will be enforced whenever a joint would normally be scaled by a slider thus &amp;quot;immunizing&amp;quot; it to all slider influence.&lt;br /&gt;
To make a bone truly slider-proof, you will have to pay attention to the joint hierarchy. Any change to the scale of a parent bone will also cause the child bone to move, so you will have to make sure the bone&#039;s ancestors also have joint positions defined. A joint position will be ignored unless it differs from the bone&#039;s default location by at least 0.1 mm (ie, 0.0001 m in the units used by the skeleton definition file). If you want to lock a joint without changing its position, use a very small offset that will not be large enough to have a visual effect (some fraction of a mm).&lt;br /&gt;
&lt;br /&gt;
This feature was primarily included to assist with making &amp;quot;animated attachments&amp;quot; that re-purpose bone sets, such as the hind legs, wings or tail into pets or weapon attachments.  Ideally such attachments would not want slider influences due to the fact that the bones comprising them are &amp;quot;borrowed&amp;quot; from another part of the body.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reset Skeleton Menu Option [Viewer]==&lt;br /&gt;
With the addition of Project Bento a new menu option was added to the viewer.  If you Right-Click another avatar the option to &amp;quot;&#039;&#039;Reset Skeleton&#039;&#039;&amp;quot; will appear, along with it&#039;s cousin &amp;quot;&#039;&#039;Reset Skeleton and Animations&#039;&#039;&amp;quot;.  This added functionality provides any resident the ability to attempt to visually fix another avatar that looks deformed on their screen.&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;Note this option does not send any data to the server.  This means that if you use &amp;quot;Reset Skeleton&amp;quot; on a deformed avatar ( including yourself ) that currently does NOT perform this action for everyone else viewing the deformed avatar.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This was done because visibly deformed avatars aren&#039;t always deformed universally.  The logic for why this is is long and complex, involving the mechanics of how avatars are loaded.  This feature isn&#039;t a fix-all, but is a great alternative to completely logging out of the client and reconnecting, which, prior to this update, used to be the only reliable way to resolve this sort of issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==I found a problem? How can I give feedback?==&lt;br /&gt;
&lt;br /&gt;
As always if you discover an undocumented bug please report it at [https://feedback.secondlife.com// Second Life Feedback Portal] with the tag [BENTO]  in the summary line for it to be properly addressed!&lt;br /&gt;
&lt;br /&gt;
If you have a display problem, please test to see if there is a difference with with hardware skinning Enabled and Disabled&lt;br /&gt;
:Me-&amp;gt;Preferences-&amp;gt;Graphics-&amp;gt;Advanced-&amp;gt;Avatar Rendering-&amp;gt;Hardware skinning checkbox&lt;/div&gt;</summary>
		<author><name>Dantia Gothly</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlGetCameraAspect&amp;diff=1217840</id>
		<title>LlGetCameraAspect</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlGetCameraAspect&amp;diff=1217840"/>
		<updated>2024-12-28T13:40:49Z</updated>

		<summary type="html">&lt;p&gt;Dantia Gothly: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function/permission|PERMISSION_TRACK_CAMERA}}{{LSL_Function&lt;br /&gt;
|func=llGetCameraAspect&lt;br /&gt;
|sort=GetCameraAspect&lt;br /&gt;
|func_id=545&lt;br /&gt;
|func_sleep=0.0&lt;br /&gt;
|func_energy=10.0&lt;br /&gt;
|return_type=float&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text=value for the current camera&#039;s aspect ratio (e.g. width/height) of the agent for which the task has permissions.&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=Returns zero when permissions have not been granted.&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;// say the camera aspect ratio and field of view (FOV)&lt;br /&gt;
integer has_perms = FALSE;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer a)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(llGetOwner(), PERMISSION_TRACK_CAMERA);&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer permission)&lt;br /&gt;
    {&lt;br /&gt;
        has_perms = (permission == PERMISSION_TRACK_CAMERA);&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer num_touches)&lt;br /&gt;
    {&lt;br /&gt;
        if (has_perms)&lt;br /&gt;
        {&lt;br /&gt;
            float aspect = llGetCameraAspect();&lt;br /&gt;
            float fov = llGetCameraFOV();&lt;br /&gt;
            llOwnerSay(&amp;quot;aspect = &amp;quot; + (string)aspect + &amp;quot;  FOV = &amp;quot; + (string)fov);&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llRequestPermissions(llGetOwner(), PERMISSION_TRACK_CAMERA);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;// Scale an object to fit the aspect ratio of the viewer.&lt;br /&gt;
fit_to_screen()&lt;br /&gt;
{&lt;br /&gt;
    // The X axis from the left to  the right edge of the screen is 0.0 to width value.&lt;br /&gt;
    // The Y axis is always 1.&lt;br /&gt;
    float x = llGetCameraAspect();&lt;br /&gt;
    float y = 1;&lt;br /&gt;
    llSetLinkPrimitiveParamsFast(LINK_THIS, [PRIM_SIZE, &amp;lt;0, x, y&amp;gt;]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||{{LSLG|llGetCameraFOV}}|}}&lt;br /&gt;
{{LSL DefineRow||{{LSLG|llGetCameraPos}}|}}&lt;br /&gt;
{{LSL DefineRow||{{LSLG|llGetCameraRot}}|}}&lt;br /&gt;
{{LSL DefineRow||{{LSLG|llSetCameraParams}}|}}&lt;br /&gt;
{{LSL DefineRow||{{LSLG|llSetCameraAtOffset}}|}}&lt;br /&gt;
{{LSL DefineRow||{{LSLG|llSetCameraEyeOffset}}|}}&lt;br /&gt;
|notes=&lt;br /&gt;
The reported aspect ratio is based on values provided by the viewer to the simulator. This may cause visual oddities if there&#039;s a discrepancy between the viewer&#039;s reported camera and what the viewer actually displays to the user. For example: entering mouselook may cause portions of the viewer interface to disappear, which alters the amount of space available to the HUD, which can lead to misaligned positioning or slightly-off aspect ratio. (This is currently considered a viewer-bug.)&lt;br /&gt;
|cat1=Camera&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Dantia Gothly</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlGetCameraAspect&amp;diff=1217837</id>
		<title>LlGetCameraAspect</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlGetCameraAspect&amp;diff=1217837"/>
		<updated>2024-12-28T12:23:18Z</updated>

		<summary type="html">&lt;p&gt;Dantia Gothly: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function/permission|PERMISSION_TRACK_CAMERA}}{{LSL_Function&lt;br /&gt;
|func=llGetCameraAspect&lt;br /&gt;
|sort=GetCameraAspect&lt;br /&gt;
|func_id=545&lt;br /&gt;
|func_sleep=0.0&lt;br /&gt;
|func_energy=10.0&lt;br /&gt;
|return_type=float&lt;br /&gt;
|func_desc&lt;br /&gt;
|return_text=value for the current camera&#039;s aspect ratio (e.g. width/height) of the agent for which the task has permissions.&lt;br /&gt;
|spec&lt;br /&gt;
|caveats=Returns zero when permissions have not been granted.&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;// say the camera aspect ratio and field of view (FOV)&lt;br /&gt;
integer has_perms = FALSE;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer a)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(llGetOwner(), PERMISSION_TRACK_CAMERA);&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer permission)&lt;br /&gt;
    {&lt;br /&gt;
        has_perms = (permission == PERMISSION_TRACK_CAMERA);&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer num_touches)&lt;br /&gt;
    {&lt;br /&gt;
        if (has_perms)&lt;br /&gt;
        {&lt;br /&gt;
            float aspect = llGetCameraAspect();&lt;br /&gt;
            float fov = llGetCameraFOV();&lt;br /&gt;
            llOwnerSay(&amp;quot;aspect = &amp;quot; + (string)aspect + &amp;quot;  FOV = &amp;quot; + (string)fov);&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llRequestPermissions(llGetOwner(), PERMISSION_TRACK_CAMERA);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lsl2&amp;quot;&amp;gt;// Scale an object to fit the aspect ratio of the viewer.&lt;br /&gt;
fit_to_screen()&lt;br /&gt;
{&lt;br /&gt;
    // The X axis from the left to  the right edge of the screen is 0 to 1.&lt;br /&gt;
    // The Y axis is always 1.&lt;br /&gt;
    float x = llGetCameraAspect();&lt;br /&gt;
    float y = 1;&lt;br /&gt;
    llSetLinkPrimitiveParamsFast(LINK_THIS, [PRIM_SIZE, &amp;lt;0, x, y&amp;gt;]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||{{LSLG|llGetCameraFOV}}|}}&lt;br /&gt;
{{LSL DefineRow||{{LSLG|llGetCameraPos}}|}}&lt;br /&gt;
{{LSL DefineRow||{{LSLG|llGetCameraRot}}|}}&lt;br /&gt;
{{LSL DefineRow||{{LSLG|llSetCameraParams}}|}}&lt;br /&gt;
{{LSL DefineRow||{{LSLG|llSetCameraAtOffset}}|}}&lt;br /&gt;
{{LSL DefineRow||{{LSLG|llSetCameraEyeOffset}}|}}&lt;br /&gt;
|notes=&lt;br /&gt;
The reported aspect ratio is based on values provided by the viewer. This may cause visual oddities if there&#039;s a discrepancy between the viewer&#039;s reported camera and what the viewer actually displays to the user. For example: entering mouselook may cause portions of the viewer interface to disappear, which alters the amount of space available to the HUD, which can lead to misaligned positioning or slightly-off aspect ratio.&lt;br /&gt;
|cat1=Camera&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Dantia Gothly</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LlSetAgentRot&amp;diff=1217650</id>
		<title>LlSetAgentRot</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LlSetAgentRot&amp;diff=1217650"/>
		<updated>2024-11-14T14:47:52Z</updated>

		<summary type="html">&lt;p&gt;Dantia Gothly: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL_Function&lt;br /&gt;
|func_id=|func_sleep=0.0|func_energy=10.0&lt;br /&gt;
|func=llSetAgentRot&lt;br /&gt;
|p1_type=rotation|p1_name=rot|p1_desc=Rotation for avatar.&lt;br /&gt;
|p2_type=integer|p2_name=flags|p2_desc=Flags to control behavior of llSetAgentRot.&lt;br /&gt;
|func_desc=Sets the rotation the avatar to {{LSLP|rot}}.&lt;br /&gt;
|return_text&lt;br /&gt;
|spec=This function turns the avatar to face the direction indicated by {{LSLP|rot}}.&lt;br /&gt;
&lt;br /&gt;
{{LSLP|flags}} is a placeholder for future expansion. There are no flags defined at this time, pass a constant value of 0.&lt;br /&gt;
&lt;br /&gt;
|caveats=* This function requires PERMISSION_TRIGGER_ANIMATION.&lt;br /&gt;
* This function will only rotate an avatar around the yaw angle.&lt;br /&gt;
** More complex rotations may be passed in, but the yaw is extracted and then renormalized.&lt;br /&gt;
* Rotating to ZERO_ROTATION will face an avatar due east.&lt;br /&gt;
* This function will not change the rotation for a seated avatar. Update the agent&#039;s sit target instead.&lt;br /&gt;
** Special case: If the agent is seated on a prim WITHOUT a sit target they will be turned to face the set rotation when they stand.&lt;br /&gt;
&lt;br /&gt;
|spec&lt;br /&gt;
|constants&lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
// Turn the touching avatar to face the same direction as the prim.&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetText(&amp;quot;Avatar Rotator&amp;quot;, llGetColor(ALL_SIDES), 1.0);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(llDetectedKey(0), PERMISSION_TRIGGER_ANIMATION);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if (perm &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llSetAgentRot(llGetRot(), 0);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
|helpers&lt;br /&gt;
|also_functions=&lt;br /&gt;
{{LSL DefineRow||[[llRequestPermissions]]|}}&lt;br /&gt;
|also_tests&lt;br /&gt;
|also_events&lt;br /&gt;
|also_articles&lt;br /&gt;
|notes&lt;br /&gt;
|issues&lt;br /&gt;
|cat1=Movement&lt;br /&gt;
|cat2=Rotation&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Dantia Gothly</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1216170</id>
		<title>User:Dantia Gothly</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1216170"/>
		<updated>2024-02-05T18:47:29Z</updated>

		<summary type="html">&lt;p&gt;Dantia Gothly: Replaced content with &amp;quot;{{LSL Header}}  Hello, I am Dantia Gothly  I am a content creator and owner of Purgatory.    {{skills |Architect=* |Builder=* |Scripter=* |Terraformer=* |}} {{ISO 639-3/ca...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
&lt;br /&gt;
Hello, I am Dantia Gothly&lt;br /&gt;
&lt;br /&gt;
I am a content creator and owner of Purgatory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{skills&lt;br /&gt;
|Architect=*&lt;br /&gt;
|Builder=*&lt;br /&gt;
|Scripter=*&lt;br /&gt;
|Terraformer=*&lt;br /&gt;
|}}&lt;br /&gt;
{{ISO 639-3/cat-speaking|eng}}&lt;/div&gt;</summary>
		<author><name>Dantia Gothly</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1140162</id>
		<title>User:Dantia Gothly</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1140162"/>
		<updated>2011-04-12T21:04:22Z</updated>

		<summary type="html">&lt;p&gt;Dantia Gothly: /* Dans open source scripts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dans open source scripts ==&lt;br /&gt;
{{LSL Header|[http://terminalproxy.com/]}}&lt;br /&gt;
&lt;br /&gt;
Hello there! I&#039;m Dantia Gothly&lt;br /&gt;
&lt;br /&gt;
Scripter,Sculpter,Texture artist.&lt;br /&gt;
&lt;br /&gt;
creater of TopHat Viewer link-&amp;gt;(http://terminalproxy.com/)&lt;br /&gt;
&lt;br /&gt;
I believe you can do just about everything in 1 script&lt;br /&gt;
&lt;br /&gt;
but that also depends on what it is your doing. For the most part it can be.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
quote:&amp;quot;dose it work? Yes it do.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
..........................................................................................................................&lt;br /&gt;
&lt;br /&gt;
Pulsing alpha on a face.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// Here I use a single function for llSetTimerEvent(); for toggling on/off in the timer event&lt;br /&gt;
integer Alpha;&lt;br /&gt;
integer Q;&lt;br /&gt;
integer Time;&lt;br /&gt;
integer Speed = 500;&lt;br /&gt;
//~~~~~~~~~~~~~&lt;br /&gt;
DatAction()&lt;br /&gt;
{&lt;br /&gt;
    llSetLinkAlpha(LINK_THIS,(float)Alpha*.01,2);&lt;br /&gt;
}&lt;br /&gt;
//~~~~~~~~~~~~~&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer face)&lt;br /&gt;
    {&lt;br /&gt;
        Time=!Time;// 1.0 &amp;lt;&amp;lt;&amp;gt;&amp;gt; 0.0 &lt;br /&gt;
        llSetTimerEvent((float)(Time*.01));&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        for(Q=0;Q&amp;lt;Speed;Q++)&lt;br /&gt;
        {&lt;br /&gt;
            Alpha++;&lt;br /&gt;
            DatAction();&lt;br /&gt;
        }&lt;br /&gt;
        for(Q=0;Q&amp;lt;Speed;Q++)&lt;br /&gt;
        {&lt;br /&gt;
            Alpha--;&lt;br /&gt;
            DatAction();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
Here is a nonphysical train script&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Dantia Gothly 12/22/2010&lt;br /&gt;
//This Script is for Open Source use.&lt;br /&gt;
//Bug:&lt;br /&gt;
//Too many sound requests.  Throttled until average falls.&lt;br /&gt;
&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//                                     (Globle Settings)&lt;br /&gt;
&lt;br /&gt;
// Door movment:&lt;br /&gt;
float T_S2 = 2.0;//timer stoped before opening door.&lt;br /&gt;
float Train_leave = 0.8;//how long the train sits after closing the doors and takes off&lt;br /&gt;
float Door_open = 10.0;//How long the doors are Open.&lt;br /&gt;
integer door1 = 2;//find the link number for the door you want to move.&lt;br /&gt;
integer door2 = 3;&lt;br /&gt;
float Door_Slid_dist = 3.3;//sets the slide forword distance of the door on the X axis&lt;br /&gt;
&lt;br /&gt;
//Math:&lt;br /&gt;
integer num = 1;//do math 1+1=__&lt;br /&gt;
integer num2 = 1;&lt;br /&gt;
&lt;br /&gt;
//Predefined integers etc:&lt;br /&gt;
integer i;&lt;br /&gt;
integer t;&lt;br /&gt;
&lt;br /&gt;
//Train turn timming:&lt;br /&gt;
float M_1 = 255;// first turn&lt;br /&gt;
float M_2 = 735;//second turn&lt;br /&gt;
float M_3 = 1215;//therd turn&lt;br /&gt;
float M_4 = 1695;//forth turn&lt;br /&gt;
&lt;br /&gt;
//Station stop timming:&lt;br /&gt;
float W_S = 1920;//start train at west station.&lt;br /&gt;
float E_S = 985;//stop at east station.&lt;br /&gt;
&lt;br /&gt;
//Speed:(note:If this number changes the turn timming and stops must be changed)&lt;br /&gt;
float speed = .20;// Speed controls the PRIM_POSITION&lt;br /&gt;
&lt;br /&gt;
//Timers:&lt;br /&gt;
float T_S1 = 0.001;//Timer controls the default timer&lt;br /&gt;
float Horn_timing = 1.0;//horn sound then door opens/closes.&lt;br /&gt;
float door_Open_timing = 1.7;&lt;br /&gt;
float door_Close_timing = 2.6;&lt;br /&gt;
&lt;br /&gt;
//Sounds:&lt;br /&gt;
string Eng = &amp;quot;d0dc3135-d00a-a3ed-88b0-412a9d867734&amp;quot;;//freezer-s&lt;br /&gt;
string movment = &amp;quot;8737851f-17e3-bb15-b71e-f4235ad64f65&amp;quot;;//train-going&lt;br /&gt;
string Stops = &amp;quot;51a96f42-80ff-db3f-d44f-01002c921946&amp;quot;;//train-breaks&lt;br /&gt;
string Horn = &amp;quot;4e7218f7-6983-64d6-7d0b-bca5b19dfec8&amp;quot;;//train-stand-clear&lt;br /&gt;
string DoorOpen = &amp;quot;26dc4084-9380-e0d2-8810-f624277b6e66&amp;quot;;//train-door-open&lt;br /&gt;
string DoorClose = &amp;quot;fffcde68-ad75-4c7b-17ff-7cfecf65cd4a&amp;quot;;//train-door-close&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Volume:&lt;br /&gt;
float Vol3 = 1.0;// Volume high.&lt;br /&gt;
float Vol2 = 0.5;// Volume mid.&lt;br /&gt;
float Vol1 = 0.2;// Volume low.&lt;br /&gt;
float Vol0 = 0.0;// Volume mute.&lt;br /&gt;
&lt;br /&gt;
//Reset or fix:&lt;br /&gt;
float R_B = 14;// link number of the reset botton.&lt;br /&gt;
vector D_L = &amp;lt;68.000,124.100,34.109&amp;gt;;//Default location.&lt;br /&gt;
vector D_R = &amp;lt;0.00,0.00,90.00&amp;gt;;//Default rotation.&lt;br /&gt;
&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//User defind functions are wonderful&lt;br /&gt;
SetLinkPosLocal2Root(integer linknum,vector offset)&lt;br /&gt;
{&lt;br /&gt;
    llSetLinkPrimitiveParamsFast(linknum, [PRIM_POSITION, ((llList2Vector(&lt;br /&gt;
    llGetLinkPrimitiveParams(linknum, [PRIM_POSITION]),0) - llGetPos())/llGetRot())+offset]);&lt;br /&gt;
}&lt;br /&gt;
DatRotPos()&lt;br /&gt;
{&lt;br /&gt;
    integer t;&lt;br /&gt;
    rotation rot=llGetRot();&lt;br /&gt;
    for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
    {&lt;br /&gt;
       llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
       [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
       PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
       llSleep(0.04);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S1);&lt;br /&gt;
        llLoopSound(Eng,Vol3);&lt;br /&gt;
        llLoopSound(movment,Vol3);&lt;br /&gt;
    }&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        integer t;&lt;br /&gt;
        rotation rot=llGetRot();&lt;br /&gt;
        &lt;br /&gt;
        num += num2;&lt;br /&gt;
        llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
        [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot())]);&lt;br /&gt;
    &lt;br /&gt;
        if(num == M_1)&lt;br /&gt;
        {&lt;br /&gt;
           DatRotPos();&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_2)&lt;br /&gt;
        {&lt;br /&gt;
           DatRotPos();&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_3)&lt;br /&gt;
        {&lt;br /&gt;
           DatRotPos();&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_4)&lt;br /&gt;
        {&lt;br /&gt;
           DatRotPos();&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == W_S)&lt;br /&gt;
        {&lt;br /&gt;
            num = 0;&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            state two;&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == E_S)&lt;br /&gt;
        {&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            state two;&lt;br /&gt;
        }           &lt;br /&gt;
        llSetText(&amp;quot;&amp;quot;,&amp;lt;1,1,1&amp;gt;,1.0);//Display math.&lt;br /&gt;
    }&lt;br /&gt;
///////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
// In case the train brakes touch Reset botton.&lt;br /&gt;
    touch_start(integer face)&lt;br /&gt;
    {&lt;br /&gt;
        if(llDetectedLinkNumber(0) == R_B)&lt;br /&gt;
        {&lt;br /&gt;
            num = 0;&lt;br /&gt;
            state fix;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
///////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
state two&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S2);&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorOpen,Vol3);&lt;br /&gt;
        llSleep(door_Open_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Door_open);&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorClose,Vol3);&lt;br /&gt;
        llSleep(door_Close_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Train_leave);&lt;br /&gt;
&lt;br /&gt;
        state default;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
state fix&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(0.01);&lt;br /&gt;
        llOwnerSay(&amp;quot;Reseting train...&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
        [PRIM_POSITION,D_L,&lt;br /&gt;
        PRIM_ROTATION,(llEuler2Rot(D_R*DEG_TO_RAD))]);&lt;br /&gt;
        &lt;br /&gt;
        if(llGetPos() == D_L)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(&amp;quot;Restarting train...&amp;quot;);&lt;br /&gt;
            llSleep(2.0);&lt;br /&gt;
            state default;&lt;br /&gt;
        }        &lt;br /&gt;
    }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a good way to do Random llRezObject.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer i;&lt;br /&gt;
&lt;br /&gt;
DGRandomRez(float number)&lt;br /&gt;
{&lt;br /&gt;
    for(i=(integer)llFrand(number);i&amp;gt;0;i--)&lt;br /&gt;
    {&lt;br /&gt;
        llRezObject(&amp;quot;Object&amp;quot;, llGetPos() + &amp;lt;0.0,0.0,1.0&amp;gt;, &amp;lt;llFrand(3.0),llFrand(3.0),llFrand(3.0)&amp;gt;, &amp;lt;0.0,0.0,llFrand(360),1.0&amp;gt;, 0);   &lt;br /&gt;
    }  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
   state_entry()&lt;br /&gt;
   {&lt;br /&gt;
      DGRandomRez(5);//This will rez an object at random 1-5.&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
Sound looper for when your walking.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
float Timer = 1;&lt;br /&gt;
integer Sound = 1;//what sound to play.&lt;br /&gt;
float Vol = 0.8;&lt;br /&gt;
integer GLL;&lt;br /&gt;
list Sounds = [&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;];//List of sounds.&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        GLL = llGetListLength(Sounds);&lt;br /&gt;
        llSetTimerEvent(Timer);&lt;br /&gt;
        integer Q;&lt;br /&gt;
        &lt;br /&gt;
        for(Q=0;Q&amp;lt;GLL;Q++)//Preload sounds!&lt;br /&gt;
        {&lt;br /&gt;
            llPreloadSound((string)llList2Key(Sounds,Q));&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        if((llGetAgentInfo(llGetOwner()) &amp;amp; AGENT_WALKING))&lt;br /&gt;
        {&lt;br /&gt;
            llLoopSound((string)llList2Key(Sounds,Sound),Vol);//single sound;&lt;br /&gt;
            //or you can use this for random sounds.&lt;br /&gt;
            llLoopSound((string)llList2Key(Sounds,(integer)llFrand(GLL)),Vol);//Random sound.&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llStopSound();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
Notes:&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list in;&lt;br /&gt;
integer len_in = llGetListLength(in);&lt;br /&gt;
integer flen_in = (in != []);&lt;br /&gt;
//flen_in and len_in will be the same&lt;br /&gt;
 &lt;br /&gt;
integer neg_len_in = -llGetListLength(in);&lt;br /&gt;
integer fneg_len_in = ([] != in);&lt;br /&gt;
//fneg_len_in and neg_len_in will be the same&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{skills&lt;br /&gt;
|Architect=*&lt;br /&gt;
|Builder=*&lt;br /&gt;
|Scripter=*&lt;br /&gt;
|Terraformer=&lt;br /&gt;
|}}&lt;br /&gt;
{{ISO 639-3/cat-speaking|eng}}&lt;/div&gt;</summary>
		<author><name>Dantia Gothly</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1140161</id>
		<title>User:Dantia Gothly</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1140161"/>
		<updated>2011-04-12T21:03:53Z</updated>

		<summary type="html">&lt;p&gt;Dantia Gothly: /* Dans open source scripts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dans open source scripts ==&lt;br /&gt;
{{LSL Header|[http://terminalproxy.com/]}}&lt;br /&gt;
&lt;br /&gt;
Hello there! I&#039;m Dantia Gothly&lt;br /&gt;
&lt;br /&gt;
Scripter,Sculpter,Texture artist.&lt;br /&gt;
&lt;br /&gt;
creater of TopHat Viewer link-&amp;gt;(http://terminalproxy.com/)&lt;br /&gt;
&lt;br /&gt;
I believe you can do just about everything in 1 script&lt;br /&gt;
&lt;br /&gt;
but that also depends on what it is your doing. For the most part it can be.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
quote:&amp;quot;dose it work? Yes it do.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
..........................................................................................................................&lt;br /&gt;
Pulsing alpha on a face.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// Here I use a single function for llSetTimerEvent(); for toggling on/off in the timer event&lt;br /&gt;
integer Alpha;&lt;br /&gt;
integer Q;&lt;br /&gt;
integer Time;&lt;br /&gt;
integer Speed = 500;&lt;br /&gt;
//~~~~~~~~~~~~~&lt;br /&gt;
DatAction()&lt;br /&gt;
{&lt;br /&gt;
    llSetLinkAlpha(LINK_THIS,(float)Alpha*.01,2);&lt;br /&gt;
}&lt;br /&gt;
//~~~~~~~~~~~~~&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    touch_start(integer face)&lt;br /&gt;
    {&lt;br /&gt;
        Time=!Time;// 1.0 &amp;lt;&amp;lt;&amp;gt;&amp;gt; 0.0 &lt;br /&gt;
        llSetTimerEvent((float)(Time*.01));&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        for(Q=0;Q&amp;lt;Speed;Q++)&lt;br /&gt;
        {&lt;br /&gt;
            Alpha++;&lt;br /&gt;
            DatAction();&lt;br /&gt;
        }&lt;br /&gt;
        for(Q=0;Q&amp;lt;Speed;Q++)&lt;br /&gt;
        {&lt;br /&gt;
            Alpha--;&lt;br /&gt;
            DatAction();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
Here is a nonphysical train script&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Dantia Gothly 12/22/2010&lt;br /&gt;
//This Script is for Open Source use.&lt;br /&gt;
//Bug:&lt;br /&gt;
//Too many sound requests.  Throttled until average falls.&lt;br /&gt;
&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//                                     (Globle Settings)&lt;br /&gt;
&lt;br /&gt;
// Door movment:&lt;br /&gt;
float T_S2 = 2.0;//timer stoped before opening door.&lt;br /&gt;
float Train_leave = 0.8;//how long the train sits after closing the doors and takes off&lt;br /&gt;
float Door_open = 10.0;//How long the doors are Open.&lt;br /&gt;
integer door1 = 2;//find the link number for the door you want to move.&lt;br /&gt;
integer door2 = 3;&lt;br /&gt;
float Door_Slid_dist = 3.3;//sets the slide forword distance of the door on the X axis&lt;br /&gt;
&lt;br /&gt;
//Math:&lt;br /&gt;
integer num = 1;//do math 1+1=__&lt;br /&gt;
integer num2 = 1;&lt;br /&gt;
&lt;br /&gt;
//Predefined integers etc:&lt;br /&gt;
integer i;&lt;br /&gt;
integer t;&lt;br /&gt;
&lt;br /&gt;
//Train turn timming:&lt;br /&gt;
float M_1 = 255;// first turn&lt;br /&gt;
float M_2 = 735;//second turn&lt;br /&gt;
float M_3 = 1215;//therd turn&lt;br /&gt;
float M_4 = 1695;//forth turn&lt;br /&gt;
&lt;br /&gt;
//Station stop timming:&lt;br /&gt;
float W_S = 1920;//start train at west station.&lt;br /&gt;
float E_S = 985;//stop at east station.&lt;br /&gt;
&lt;br /&gt;
//Speed:(note:If this number changes the turn timming and stops must be changed)&lt;br /&gt;
float speed = .20;// Speed controls the PRIM_POSITION&lt;br /&gt;
&lt;br /&gt;
//Timers:&lt;br /&gt;
float T_S1 = 0.001;//Timer controls the default timer&lt;br /&gt;
float Horn_timing = 1.0;//horn sound then door opens/closes.&lt;br /&gt;
float door_Open_timing = 1.7;&lt;br /&gt;
float door_Close_timing = 2.6;&lt;br /&gt;
&lt;br /&gt;
//Sounds:&lt;br /&gt;
string Eng = &amp;quot;d0dc3135-d00a-a3ed-88b0-412a9d867734&amp;quot;;//freezer-s&lt;br /&gt;
string movment = &amp;quot;8737851f-17e3-bb15-b71e-f4235ad64f65&amp;quot;;//train-going&lt;br /&gt;
string Stops = &amp;quot;51a96f42-80ff-db3f-d44f-01002c921946&amp;quot;;//train-breaks&lt;br /&gt;
string Horn = &amp;quot;4e7218f7-6983-64d6-7d0b-bca5b19dfec8&amp;quot;;//train-stand-clear&lt;br /&gt;
string DoorOpen = &amp;quot;26dc4084-9380-e0d2-8810-f624277b6e66&amp;quot;;//train-door-open&lt;br /&gt;
string DoorClose = &amp;quot;fffcde68-ad75-4c7b-17ff-7cfecf65cd4a&amp;quot;;//train-door-close&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Volume:&lt;br /&gt;
float Vol3 = 1.0;// Volume high.&lt;br /&gt;
float Vol2 = 0.5;// Volume mid.&lt;br /&gt;
float Vol1 = 0.2;// Volume low.&lt;br /&gt;
float Vol0 = 0.0;// Volume mute.&lt;br /&gt;
&lt;br /&gt;
//Reset or fix:&lt;br /&gt;
float R_B = 14;// link number of the reset botton.&lt;br /&gt;
vector D_L = &amp;lt;68.000,124.100,34.109&amp;gt;;//Default location.&lt;br /&gt;
vector D_R = &amp;lt;0.00,0.00,90.00&amp;gt;;//Default rotation.&lt;br /&gt;
&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//User defind functions are wonderful&lt;br /&gt;
SetLinkPosLocal2Root(integer linknum,vector offset)&lt;br /&gt;
{&lt;br /&gt;
    llSetLinkPrimitiveParamsFast(linknum, [PRIM_POSITION, ((llList2Vector(&lt;br /&gt;
    llGetLinkPrimitiveParams(linknum, [PRIM_POSITION]),0) - llGetPos())/llGetRot())+offset]);&lt;br /&gt;
}&lt;br /&gt;
DatRotPos()&lt;br /&gt;
{&lt;br /&gt;
    integer t;&lt;br /&gt;
    rotation rot=llGetRot();&lt;br /&gt;
    for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
    {&lt;br /&gt;
       llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
       [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
       PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
       llSleep(0.04);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S1);&lt;br /&gt;
        llLoopSound(Eng,Vol3);&lt;br /&gt;
        llLoopSound(movment,Vol3);&lt;br /&gt;
    }&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        integer t;&lt;br /&gt;
        rotation rot=llGetRot();&lt;br /&gt;
        &lt;br /&gt;
        num += num2;&lt;br /&gt;
        llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
        [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot())]);&lt;br /&gt;
    &lt;br /&gt;
        if(num == M_1)&lt;br /&gt;
        {&lt;br /&gt;
           DatRotPos();&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_2)&lt;br /&gt;
        {&lt;br /&gt;
           DatRotPos();&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_3)&lt;br /&gt;
        {&lt;br /&gt;
           DatRotPos();&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_4)&lt;br /&gt;
        {&lt;br /&gt;
           DatRotPos();&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == W_S)&lt;br /&gt;
        {&lt;br /&gt;
            num = 0;&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            state two;&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == E_S)&lt;br /&gt;
        {&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            state two;&lt;br /&gt;
        }           &lt;br /&gt;
        llSetText(&amp;quot;&amp;quot;,&amp;lt;1,1,1&amp;gt;,1.0);//Display math.&lt;br /&gt;
    }&lt;br /&gt;
///////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
// In case the train brakes touch Reset botton.&lt;br /&gt;
    touch_start(integer face)&lt;br /&gt;
    {&lt;br /&gt;
        if(llDetectedLinkNumber(0) == R_B)&lt;br /&gt;
        {&lt;br /&gt;
            num = 0;&lt;br /&gt;
            state fix;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
///////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
state two&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S2);&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorOpen,Vol3);&lt;br /&gt;
        llSleep(door_Open_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Door_open);&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorClose,Vol3);&lt;br /&gt;
        llSleep(door_Close_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Train_leave);&lt;br /&gt;
&lt;br /&gt;
        state default;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
state fix&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(0.01);&lt;br /&gt;
        llOwnerSay(&amp;quot;Reseting train...&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
        [PRIM_POSITION,D_L,&lt;br /&gt;
        PRIM_ROTATION,(llEuler2Rot(D_R*DEG_TO_RAD))]);&lt;br /&gt;
        &lt;br /&gt;
        if(llGetPos() == D_L)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(&amp;quot;Restarting train...&amp;quot;);&lt;br /&gt;
            llSleep(2.0);&lt;br /&gt;
            state default;&lt;br /&gt;
        }        &lt;br /&gt;
    }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a good way to do Random llRezObject.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer i;&lt;br /&gt;
&lt;br /&gt;
DGRandomRez(float number)&lt;br /&gt;
{&lt;br /&gt;
    for(i=(integer)llFrand(number);i&amp;gt;0;i--)&lt;br /&gt;
    {&lt;br /&gt;
        llRezObject(&amp;quot;Object&amp;quot;, llGetPos() + &amp;lt;0.0,0.0,1.0&amp;gt;, &amp;lt;llFrand(3.0),llFrand(3.0),llFrand(3.0)&amp;gt;, &amp;lt;0.0,0.0,llFrand(360),1.0&amp;gt;, 0);   &lt;br /&gt;
    }  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
   state_entry()&lt;br /&gt;
   {&lt;br /&gt;
      DGRandomRez(5);//This will rez an object at random 1-5.&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
Sound looper for when your walking.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
float Timer = 1;&lt;br /&gt;
integer Sound = 1;//what sound to play.&lt;br /&gt;
float Vol = 0.8;&lt;br /&gt;
integer GLL;&lt;br /&gt;
list Sounds = [&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;];//List of sounds.&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        GLL = llGetListLength(Sounds);&lt;br /&gt;
        llSetTimerEvent(Timer);&lt;br /&gt;
        integer Q;&lt;br /&gt;
        &lt;br /&gt;
        for(Q=0;Q&amp;lt;GLL;Q++)//Preload sounds!&lt;br /&gt;
        {&lt;br /&gt;
            llPreloadSound((string)llList2Key(Sounds,Q));&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        if((llGetAgentInfo(llGetOwner()) &amp;amp; AGENT_WALKING))&lt;br /&gt;
        {&lt;br /&gt;
            llLoopSound((string)llList2Key(Sounds,Sound),Vol);//single sound;&lt;br /&gt;
            //or you can use this for random sounds.&lt;br /&gt;
            llLoopSound((string)llList2Key(Sounds,(integer)llFrand(GLL)),Vol);//Random sound.&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llStopSound();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
Notes:&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list in;&lt;br /&gt;
integer len_in = llGetListLength(in);&lt;br /&gt;
integer flen_in = (in != []);&lt;br /&gt;
//flen_in and len_in will be the same&lt;br /&gt;
 &lt;br /&gt;
integer neg_len_in = -llGetListLength(in);&lt;br /&gt;
integer fneg_len_in = ([] != in);&lt;br /&gt;
//fneg_len_in and neg_len_in will be the same&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{skills&lt;br /&gt;
|Architect=*&lt;br /&gt;
|Builder=*&lt;br /&gt;
|Scripter=*&lt;br /&gt;
|Terraformer=&lt;br /&gt;
|}}&lt;br /&gt;
{{ISO 639-3/cat-speaking|eng}}&lt;/div&gt;</summary>
		<author><name>Dantia Gothly</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1138739</id>
		<title>User:Dantia Gothly</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1138739"/>
		<updated>2011-03-29T20:27:35Z</updated>

		<summary type="html">&lt;p&gt;Dantia Gothly: /* Dans open source scripts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dans open source scripts ==&lt;br /&gt;
{{LSL Header|[http://terminalproxy.com/]}}&lt;br /&gt;
&lt;br /&gt;
Hello there! I&#039;m Dantia Gothly&lt;br /&gt;
&lt;br /&gt;
Scripter,Sculpter,Texture artist.&lt;br /&gt;
&lt;br /&gt;
creater of TopHat Viewer link-&amp;gt;(http://terminalproxy.com/)&lt;br /&gt;
&lt;br /&gt;
I believe you can do just about everything in 1 script&lt;br /&gt;
&lt;br /&gt;
but that also depends on what it is your doing. For the most part it can be.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
quote:&amp;quot;dose it work? Yes it do.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
..........................................................................................................................&lt;br /&gt;
&lt;br /&gt;
Here is a nonphysical train script&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Dantia Gothly 12/22/2010&lt;br /&gt;
//This Script is for Open Source use.&lt;br /&gt;
//Bug:&lt;br /&gt;
//Too many sound requests.  Throttled until average falls.&lt;br /&gt;
&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//                                     (Globle Settings)&lt;br /&gt;
&lt;br /&gt;
// Door movment:&lt;br /&gt;
float T_S2 = 2.0;//timer stoped before opening door.&lt;br /&gt;
float Train_leave = 0.8;//how long the train sits after closing the doors and takes off&lt;br /&gt;
float Door_open = 10.0;//How long the doors are Open.&lt;br /&gt;
integer door1 = 2;//find the link number for the door you want to move.&lt;br /&gt;
integer door2 = 3;&lt;br /&gt;
float Door_Slid_dist = 3.3;//sets the slide forword distance of the door on the X axis&lt;br /&gt;
&lt;br /&gt;
//Math:&lt;br /&gt;
integer num = 1;//do math 1+1=__&lt;br /&gt;
integer num2 = 1;&lt;br /&gt;
&lt;br /&gt;
//Predefined integers etc:&lt;br /&gt;
integer i;&lt;br /&gt;
integer t;&lt;br /&gt;
&lt;br /&gt;
//Train turn timming:&lt;br /&gt;
float M_1 = 255;// first turn&lt;br /&gt;
float M_2 = 735;//second turn&lt;br /&gt;
float M_3 = 1215;//therd turn&lt;br /&gt;
float M_4 = 1695;//forth turn&lt;br /&gt;
&lt;br /&gt;
//Station stop timming:&lt;br /&gt;
float W_S = 1920;//start train at west station.&lt;br /&gt;
float E_S = 985;//stop at east station.&lt;br /&gt;
&lt;br /&gt;
//Speed:(note:If this number changes the turn timming and stops must be changed)&lt;br /&gt;
float speed = .20;// Speed controls the PRIM_POSITION&lt;br /&gt;
&lt;br /&gt;
//Timers:&lt;br /&gt;
float T_S1 = 0.001;//Timer controls the default timer&lt;br /&gt;
float Horn_timing = 1.0;//horn sound then door opens/closes.&lt;br /&gt;
float door_Open_timing = 1.7;&lt;br /&gt;
float door_Close_timing = 2.6;&lt;br /&gt;
&lt;br /&gt;
//Sounds:&lt;br /&gt;
string Eng = &amp;quot;d0dc3135-d00a-a3ed-88b0-412a9d867734&amp;quot;;//freezer-s&lt;br /&gt;
string movment = &amp;quot;8737851f-17e3-bb15-b71e-f4235ad64f65&amp;quot;;//train-going&lt;br /&gt;
string Stops = &amp;quot;51a96f42-80ff-db3f-d44f-01002c921946&amp;quot;;//train-breaks&lt;br /&gt;
string Horn = &amp;quot;4e7218f7-6983-64d6-7d0b-bca5b19dfec8&amp;quot;;//train-stand-clear&lt;br /&gt;
string DoorOpen = &amp;quot;26dc4084-9380-e0d2-8810-f624277b6e66&amp;quot;;//train-door-open&lt;br /&gt;
string DoorClose = &amp;quot;fffcde68-ad75-4c7b-17ff-7cfecf65cd4a&amp;quot;;//train-door-close&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Volume:&lt;br /&gt;
float Vol3 = 1.0;// Volume high.&lt;br /&gt;
float Vol2 = 0.5;// Volume mid.&lt;br /&gt;
float Vol1 = 0.2;// Volume low.&lt;br /&gt;
float Vol0 = 0.0;// Volume mute.&lt;br /&gt;
&lt;br /&gt;
//Reset or fix:&lt;br /&gt;
float R_B = 14;// link number of the reset botton.&lt;br /&gt;
vector D_L = &amp;lt;68.000,124.100,34.109&amp;gt;;//Default location.&lt;br /&gt;
vector D_R = &amp;lt;0.00,0.00,90.00&amp;gt;;//Default rotation.&lt;br /&gt;
&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//User defind functions are wonderful&lt;br /&gt;
SetLinkPosLocal2Root(integer linknum,vector offset)&lt;br /&gt;
{&lt;br /&gt;
    llSetLinkPrimitiveParamsFast(linknum, [PRIM_POSITION, ((llList2Vector(&lt;br /&gt;
    llGetLinkPrimitiveParams(linknum, [PRIM_POSITION]),0) - llGetPos())/llGetRot())+offset]);&lt;br /&gt;
}&lt;br /&gt;
DatRotPos()&lt;br /&gt;
{&lt;br /&gt;
    integer t;&lt;br /&gt;
    rotation rot=llGetRot();&lt;br /&gt;
    for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
    {&lt;br /&gt;
       llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
       [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
       PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
       llSleep(0.04);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S1);&lt;br /&gt;
        llLoopSound(Eng,Vol3);&lt;br /&gt;
        llLoopSound(movment,Vol3);&lt;br /&gt;
    }&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        integer t;&lt;br /&gt;
        rotation rot=llGetRot();&lt;br /&gt;
        &lt;br /&gt;
        num += num2;&lt;br /&gt;
        llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
        [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot())]);&lt;br /&gt;
    &lt;br /&gt;
        if(num == M_1)&lt;br /&gt;
        {&lt;br /&gt;
           DatRotPos();&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_2)&lt;br /&gt;
        {&lt;br /&gt;
           DatRotPos();&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_3)&lt;br /&gt;
        {&lt;br /&gt;
           DatRotPos();&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_4)&lt;br /&gt;
        {&lt;br /&gt;
           DatRotPos();&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == W_S)&lt;br /&gt;
        {&lt;br /&gt;
            num = 0;&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            state two;&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == E_S)&lt;br /&gt;
        {&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            state two;&lt;br /&gt;
        }           &lt;br /&gt;
        llSetText(&amp;quot;&amp;quot;,&amp;lt;1,1,1&amp;gt;,1.0);//Display math.&lt;br /&gt;
    }&lt;br /&gt;
///////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
// In case the train brakes touch Reset botton.&lt;br /&gt;
    touch_start(integer face)&lt;br /&gt;
    {&lt;br /&gt;
        if(llDetectedLinkNumber(0) == R_B)&lt;br /&gt;
        {&lt;br /&gt;
            num = 0;&lt;br /&gt;
            state fix;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
///////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
state two&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S2);&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorOpen,Vol3);&lt;br /&gt;
        llSleep(door_Open_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Door_open);&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorClose,Vol3);&lt;br /&gt;
        llSleep(door_Close_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Train_leave);&lt;br /&gt;
&lt;br /&gt;
        state default;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
state fix&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(0.01);&lt;br /&gt;
        llOwnerSay(&amp;quot;Reseting train...&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
        [PRIM_POSITION,D_L,&lt;br /&gt;
        PRIM_ROTATION,(llEuler2Rot(D_R*DEG_TO_RAD))]);&lt;br /&gt;
        &lt;br /&gt;
        if(llGetPos() == D_L)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(&amp;quot;Restarting train...&amp;quot;);&lt;br /&gt;
            llSleep(2.0);&lt;br /&gt;
            state default;&lt;br /&gt;
        }        &lt;br /&gt;
    }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a good way to do Random llRezObject.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer i;&lt;br /&gt;
&lt;br /&gt;
DGRandomRez(float number)&lt;br /&gt;
{&lt;br /&gt;
    for(i=(integer)llFrand(number);i&amp;gt;0;i--)&lt;br /&gt;
    {&lt;br /&gt;
        llRezObject(&amp;quot;Object&amp;quot;, llGetPos() + &amp;lt;0.0,0.0,1.0&amp;gt;, &amp;lt;llFrand(3.0),llFrand(3.0),llFrand(3.0)&amp;gt;, &amp;lt;0.0,0.0,llFrand(360),1.0&amp;gt;, 0);   &lt;br /&gt;
    }  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
   state_entry()&lt;br /&gt;
   {&lt;br /&gt;
      DGRandomRez(5);//This will rez an object at random 1-5.&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
Sound looper for when your walking.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
float Timer = 1;&lt;br /&gt;
integer Sound = 1;//what sound to play.&lt;br /&gt;
float Vol = 0.8;&lt;br /&gt;
integer GLL;&lt;br /&gt;
list Sounds = [&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;];//List of sounds.&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        GLL = llGetListLength(Sounds);&lt;br /&gt;
        llSetTimerEvent(Timer);&lt;br /&gt;
        integer Q;&lt;br /&gt;
        &lt;br /&gt;
        for(Q=0;Q&amp;lt;GLL;Q++)//Preload sounds!&lt;br /&gt;
        {&lt;br /&gt;
            llPreloadSound((string)llList2Key(Sounds,Q));&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        if((llGetAgentInfo(llGetOwner()) &amp;amp; AGENT_WALKING))&lt;br /&gt;
        {&lt;br /&gt;
            llLoopSound((string)llList2Key(Sounds,Sound),Vol);//single sound;&lt;br /&gt;
            //or you can use this for random sounds.&lt;br /&gt;
            llLoopSound((string)llList2Key(Sounds,(integer)llFrand(GLL)),Vol);//Random sound.&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llStopSound();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
Notes:&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list in;&lt;br /&gt;
integer len_in = llGetListLength(in);&lt;br /&gt;
integer flen_in = (in != []);&lt;br /&gt;
//flen_in and len_in will be the same&lt;br /&gt;
 &lt;br /&gt;
integer neg_len_in = -llGetListLength(in);&lt;br /&gt;
integer fneg_len_in = ([] != in);&lt;br /&gt;
//fneg_len_in and neg_len_in will be the same&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{skills&lt;br /&gt;
|Architect=*&lt;br /&gt;
|Builder=*&lt;br /&gt;
|Scripter=*&lt;br /&gt;
|Terraformer=&lt;br /&gt;
|}}&lt;br /&gt;
{{ISO 639-3/cat-speaking|eng}}&lt;/div&gt;</summary>
		<author><name>Dantia Gothly</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1138624</id>
		<title>User:Dantia Gothly</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1138624"/>
		<updated>2011-03-28T06:48:22Z</updated>

		<summary type="html">&lt;p&gt;Dantia Gothly: /* Dans open source scripts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dans open source scripts ==&lt;br /&gt;
{{LSL Header|[http://terminalproxy.com/]}}&lt;br /&gt;
&lt;br /&gt;
Hello there! I&#039;m Dantia Gothly&lt;br /&gt;
&lt;br /&gt;
Scripter,Sculpter,Texture artist.&lt;br /&gt;
&lt;br /&gt;
creater of TopHat Viewer link-&amp;gt;(http://terminalproxy.com/)&lt;br /&gt;
&lt;br /&gt;
I believe you can do just about everything in 1 script&lt;br /&gt;
&lt;br /&gt;
but that also depends on what it is your doing. For the most part it can be.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
quote:&amp;quot;dose it work? Yes it do.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
..........................................................................................................................&lt;br /&gt;
&lt;br /&gt;
Here is a nonphysical train script&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Dantia Gothly 12/22/2010&lt;br /&gt;
//This Script is for Open Source use.&lt;br /&gt;
//Bug:&lt;br /&gt;
//Too many sound requests.  Throttled until average falls.&lt;br /&gt;
&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//                                     (Globle Settings)&lt;br /&gt;
&lt;br /&gt;
// Door movment:&lt;br /&gt;
float T_S2 = 2.0;//timer stoped before opening door.&lt;br /&gt;
float Train_leave = 0.8;//how long the train sits after closing the doors and takes off&lt;br /&gt;
float Door_open = 10.0;//How long the doors are Open.&lt;br /&gt;
integer door1 = 2;//find the link number for the door you want to move.&lt;br /&gt;
integer door2 = 3;&lt;br /&gt;
float Door_Slid_dist = 3.3;//sets the slide forword distance of the door on the X axis&lt;br /&gt;
&lt;br /&gt;
//Math:&lt;br /&gt;
integer num = 1;//do math 1+1=__&lt;br /&gt;
integer num2 = 1;&lt;br /&gt;
&lt;br /&gt;
//Predefined integers etc:&lt;br /&gt;
integer i;&lt;br /&gt;
integer t;&lt;br /&gt;
&lt;br /&gt;
//Train turn timming:&lt;br /&gt;
float M_1 = 255;// first turn&lt;br /&gt;
float M_2 = 735;//second turn&lt;br /&gt;
float M_3 = 1215;//therd turn&lt;br /&gt;
float M_4 = 1695;//forth turn&lt;br /&gt;
&lt;br /&gt;
//Station stop timming:&lt;br /&gt;
float W_S = 1920;//start train at west station.&lt;br /&gt;
float E_S = 985;//stop at east station.&lt;br /&gt;
&lt;br /&gt;
//Speed:(note:If this number changes the turn timming and stops must be changed)&lt;br /&gt;
float speed = .20;// Speed controls the PRIM_POSITION&lt;br /&gt;
&lt;br /&gt;
//Timers:&lt;br /&gt;
float T_S1 = 0.001;//Timer controls the default timer&lt;br /&gt;
float Horn_timing = 1.0;//horn sound then door opens/closes.&lt;br /&gt;
float door_Open_timing = 1.7;&lt;br /&gt;
float door_Close_timing = 2.6;&lt;br /&gt;
&lt;br /&gt;
//Sounds:&lt;br /&gt;
string Eng = &amp;quot;d0dc3135-d00a-a3ed-88b0-412a9d867734&amp;quot;;//freezer-s&lt;br /&gt;
string movment = &amp;quot;8737851f-17e3-bb15-b71e-f4235ad64f65&amp;quot;;//train-going&lt;br /&gt;
string Stops = &amp;quot;51a96f42-80ff-db3f-d44f-01002c921946&amp;quot;;//train-breaks&lt;br /&gt;
string Horn = &amp;quot;4e7218f7-6983-64d6-7d0b-bca5b19dfec8&amp;quot;;//train-stand-clear&lt;br /&gt;
string DoorOpen = &amp;quot;26dc4084-9380-e0d2-8810-f624277b6e66&amp;quot;;//train-door-open&lt;br /&gt;
string DoorClose = &amp;quot;fffcde68-ad75-4c7b-17ff-7cfecf65cd4a&amp;quot;;//train-door-close&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Volume:&lt;br /&gt;
float Vol3 = 1.0;// Volume high.&lt;br /&gt;
float Vol2 = 0.5;// Volume mid.&lt;br /&gt;
float Vol1 = 0.2;// Volume low.&lt;br /&gt;
float Vol0 = 0.0;// Volume mute.&lt;br /&gt;
&lt;br /&gt;
//Reset or fix:&lt;br /&gt;
float R_B = 14;// link number of the reset botton.&lt;br /&gt;
vector D_L = &amp;lt;68.000,124.100,34.109&amp;gt;;//Default location.&lt;br /&gt;
vector D_R = &amp;lt;0.00,0.00,90.00&amp;gt;;//Default rotation.&lt;br /&gt;
&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//User defind functions are wonderful&lt;br /&gt;
SetLinkPosLocal2Root(integer linknum,vector offset)&lt;br /&gt;
{&lt;br /&gt;
    llSetLinkPrimitiveParamsFast(linknum, [PRIM_POSITION, ((llList2Vector(&lt;br /&gt;
    llGetLinkPrimitiveParams(linknum, [PRIM_POSITION]),0) - llGetPos())/llGetRot())+offset]);&lt;br /&gt;
}&lt;br /&gt;
DatRotPos()&lt;br /&gt;
{&lt;br /&gt;
    integer t;&lt;br /&gt;
    rotation rot=llGetRot();&lt;br /&gt;
    for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
    {&lt;br /&gt;
       llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
       [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
       PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
       llSleep(0.04);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S1);&lt;br /&gt;
        llLoopSound(Eng,Vol3);&lt;br /&gt;
        llLoopSound(movment,Vol3);&lt;br /&gt;
    }&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        integer t;&lt;br /&gt;
        rotation rot=llGetRot();&lt;br /&gt;
        &lt;br /&gt;
        num += num2;&lt;br /&gt;
        llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
        [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot())]);&lt;br /&gt;
    &lt;br /&gt;
        if(num == M_1)&lt;br /&gt;
        {&lt;br /&gt;
           DatRotPos();&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_2)&lt;br /&gt;
        {&lt;br /&gt;
           DatRotPos();&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_3)&lt;br /&gt;
        {&lt;br /&gt;
           DatRotPos();&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_4)&lt;br /&gt;
        {&lt;br /&gt;
           DatRotPos();&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == W_S)&lt;br /&gt;
        {&lt;br /&gt;
            num = 0;&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            state two;&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == E_S)&lt;br /&gt;
        {&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            state two;&lt;br /&gt;
        }           &lt;br /&gt;
        llSetText(&amp;quot;&amp;quot;,&amp;lt;1,1,1&amp;gt;,1.0);//Display math.&lt;br /&gt;
    }&lt;br /&gt;
///////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
// In case the train brakes touch Reset botton.&lt;br /&gt;
    touch_start(integer face)&lt;br /&gt;
    {&lt;br /&gt;
        if(llDetectedLinkNumber(0) == R_B)&lt;br /&gt;
        {&lt;br /&gt;
            num = 0;&lt;br /&gt;
            state fix;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
///////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
state two&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S2);&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorOpen,Vol3);&lt;br /&gt;
        llSleep(door_Open_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Door_open);&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorClose,Vol3);&lt;br /&gt;
        llSleep(door_Close_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Train_leave);&lt;br /&gt;
&lt;br /&gt;
        state default;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
state fix&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(0.01);&lt;br /&gt;
        llOwnerSay(&amp;quot;Reseting train...&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
        [PRIM_POSITION,D_L,&lt;br /&gt;
        PRIM_ROTATION,(llEuler2Rot(D_R*DEG_TO_RAD))]);&lt;br /&gt;
        &lt;br /&gt;
        if(llGetPos() == D_L)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(&amp;quot;Restarting train...&amp;quot;);&lt;br /&gt;
            llSleep(2.0);&lt;br /&gt;
            state default;&lt;br /&gt;
        }        &lt;br /&gt;
    }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a good way to do Random llRezObject.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer i;&lt;br /&gt;
&lt;br /&gt;
DGRandomRez(float number)&lt;br /&gt;
{&lt;br /&gt;
    for(i=(integer)llFrand(number);i&amp;gt;0;i--)&lt;br /&gt;
    {&lt;br /&gt;
        llRezObject(&amp;quot;Object&amp;quot;, llGetPos() + &amp;lt;0.0,0.0,1.0&amp;gt;, &amp;lt;llFrand(3.0),llFrand(3.0),llFrand(3.0)&amp;gt;, &amp;lt;0.0,0.0,llFrand(360),1.0&amp;gt;, 0);   &lt;br /&gt;
    }  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
   state_entry()&lt;br /&gt;
   {&lt;br /&gt;
      DGRandomRez(5);//This will rez an object at random 1-5.&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
Sound looper for when your walking.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
float Timer = 1;&lt;br /&gt;
integer Sound = 1;//what sound to play.&lt;br /&gt;
float Vol = 0.8;&lt;br /&gt;
integer GLL;&lt;br /&gt;
list Sounds = [&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;];//List of sounds.&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        GLL = llGetListLength(Sounds);&lt;br /&gt;
        llSetTimerEvent(Timer);&lt;br /&gt;
        integer Q;&lt;br /&gt;
        &lt;br /&gt;
        for(Q=0;Q&amp;lt;GLL;Q++)//Preload sounds!&lt;br /&gt;
        {&lt;br /&gt;
            llPreloadSound((string)llList2Key(Sounds,Q));&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        if((llGetAgentInfo(llGetOwner()) &amp;amp; AGENT_WALKING))&lt;br /&gt;
        {&lt;br /&gt;
            llLoopSound((string)llList2Key(Sounds,Sound),Vol);//single sound;&lt;br /&gt;
            //or you can use this for random sounds.&lt;br /&gt;
            llLoopSound((string)llList2Key(Sounds,(integer)llFrand(GLL)),Vol);//Random sound.&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llStopSound();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{skills&lt;br /&gt;
|Architect=*&lt;br /&gt;
|Builder=*&lt;br /&gt;
|Scripter=*&lt;br /&gt;
|Terraformer=&lt;br /&gt;
|}}&lt;br /&gt;
{{ISO 639-3/cat-speaking|eng}}&lt;/div&gt;</summary>
		<author><name>Dantia Gothly</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1138623</id>
		<title>User:Dantia Gothly</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1138623"/>
		<updated>2011-03-28T06:47:36Z</updated>

		<summary type="html">&lt;p&gt;Dantia Gothly: /* Dans open source scripts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dans open source scripts ==&lt;br /&gt;
{{LSL Header|[http://terminalproxy.com/]}}&lt;br /&gt;
&lt;br /&gt;
Hello there! I&#039;m Dantia Gothly&lt;br /&gt;
&lt;br /&gt;
Scripter,Sculpter,Texture artist.&lt;br /&gt;
&lt;br /&gt;
creater of TopHat Viewer link-&amp;gt;(http://terminalproxy.com/)&lt;br /&gt;
&lt;br /&gt;
I believe you can do just about everything in 1 script&lt;br /&gt;
&lt;br /&gt;
but that also depends on what it is your doing. For the most part it can be.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
quote:&amp;quot;dose it work? Yes it do.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
..........................................................................................................................&lt;br /&gt;
&lt;br /&gt;
Here is a nonphysical train script&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
http://www.youtube.com/watch?v=UiInBOVHpO8&amp;amp;feature=relmfu&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a good way to do Random llRezObject.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer i;&lt;br /&gt;
&lt;br /&gt;
DGRandomRez(float number)&lt;br /&gt;
{&lt;br /&gt;
    for(i=(integer)llFrand(number);i&amp;gt;0;i--)&lt;br /&gt;
    {&lt;br /&gt;
        llRezObject(&amp;quot;Object&amp;quot;, llGetPos() + &amp;lt;0.0,0.0,1.0&amp;gt;, &amp;lt;llFrand(3.0),llFrand(3.0),llFrand(3.0)&amp;gt;, &amp;lt;0.0,0.0,llFrand(360),1.0&amp;gt;, 0);   &lt;br /&gt;
    }  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
   state_entry()&lt;br /&gt;
   {&lt;br /&gt;
      DGRandomRez(5);//This will rez an object at random 1-5.&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
Sound looper for when your walking.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
float Timer = 1;&lt;br /&gt;
integer Sound = 1;//what sound to play.&lt;br /&gt;
float Vol = 0.8;&lt;br /&gt;
integer GLL;&lt;br /&gt;
list Sounds = [&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;];//List of sounds.&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        GLL = llGetListLength(Sounds);&lt;br /&gt;
        llSetTimerEvent(Timer);&lt;br /&gt;
        integer Q;&lt;br /&gt;
        &lt;br /&gt;
        for(Q=0;Q&amp;lt;GLL;Q++)//Preload sounds!&lt;br /&gt;
        {&lt;br /&gt;
            llPreloadSound((string)llList2Key(Sounds,Q));&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        if((llGetAgentInfo(llGetOwner()) &amp;amp; AGENT_WALKING))&lt;br /&gt;
        {&lt;br /&gt;
            llLoopSound((string)llList2Key(Sounds,Sound),Vol);//single sound;&lt;br /&gt;
            //or you can use this for random sounds.&lt;br /&gt;
            llLoopSound((string)llList2Key(Sounds,(integer)llFrand(GLL)),Vol);//Random sound.&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llStopSound();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{skills&lt;br /&gt;
|Architect=*&lt;br /&gt;
|Builder=*&lt;br /&gt;
|Scripter=*&lt;br /&gt;
|Terraformer=&lt;br /&gt;
|}}&lt;br /&gt;
{{ISO 639-3/cat-speaking|eng}}&lt;/div&gt;</summary>
		<author><name>Dantia Gothly</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1138622</id>
		<title>User:Dantia Gothly</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1138622"/>
		<updated>2011-03-28T04:21:05Z</updated>

		<summary type="html">&lt;p&gt;Dantia Gothly: /* Dans open source scripts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dans open source scripts ==&lt;br /&gt;
{{LSL Header|[http://terminalproxy.com/]}}&lt;br /&gt;
&lt;br /&gt;
Hello there! I&#039;m Dantia Gothly&lt;br /&gt;
&lt;br /&gt;
Scripter,Sculpter,Texture artist.&lt;br /&gt;
&lt;br /&gt;
creater of TopHat Viewer link-&amp;gt;(http://terminalproxy.com/)&lt;br /&gt;
&lt;br /&gt;
I believe you can do just about everything in 1 script&lt;br /&gt;
&lt;br /&gt;
but that also depends on what it is your doing. For the most part it can be.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
quote:&amp;quot;dose it work? Yes it do.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
..........................................................................................................................&lt;br /&gt;
&lt;br /&gt;
Here is a nonphysical train script&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Copyright (C) 2011 Dantia Gothly&lt;br /&gt;
//This program is free software; you can redistribute it and/or&lt;br /&gt;
//modify it under the terms of the GNU General Public License&lt;br /&gt;
//as published by the Free Software Foundation; either version 2&lt;br /&gt;
//of the License, or (at your option) any later version.&lt;br /&gt;
//This program is distributed in the hope that it will be useful,&lt;br /&gt;
//but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
//GNU General Public License for more details.&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//                                     (Global Settings)&lt;br /&gt;
&lt;br /&gt;
// Door movment:&lt;br /&gt;
float T_S2 = 2.0;//timer stopped before opening door.&lt;br /&gt;
float Train_leave = 0.8;//how long the train sits after closing the doors and takes off&lt;br /&gt;
float Door_open = 10.0;//How long the doors are Open.&lt;br /&gt;
integer door1 = 2;//find the link number for the door you want to move.&lt;br /&gt;
integer door2 = 3;&lt;br /&gt;
float Door_Slid_dist = 3.3;//sets the slide forward distance of the door on the X axis&lt;br /&gt;
&lt;br /&gt;
//Math:&lt;br /&gt;
integer num = 1;//do math 1+1=__&lt;br /&gt;
integer num2 = 1;&lt;br /&gt;
&lt;br /&gt;
//Predefined integers etc:&lt;br /&gt;
integer i;&lt;br /&gt;
integer t;&lt;br /&gt;
&lt;br /&gt;
//Train turn timming:&lt;br /&gt;
float M_1 = 255;// first turn&lt;br /&gt;
float M_2 = 735;//second turn&lt;br /&gt;
float M_3 = 1215;//third turn&lt;br /&gt;
float M_4 = 1695;//forth turn&lt;br /&gt;
&lt;br /&gt;
//Station stop timing:&lt;br /&gt;
float W_S = 1920;//start train at west station.&lt;br /&gt;
float E_S = 985;//stop at east station.&lt;br /&gt;
&lt;br /&gt;
//Speed:(note:If this number changes the turn timming and stops must be changed)&lt;br /&gt;
float speed = .20;// Speed controls the PRIM_POSITION&lt;br /&gt;
&lt;br /&gt;
//Timers:&lt;br /&gt;
float T_S1 = 0.001;//Timer controls the default timer&lt;br /&gt;
float Horn_timing = 1.0;//horn sound then door opens/closes.&lt;br /&gt;
float door_Open_timing = 1.7;&lt;br /&gt;
float door_Close_timing = 2.6;&lt;br /&gt;
&lt;br /&gt;
//Sounds:&lt;br /&gt;
string Eng = &amp;quot;UUID&amp;quot;;//train_motor&lt;br /&gt;
string movment = &amp;quot;UUID&amp;quot;;//train-going&lt;br /&gt;
string Stops = &amp;quot;UUID&amp;quot;;//train-breaks&lt;br /&gt;
string Horn = &amp;quot;UUID&amp;quot;;//train-stand-clear&lt;br /&gt;
string DoorOpen = &amp;quot;UUID&amp;quot;;//train-door-open&lt;br /&gt;
string DoorClose = &amp;quot;UUID&amp;quot;;//train-door-close&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Volume:&lt;br /&gt;
float Vol3 = 1.0;// Volume high.&lt;br /&gt;
float Vol2 = 0.5;// Volume mid.&lt;br /&gt;
float Vol1 = 0.2;// Volume low.&lt;br /&gt;
float Vol0 = 0.0;// Volume mute.&lt;br /&gt;
&lt;br /&gt;
// default location = &amp;lt;67.797,124.500,33.107&amp;gt;&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//User defined functions are wonderful&lt;br /&gt;
SetLinkPosLocal2Root(integer linknum,vector offset)&lt;br /&gt;
{&lt;br /&gt;
    llSetLinkPrimitiveParamsFast(linknum, [PRIM_POSITION, ((llList2Vector(&lt;br /&gt;
    llGetLinkPrimitiveParams(linknum, [PRIM_POSITION]),0) - llGetPos())/llGetRot())+offset]);&lt;br /&gt;
}&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S1);&lt;br /&gt;
        llLoopSound(Eng,Vol3);&lt;br /&gt;
        llLoopSound(movment,Vol3);&lt;br /&gt;
    }&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        integer t;&lt;br /&gt;
        rotation rot=llGetRot();&lt;br /&gt;
        &lt;br /&gt;
        num += num2;&lt;br /&gt;
        llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
        [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot())]);&lt;br /&gt;
    &lt;br /&gt;
        if(num == M_1)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_2&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_2)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_3&amp;quot;);&lt;br /&gt;
             for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_3)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_4&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_4)&lt;br /&gt;
        {&lt;br /&gt;
           llSay(0,&amp;quot;in check M_1&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04); &lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == W_S)&lt;br /&gt;
        {&lt;br /&gt;
            num = 0;&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llSay(0,&amp;quot;At West station&amp;quot;);&lt;br /&gt;
            state two;&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == E_S)&lt;br /&gt;
        {&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llSay(0,&amp;quot;At East station&amp;quot;);&lt;br /&gt;
            state two;&lt;br /&gt;
        }           &lt;br /&gt;
        llSetText((string)num,&amp;lt;1,1,1&amp;gt;,1.0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
///////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
state two&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S2);&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorOpen,Vol3);&lt;br /&gt;
        llSleep(door_Open_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Door_open);&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorClose,Vol3);&lt;br /&gt;
        llSleep(door_Close_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Train_leave);&lt;br /&gt;
&lt;br /&gt;
        state default;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a good way to do Random llRezObject.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer i;&lt;br /&gt;
&lt;br /&gt;
DGRandomRez(float number)&lt;br /&gt;
{&lt;br /&gt;
    for(i=(integer)llFrand(number);i&amp;gt;0;i--)&lt;br /&gt;
    {&lt;br /&gt;
        llRezObject(&amp;quot;Object&amp;quot;, llGetPos() + &amp;lt;0.0,0.0,1.0&amp;gt;, &amp;lt;llFrand(3.0),llFrand(3.0),llFrand(3.0)&amp;gt;, &amp;lt;0.0,0.0,llFrand(360),1.0&amp;gt;, 0);   &lt;br /&gt;
    }  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
   state_entry()&lt;br /&gt;
   {&lt;br /&gt;
      DGRandomRez(5);//This will rez an object at random 1-5.&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
Sound looper for when your walking.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
float Timer = 1;&lt;br /&gt;
integer Sound = 1;//what sound to play.&lt;br /&gt;
float Vol = 0.8;&lt;br /&gt;
integer GLL;&lt;br /&gt;
list Sounds = [&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;];//List of sounds.&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        GLL = llGetListLength(Sounds);&lt;br /&gt;
        llSetTimerEvent(Timer);&lt;br /&gt;
        integer Q;&lt;br /&gt;
        &lt;br /&gt;
        for(Q=0;Q&amp;lt;GLL;Q++)//Preload sounds!&lt;br /&gt;
        {&lt;br /&gt;
            llPreloadSound((string)llList2Key(Sounds,Q));&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        if((llGetAgentInfo(llGetOwner()) &amp;amp; AGENT_WALKING))&lt;br /&gt;
        {&lt;br /&gt;
            llLoopSound((string)llList2Key(Sounds,Sound),Vol);//single sound;&lt;br /&gt;
            //or you can use this for random sounds.&lt;br /&gt;
            llLoopSound((string)llList2Key(Sounds,(integer)llFrand(GLL)),Vol);//Random sound.&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llStopSound();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{skills&lt;br /&gt;
|Architect=*&lt;br /&gt;
|Builder=*&lt;br /&gt;
|Scripter=*&lt;br /&gt;
|Terraformer=&lt;br /&gt;
|}}&lt;br /&gt;
{{ISO 639-3/cat-speaking|eng}}&lt;/div&gt;</summary>
		<author><name>Dantia Gothly</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1138578</id>
		<title>User:Dantia Gothly</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1138578"/>
		<updated>2011-03-27T07:41:06Z</updated>

		<summary type="html">&lt;p&gt;Dantia Gothly: /* Dans open source scripts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dans open source scripts ==&lt;br /&gt;
{{LSL Header|[http://terminalproxy.com/]}}&lt;br /&gt;
&lt;br /&gt;
Hello there! I&#039;m Dantia Gothly&lt;br /&gt;
&lt;br /&gt;
Scripter,Sculpter,Texture artist.&lt;br /&gt;
&lt;br /&gt;
creater of TopHat Viewer link-&amp;gt;(http://terminalproxy.com/)&lt;br /&gt;
&lt;br /&gt;
I believe you can do just about everything in 1 script&lt;br /&gt;
&lt;br /&gt;
but that also depends on what it is your doing. For the most part it can be.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
quote:&amp;quot;dose it work? Yes it do.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
..........................................................................................................................&lt;br /&gt;
&lt;br /&gt;
Here is a nonphysical train script&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Copyright (C) 2011 Dantia Gothly&lt;br /&gt;
//This program is free software; you can redistribute it and/or&lt;br /&gt;
//modify it under the terms of the GNU General Public License&lt;br /&gt;
//as published by the Free Software Foundation; either version 2&lt;br /&gt;
//of the License, or (at your option) any later version.&lt;br /&gt;
//This program is distributed in the hope that it will be useful,&lt;br /&gt;
//but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
//GNU General Public License for more details.&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//                                     (Global Settings)&lt;br /&gt;
&lt;br /&gt;
// Door movment:&lt;br /&gt;
float T_S2 = 2.0;//timer stopped before opening door.&lt;br /&gt;
float Train_leave = 0.8;//how long the train sits after closing the doors and takes off&lt;br /&gt;
float Door_open = 10.0;//How long the doors are Open.&lt;br /&gt;
integer door1 = 2;//find the link number for the door you want to move.&lt;br /&gt;
integer door2 = 3;&lt;br /&gt;
float Door_Slid_dist = 3.3;//sets the slide forward distance of the door on the X axis&lt;br /&gt;
&lt;br /&gt;
//Math:&lt;br /&gt;
integer num = 1;//do math 1+1=__&lt;br /&gt;
integer num2 = 1;&lt;br /&gt;
&lt;br /&gt;
//Predefined integers etc:&lt;br /&gt;
integer i;&lt;br /&gt;
integer t;&lt;br /&gt;
&lt;br /&gt;
//Train turn timming:&lt;br /&gt;
float M_1 = 255;// first turn&lt;br /&gt;
float M_2 = 735;//second turn&lt;br /&gt;
float M_3 = 1215;//third turn&lt;br /&gt;
float M_4 = 1695;//forth turn&lt;br /&gt;
&lt;br /&gt;
//Station stop timing:&lt;br /&gt;
float W_S = 1920;//start train at west station.&lt;br /&gt;
float E_S = 985;//stop at east station.&lt;br /&gt;
&lt;br /&gt;
//Speed:(note:If this number changes the turn timming and stops must be changed)&lt;br /&gt;
float speed = .20;// Speed controls the PRIM_POSITION&lt;br /&gt;
&lt;br /&gt;
//Timers:&lt;br /&gt;
float T_S1 = 0.001;//Timer controls the default timer&lt;br /&gt;
float Horn_timing = 1.0;//horn sound then door opens/closes.&lt;br /&gt;
float door_Open_timing = 1.7;&lt;br /&gt;
float door_Close_timing = 2.6;&lt;br /&gt;
&lt;br /&gt;
//Sounds:&lt;br /&gt;
string Eng = &amp;quot;UUID&amp;quot;;//train_motor&lt;br /&gt;
string movment = &amp;quot;UUID&amp;quot;;//train-going&lt;br /&gt;
string Stops = &amp;quot;UUID&amp;quot;;//train-breaks&lt;br /&gt;
string Horn = &amp;quot;UUID&amp;quot;;//train-stand-clear&lt;br /&gt;
string DoorOpen = &amp;quot;UUID&amp;quot;;//train-door-open&lt;br /&gt;
string DoorClose = &amp;quot;UUID&amp;quot;;//train-door-close&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Volume:&lt;br /&gt;
float Vol3 = 1.0;// Volume high.&lt;br /&gt;
float Vol2 = 0.5;// Volume mid.&lt;br /&gt;
float Vol1 = 0.2;// Volume low.&lt;br /&gt;
float Vol0 = 0.0;// Volume mute.&lt;br /&gt;
&lt;br /&gt;
// default location = &amp;lt;67.797,124.500,33.107&amp;gt;&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//User defined functions are wonderful&lt;br /&gt;
SetLinkPosLocal2Root(integer linknum,vector offset)&lt;br /&gt;
{&lt;br /&gt;
    llSetLinkPrimitiveParamsFast(linknum, [PRIM_POSITION, ((llList2Vector(&lt;br /&gt;
    llGetLinkPrimitiveParams(linknum, [PRIM_POSITION]),0) - llGetPos())/llGetRot())+offset]);&lt;br /&gt;
}&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S1);&lt;br /&gt;
        llLoopSound(Eng,Vol3);&lt;br /&gt;
        llLoopSound(movment,Vol3);&lt;br /&gt;
    }&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        integer t;&lt;br /&gt;
        rotation rot=llGetRot();&lt;br /&gt;
        &lt;br /&gt;
        num += num2;&lt;br /&gt;
        llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
        [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot())]);&lt;br /&gt;
    &lt;br /&gt;
        if(num == M_1)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_2&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_2)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_3&amp;quot;);&lt;br /&gt;
             for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_3)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_4&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_4)&lt;br /&gt;
        {&lt;br /&gt;
           llSay(0,&amp;quot;in check M_1&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04); &lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == W_S)&lt;br /&gt;
        {&lt;br /&gt;
            num = 0;&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llSay(0,&amp;quot;At West station&amp;quot;);&lt;br /&gt;
            state two;&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == E_S)&lt;br /&gt;
        {&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llSay(0,&amp;quot;At East station&amp;quot;);&lt;br /&gt;
            state two;&lt;br /&gt;
        }           &lt;br /&gt;
        llSetText((string)num,&amp;lt;1,1,1&amp;gt;,1.0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
///////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
state two&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S2);&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorOpen,Vol3);&lt;br /&gt;
        llSleep(door_Open_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Door_open);&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorClose,Vol3);&lt;br /&gt;
        llSleep(door_Close_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Train_leave);&lt;br /&gt;
&lt;br /&gt;
        state default;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a good way to do Random llRezObject.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer i;&lt;br /&gt;
&lt;br /&gt;
DGRandomRez(float number)&lt;br /&gt;
{&lt;br /&gt;
    for(i=(integer)llFrand(number);i&amp;gt;0;i--)&lt;br /&gt;
    {&lt;br /&gt;
        llRezObject(&amp;quot;Object&amp;quot;, llGetPos() + &amp;lt;0.0,0.0,1.0&amp;gt;, &amp;lt;llFrand(3.0),llFrand(3.0),llFrand(3.0)&amp;gt;, &amp;lt;0.0,0.0,llFrand(360),1.0&amp;gt;, 0);   &lt;br /&gt;
    }  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
   state_entry()&lt;br /&gt;
   {&lt;br /&gt;
      DGRandomRez(5);//This will rez an object at random 1-5.&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
Sound looper for when your walking.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
float Timer = 1;&lt;br /&gt;
integer Sound = 1;//what sound to play.&lt;br /&gt;
float Vol = 0.8;&lt;br /&gt;
integer GLL;&lt;br /&gt;
list Sounds = [&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;];//List of sounds.&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        GLL = llGetListLength(Sounds);&lt;br /&gt;
        llSetTimerEvent(Timer);&lt;br /&gt;
        integer Q;&lt;br /&gt;
        &lt;br /&gt;
        for(Q=0;Q&amp;lt;GLL;Q++)//Preload sounds!&lt;br /&gt;
        {&lt;br /&gt;
            llTriggerSound((string)llList2Key(Sounds,Q),0.0);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        if((llGetAgentInfo(llGetOwner()) &amp;amp; AGENT_WALKING))&lt;br /&gt;
        {&lt;br /&gt;
            llLoopSound((string)llList2Key(Sounds,Sound),Vol);//single sound;&lt;br /&gt;
            //or you can use this for random sounds.&lt;br /&gt;
            llLoopSound((string)llList2Key(Sounds,(integer)llFrand(GLL)),Vol);//Random sound.&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llStopSound();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{skills&lt;br /&gt;
|Architect=*&lt;br /&gt;
|Builder=*&lt;br /&gt;
|Scripter=*&lt;br /&gt;
|Terraformer=&lt;br /&gt;
|}}&lt;br /&gt;
{{ISO 639-3/cat-speaking|eng}}&lt;/div&gt;</summary>
		<author><name>Dantia Gothly</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1138571</id>
		<title>User:Dantia Gothly</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1138571"/>
		<updated>2011-03-26T21:23:59Z</updated>

		<summary type="html">&lt;p&gt;Dantia Gothly: /* Dans open source scripts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dans open source scripts ==&lt;br /&gt;
{{LSL Header|[http://terminalproxy.com/]}}&lt;br /&gt;
&lt;br /&gt;
Hello there! I&#039;m Dantia Gothly&lt;br /&gt;
&lt;br /&gt;
Scripter,Sculpter,Texture artist.&lt;br /&gt;
&lt;br /&gt;
creater of TopHat Viewer link-&amp;gt;(http://terminalproxy.com/)&lt;br /&gt;
&lt;br /&gt;
I believe you can do just about everything in 1 script&lt;br /&gt;
&lt;br /&gt;
but that also depends on what it is your doing. For the most part it can be.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
quote:&amp;quot;dose it work? Yes it do.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
..........................................................................................................................&lt;br /&gt;
&lt;br /&gt;
Here is a nonphysical train script&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Copyright (C) 2011 Dantia Gothly&lt;br /&gt;
//This program is free software; you can redistribute it and/or&lt;br /&gt;
//modify it under the terms of the GNU General Public License&lt;br /&gt;
//as published by the Free Software Foundation; either version 2&lt;br /&gt;
//of the License, or (at your option) any later version.&lt;br /&gt;
//This program is distributed in the hope that it will be useful,&lt;br /&gt;
//but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
//GNU General Public License for more details.&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//                                     (Global Settings)&lt;br /&gt;
&lt;br /&gt;
// Door movment:&lt;br /&gt;
float T_S2 = 2.0;//timer stopped before opening door.&lt;br /&gt;
float Train_leave = 0.8;//how long the train sits after closing the doors and takes off&lt;br /&gt;
float Door_open = 10.0;//How long the doors are Open.&lt;br /&gt;
integer door1 = 2;//find the link number for the door you want to move.&lt;br /&gt;
integer door2 = 3;&lt;br /&gt;
float Door_Slid_dist = 3.3;//sets the slide forward distance of the door on the X axis&lt;br /&gt;
&lt;br /&gt;
//Math:&lt;br /&gt;
integer num = 1;//do math 1+1=__&lt;br /&gt;
integer num2 = 1;&lt;br /&gt;
&lt;br /&gt;
//Predefined integers etc:&lt;br /&gt;
integer i;&lt;br /&gt;
integer t;&lt;br /&gt;
&lt;br /&gt;
//Train turn timming:&lt;br /&gt;
float M_1 = 255;// first turn&lt;br /&gt;
float M_2 = 735;//second turn&lt;br /&gt;
float M_3 = 1215;//third turn&lt;br /&gt;
float M_4 = 1695;//forth turn&lt;br /&gt;
&lt;br /&gt;
//Station stop timing:&lt;br /&gt;
float W_S = 1920;//start train at west station.&lt;br /&gt;
float E_S = 985;//stop at east station.&lt;br /&gt;
&lt;br /&gt;
//Speed:(note:If this number changes the turn timming and stops must be changed)&lt;br /&gt;
float speed = .20;// Speed controls the PRIM_POSITION&lt;br /&gt;
&lt;br /&gt;
//Timers:&lt;br /&gt;
float T_S1 = 0.001;//Timer controls the default timer&lt;br /&gt;
float Horn_timing = 1.0;//horn sound then door opens/closes.&lt;br /&gt;
float door_Open_timing = 1.7;&lt;br /&gt;
float door_Close_timing = 2.6;&lt;br /&gt;
&lt;br /&gt;
//Sounds:&lt;br /&gt;
string Eng = &amp;quot;UUID&amp;quot;;//train_motor&lt;br /&gt;
string movment = &amp;quot;UUID&amp;quot;;//train-going&lt;br /&gt;
string Stops = &amp;quot;UUID&amp;quot;;//train-breaks&lt;br /&gt;
string Horn = &amp;quot;UUID&amp;quot;;//train-stand-clear&lt;br /&gt;
string DoorOpen = &amp;quot;UUID&amp;quot;;//train-door-open&lt;br /&gt;
string DoorClose = &amp;quot;UUID&amp;quot;;//train-door-close&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Volume:&lt;br /&gt;
float Vol3 = 1.0;// Volume high.&lt;br /&gt;
float Vol2 = 0.5;// Volume mid.&lt;br /&gt;
float Vol1 = 0.2;// Volume low.&lt;br /&gt;
float Vol0 = 0.0;// Volume mute.&lt;br /&gt;
&lt;br /&gt;
// default location = &amp;lt;67.797,124.500,33.107&amp;gt;&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//User defined functions are wonderful&lt;br /&gt;
SetLinkPosLocal2Root(integer linknum,vector offset)&lt;br /&gt;
{&lt;br /&gt;
    llSetLinkPrimitiveParamsFast(linknum, [PRIM_POSITION, ((llList2Vector(&lt;br /&gt;
    llGetLinkPrimitiveParams(linknum, [PRIM_POSITION]),0) - llGetPos())/llGetRot())+offset]);&lt;br /&gt;
}&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S1);&lt;br /&gt;
        llLoopSound(Eng,Vol3);&lt;br /&gt;
        llLoopSound(movment,Vol3);&lt;br /&gt;
    }&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        integer t;&lt;br /&gt;
        rotation rot=llGetRot();&lt;br /&gt;
        &lt;br /&gt;
        num += num2;&lt;br /&gt;
        llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
        [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot())]);&lt;br /&gt;
    &lt;br /&gt;
        if(num == M_1)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_2&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_2)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_3&amp;quot;);&lt;br /&gt;
             for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_3)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_4&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_4)&lt;br /&gt;
        {&lt;br /&gt;
           llSay(0,&amp;quot;in check M_1&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04); &lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == W_S)&lt;br /&gt;
        {&lt;br /&gt;
            num = 0;&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llSay(0,&amp;quot;At West station&amp;quot;);&lt;br /&gt;
            state two;&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == E_S)&lt;br /&gt;
        {&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llSay(0,&amp;quot;At East station&amp;quot;);&lt;br /&gt;
            state two;&lt;br /&gt;
        }           &lt;br /&gt;
        llSetText((string)num,&amp;lt;1,1,1&amp;gt;,1.0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
///////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
state two&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S2);&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorOpen,Vol3);&lt;br /&gt;
        llSleep(door_Open_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Door_open);&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorClose,Vol3);&lt;br /&gt;
        llSleep(door_Close_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Train_leave);&lt;br /&gt;
&lt;br /&gt;
        state default;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a good way to do Random llRezObject.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer i;&lt;br /&gt;
&lt;br /&gt;
DGRandomRez(float number)&lt;br /&gt;
{&lt;br /&gt;
    for(i=(integer)llFrand(number);i&amp;gt;0;i--)&lt;br /&gt;
    {&lt;br /&gt;
        llRezObject(&amp;quot;Object&amp;quot;, llGetPos() + &amp;lt;0.0,0.0,1.0&amp;gt;, &amp;lt;llFrand(3.0),llFrand(3.0),llFrand(3.0)&amp;gt;, &amp;lt;0.0,0.0,llFrand(360),1.0&amp;gt;, 0);   &lt;br /&gt;
    }  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
   state_entry()&lt;br /&gt;
   {&lt;br /&gt;
      DGRandomRez(5);//This will rez an object at random 1-5.&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
Sound looper for when your walking.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
float Timer = 1;&lt;br /&gt;
integer Sound = 1;//what sound to play.&lt;br /&gt;
float Vol = 0.8;&lt;br /&gt;
integer GLL;&lt;br /&gt;
list Sounds = [&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;];//List of sounds.&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        GLL = llGetListLength(Sounds);&lt;br /&gt;
        llSetTimerEvent(Timer);&lt;br /&gt;
        integer Q;&lt;br /&gt;
        &lt;br /&gt;
        for(Q=0;Q&amp;lt;=GLL;Q++)//Preload sounds!&lt;br /&gt;
        {&lt;br /&gt;
            llTriggerSound((string)llList2Key(Sounds,Q),0.0);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        if((llGetAgentInfo(llGetOwner()) &amp;amp; AGENT_WALKING))&lt;br /&gt;
        {&lt;br /&gt;
            llLoopSound((string)llList2Key(Sounds,Sound),Vol);//single sound;&lt;br /&gt;
            //or you can use this for random sounds.&lt;br /&gt;
            llLoopSound((string)llList2Key(Sounds,(integer)llFrand(GLL)),Vol);//Random sound.&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llStopSound();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{skills&lt;br /&gt;
|Architect=*&lt;br /&gt;
|Builder=*&lt;br /&gt;
|Scripter=*&lt;br /&gt;
|Terraformer=&lt;br /&gt;
|}}&lt;br /&gt;
{{ISO 639-3/cat-speaking|eng}}&lt;/div&gt;</summary>
		<author><name>Dantia Gothly</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1134801</id>
		<title>User:Dantia Gothly</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1134801"/>
		<updated>2011-02-21T00:42:58Z</updated>

		<summary type="html">&lt;p&gt;Dantia Gothly: /* Dans open source scripts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dans open source scripts ==&lt;br /&gt;
{{LSL Header|[http://terminalproxy.com/]}}&lt;br /&gt;
&lt;br /&gt;
Hello there! I&#039;m Dantia Gothly&lt;br /&gt;
&lt;br /&gt;
Scripter,Sculpter,Texture artist.&lt;br /&gt;
&lt;br /&gt;
creater of TopHat Viewer link-&amp;gt;(http://terminalproxy.com/)&lt;br /&gt;
&lt;br /&gt;
I believe you can do just about everything in 1 script&lt;br /&gt;
&lt;br /&gt;
but that also depends on what it is your doing. For the most part it can be.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
quote:&amp;quot;dose it work? Yes it do.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
..........................................................................................................................&lt;br /&gt;
&lt;br /&gt;
Here is a nonphysical train script&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Copyright (C) 2011 Dantia Gothly&lt;br /&gt;
//This program is free software; you can redistribute it and/or&lt;br /&gt;
//modify it under the terms of the GNU General Public License&lt;br /&gt;
//as published by the Free Software Foundation; either version 2&lt;br /&gt;
//of the License, or (at your option) any later version.&lt;br /&gt;
//This program is distributed in the hope that it will be useful,&lt;br /&gt;
//but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
//GNU General Public License for more details.&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//                                     (Global Settings)&lt;br /&gt;
&lt;br /&gt;
// Door movment:&lt;br /&gt;
float T_S2 = 2.0;//timer stopped before opening door.&lt;br /&gt;
float Train_leave = 0.8;//how long the train sits after closing the doors and takes off&lt;br /&gt;
float Door_open = 10.0;//How long the doors are Open.&lt;br /&gt;
integer door1 = 2;//find the link number for the door you want to move.&lt;br /&gt;
integer door2 = 3;&lt;br /&gt;
float Door_Slid_dist = 3.3;//sets the slide forward distance of the door on the X axis&lt;br /&gt;
&lt;br /&gt;
//Math:&lt;br /&gt;
integer num = 1;//do math 1+1=__&lt;br /&gt;
integer num2 = 1;&lt;br /&gt;
&lt;br /&gt;
//Predefined integers etc:&lt;br /&gt;
integer i;&lt;br /&gt;
integer t;&lt;br /&gt;
&lt;br /&gt;
//Train turn timming:&lt;br /&gt;
float M_1 = 255;// first turn&lt;br /&gt;
float M_2 = 735;//second turn&lt;br /&gt;
float M_3 = 1215;//third turn&lt;br /&gt;
float M_4 = 1695;//forth turn&lt;br /&gt;
&lt;br /&gt;
//Station stop timing:&lt;br /&gt;
float W_S = 1920;//start train at west station.&lt;br /&gt;
float E_S = 985;//stop at east station.&lt;br /&gt;
&lt;br /&gt;
//Speed:(note:If this number changes the turn timming and stops must be changed)&lt;br /&gt;
float speed = .20;// Speed controls the PRIM_POSITION&lt;br /&gt;
&lt;br /&gt;
//Timers:&lt;br /&gt;
float T_S1 = 0.001;//Timer controls the default timer&lt;br /&gt;
float Horn_timing = 1.0;//horn sound then door opens/closes.&lt;br /&gt;
float door_Open_timing = 1.7;&lt;br /&gt;
float door_Close_timing = 2.6;&lt;br /&gt;
&lt;br /&gt;
//Sounds:&lt;br /&gt;
string Eng = &amp;quot;UUID&amp;quot;;//train_motor&lt;br /&gt;
string movment = &amp;quot;UUID&amp;quot;;//train-going&lt;br /&gt;
string Stops = &amp;quot;UUID&amp;quot;;//train-breaks&lt;br /&gt;
string Horn = &amp;quot;UUID&amp;quot;;//train-stand-clear&lt;br /&gt;
string DoorOpen = &amp;quot;UUID&amp;quot;;//train-door-open&lt;br /&gt;
string DoorClose = &amp;quot;UUID&amp;quot;;//train-door-close&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Volume:&lt;br /&gt;
float Vol3 = 1.0;// Volume high.&lt;br /&gt;
float Vol2 = 0.5;// Volume mid.&lt;br /&gt;
float Vol1 = 0.2;// Volume low.&lt;br /&gt;
float Vol0 = 0.0;// Volume mute.&lt;br /&gt;
&lt;br /&gt;
// default location = &amp;lt;67.797,124.500,33.107&amp;gt;&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//User defined functions are wonderful&lt;br /&gt;
SetLinkPosLocal2Root(integer linknum,vector offset)&lt;br /&gt;
{&lt;br /&gt;
    llSetLinkPrimitiveParamsFast(linknum, [PRIM_POSITION, ((llList2Vector(&lt;br /&gt;
    llGetLinkPrimitiveParams(linknum, [PRIM_POSITION]),0) - llGetPos())/llGetRot())+offset]);&lt;br /&gt;
}&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S1);&lt;br /&gt;
        llLoopSound(Eng,Vol3);&lt;br /&gt;
        llLoopSound(movment,Vol3);&lt;br /&gt;
    }&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        integer t;&lt;br /&gt;
        rotation rot=llGetRot();&lt;br /&gt;
        &lt;br /&gt;
        num += num2;&lt;br /&gt;
        llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
        [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot())]);&lt;br /&gt;
    &lt;br /&gt;
        if(num == M_1)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_2&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_2)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_3&amp;quot;);&lt;br /&gt;
             for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_3)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_4&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_4)&lt;br /&gt;
        {&lt;br /&gt;
           llSay(0,&amp;quot;in check M_1&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04); &lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == W_S)&lt;br /&gt;
        {&lt;br /&gt;
            num = 0;&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llSay(0,&amp;quot;At West station&amp;quot;);&lt;br /&gt;
            state two;&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == E_S)&lt;br /&gt;
        {&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llSay(0,&amp;quot;At East station&amp;quot;);&lt;br /&gt;
            state two;&lt;br /&gt;
        }           &lt;br /&gt;
        llSetText((string)num,&amp;lt;1,1,1&amp;gt;,1.0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
///////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
state two&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S2);&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorOpen,Vol3);&lt;br /&gt;
        llSleep(door_Open_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Door_open);&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorClose,Vol3);&lt;br /&gt;
        llSleep(door_Close_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Train_leave);&lt;br /&gt;
&lt;br /&gt;
        state default;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a good way to do Random llRezObject.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer i;&lt;br /&gt;
&lt;br /&gt;
DGRandomRez(float number)&lt;br /&gt;
{&lt;br /&gt;
    for(i=(integer)llFrand(number);i&amp;gt;0;i--)&lt;br /&gt;
    {&lt;br /&gt;
        llRezObject(&amp;quot;Object&amp;quot;, llGetPos() + &amp;lt;0.0,0.0,1.0&amp;gt;, &amp;lt;llFrand(3.0),llFrand(3.0),llFrand(3.0)&amp;gt;, &amp;lt;0.0,0.0,llFrand(360),1.0&amp;gt;, 0);   &lt;br /&gt;
    }  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
   state_entry()&lt;br /&gt;
   {&lt;br /&gt;
      DGRandomRez(5);//This will rez an object at random 1-5.&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{skills&lt;br /&gt;
|Architect=*&lt;br /&gt;
|Builder=*&lt;br /&gt;
|Scripter=*&lt;br /&gt;
|Terraformer=&lt;br /&gt;
|}}&lt;br /&gt;
{{ISO 639-3/cat-speaking|eng}}&lt;/div&gt;</summary>
		<author><name>Dantia Gothly</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1134800</id>
		<title>User:Dantia Gothly</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1134800"/>
		<updated>2011-02-21T00:40:22Z</updated>

		<summary type="html">&lt;p&gt;Dantia Gothly: /* Dans open source scripts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dans open source scripts ==&lt;br /&gt;
{{LSL Header|[http://terminalproxy.com/]}}&lt;br /&gt;
&lt;br /&gt;
Hello there! I&#039;m Dantia Gothly&lt;br /&gt;
&lt;br /&gt;
Scripter,Sculpter,Texture artist.&lt;br /&gt;
&lt;br /&gt;
creater of TopHat Viewer link-&amp;gt;(http://terminalproxy.com/)&lt;br /&gt;
&lt;br /&gt;
I believe you can do just about everything in 1 script&lt;br /&gt;
&lt;br /&gt;
but that also depends on what it is your doing. For the most part it can be.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
quote:&amp;quot;dose it work? Yes it do.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
..........................................................................................................................&lt;br /&gt;
&lt;br /&gt;
Here is a nonphysical train script&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Copyright (C) 2011 Dantia Gothly&lt;br /&gt;
//This program is free software; you can redistribute it and/or&lt;br /&gt;
//modify it under the terms of the GNU General Public License&lt;br /&gt;
//as published by the Free Software Foundation; either version 2&lt;br /&gt;
//of the License, or (at your option) any later version.&lt;br /&gt;
//This program is distributed in the hope that it will be useful,&lt;br /&gt;
//but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
//GNU General Public License for more details.&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//                                     (Global Settings)&lt;br /&gt;
&lt;br /&gt;
// Door movment:&lt;br /&gt;
float T_S2 = 2.0;//timer stopped before opening door.&lt;br /&gt;
float Train_leave = 0.8;//how long the train sits after closing the doors and takes off&lt;br /&gt;
float Door_open = 10.0;//How long the doors are Open.&lt;br /&gt;
integer door1 = 2;//find the link number for the door you want to move.&lt;br /&gt;
integer door2 = 3;&lt;br /&gt;
float Door_Slid_dist = 3.3;//sets the slide forward distance of the door on the X axis&lt;br /&gt;
&lt;br /&gt;
//Math:&lt;br /&gt;
integer num = 1;//do math 1+1=__&lt;br /&gt;
integer num2 = 1;&lt;br /&gt;
&lt;br /&gt;
//Predefined integers etc:&lt;br /&gt;
integer i;&lt;br /&gt;
integer t;&lt;br /&gt;
&lt;br /&gt;
//Train turn timming:&lt;br /&gt;
float M_1 = 255;// first turn&lt;br /&gt;
float M_2 = 735;//second turn&lt;br /&gt;
float M_3 = 1215;//third turn&lt;br /&gt;
float M_4 = 1695;//forth turn&lt;br /&gt;
&lt;br /&gt;
//Station stop timing:&lt;br /&gt;
float W_S = 1920;//start train at west station.&lt;br /&gt;
float E_S = 985;//stop at east station.&lt;br /&gt;
&lt;br /&gt;
//Speed:(note:If this number changes the turn timming and stops must be changed)&lt;br /&gt;
float speed = .20;// Speed controls the PRIM_POSITION&lt;br /&gt;
&lt;br /&gt;
//Timers:&lt;br /&gt;
float T_S1 = 0.001;//Timer controls the default timer&lt;br /&gt;
float Horn_timing = 1.0;//horn sound then door opens/closes.&lt;br /&gt;
float door_Open_timing = 1.7;&lt;br /&gt;
float door_Close_timing = 2.6;&lt;br /&gt;
&lt;br /&gt;
//Sounds:&lt;br /&gt;
string Eng = &amp;quot;UUID&amp;quot;;//train_motor&lt;br /&gt;
string movment = &amp;quot;UUID&amp;quot;;//train-going&lt;br /&gt;
string Stops = &amp;quot;UUID&amp;quot;;//train-breaks&lt;br /&gt;
string Horn = &amp;quot;UUID&amp;quot;;//train-stand-clear&lt;br /&gt;
string DoorOpen = &amp;quot;UUID&amp;quot;;//train-door-open&lt;br /&gt;
string DoorClose = &amp;quot;UUID&amp;quot;;//train-door-close&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Volume:&lt;br /&gt;
float Vol3 = 1.0;// Volume high.&lt;br /&gt;
float Vol2 = 0.5;// Volume mid.&lt;br /&gt;
float Vol1 = 0.2;// Volume low.&lt;br /&gt;
float Vol0 = 0.0;// Volume mute.&lt;br /&gt;
&lt;br /&gt;
// default location = &amp;lt;67.797,124.500,33.107&amp;gt;&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//User defined functions are wonderful&lt;br /&gt;
SetLinkPosLocal2Root(integer linknum,vector offset)&lt;br /&gt;
{&lt;br /&gt;
    llSetLinkPrimitiveParamsFast(linknum, [PRIM_POSITION, ((llList2Vector(&lt;br /&gt;
    llGetLinkPrimitiveParams(linknum, [PRIM_POSITION]),0) - llGetPos())/llGetRot())+offset]);&lt;br /&gt;
}&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S1);&lt;br /&gt;
        llLoopSound(Eng,Vol3);&lt;br /&gt;
        llLoopSound(movment,Vol3);&lt;br /&gt;
    }&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        integer t;&lt;br /&gt;
        rotation rot=llGetRot();&lt;br /&gt;
        &lt;br /&gt;
        num += num2;&lt;br /&gt;
        llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
        [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot())]);&lt;br /&gt;
    &lt;br /&gt;
        if(num == M_1)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_2&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_2)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_3&amp;quot;);&lt;br /&gt;
             for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_3)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_4&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_4)&lt;br /&gt;
        {&lt;br /&gt;
           llSay(0,&amp;quot;in check M_1&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04); &lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == W_S)&lt;br /&gt;
        {&lt;br /&gt;
            num = 0;&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llSay(0,&amp;quot;At West station&amp;quot;);&lt;br /&gt;
            state two;&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == E_S)&lt;br /&gt;
        {&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llSay(0,&amp;quot;At East station&amp;quot;);&lt;br /&gt;
            state two;&lt;br /&gt;
        }           &lt;br /&gt;
        llSetText((string)num,&amp;lt;1,1,1&amp;gt;,1.0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
///////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
state two&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S2);&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorOpen,Vol3);&lt;br /&gt;
        llSleep(door_Open_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Door_open);&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorClose,Vol3);&lt;br /&gt;
        llSleep(door_Close_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Train_leave);&lt;br /&gt;
&lt;br /&gt;
        state default;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a good way to do Random llRezObject.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer i;&lt;br /&gt;
&lt;br /&gt;
DGRandomRez(float number)&lt;br /&gt;
{&lt;br /&gt;
    for(i=(integer)llFrand(number);i&amp;gt;0;i--)&lt;br /&gt;
    {&lt;br /&gt;
        llRezObject(EXP_UP, llGetPos() + &amp;lt;0.0,0.0,1.0&amp;gt;, &amp;lt;llFrand(3.0),llFrand(3.0),llFrand(3.0)&amp;gt;, &amp;lt;0.0,0.0,llFrand(360),1.0&amp;gt;, 0);   &lt;br /&gt;
    }  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
   state_entry()&lt;br /&gt;
   {&lt;br /&gt;
      DGRandomRez(5);//This will rez an object at random 1-5.&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{skills&lt;br /&gt;
|Architect=*&lt;br /&gt;
|Builder=*&lt;br /&gt;
|Scripter=*&lt;br /&gt;
|Terraformer=&lt;br /&gt;
|}}&lt;br /&gt;
{{ISO 639-3/cat-speaking|eng}}&lt;/div&gt;</summary>
		<author><name>Dantia Gothly</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1131552</id>
		<title>User:Dantia Gothly</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1131552"/>
		<updated>2011-01-12T05:40:18Z</updated>

		<summary type="html">&lt;p&gt;Dantia Gothly: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dans open source scripts ==&lt;br /&gt;
{{LSL Header|[http://terminalproxy.com/]}}&lt;br /&gt;
&lt;br /&gt;
Hello there! I&#039;m Dantia Gothly&lt;br /&gt;
&lt;br /&gt;
Scripter,Sculpter,Texture artist.&lt;br /&gt;
&lt;br /&gt;
creater of TopHat Viewer link-&amp;gt;(http://terminalproxy.com/)&lt;br /&gt;
&lt;br /&gt;
I believe you can do just about everything in 1 script&lt;br /&gt;
&lt;br /&gt;
but that also depends on what it is your doing. For the most part it can be.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
quote:&amp;quot;dose it work? Yes it do.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
..........................................................................................................................&lt;br /&gt;
&lt;br /&gt;
Here is a nonphysical train script&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Copyright (C) 2011 Dantia Gothly&lt;br /&gt;
//This program is free software; you can redistribute it and/or&lt;br /&gt;
//modify it under the terms of the GNU General Public License&lt;br /&gt;
//as published by the Free Software Foundation; either version 2&lt;br /&gt;
//of the License, or (at your option) any later version.&lt;br /&gt;
//This program is distributed in the hope that it will be useful,&lt;br /&gt;
//but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
//GNU General Public License for more details.&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//                                     (Global Settings)&lt;br /&gt;
&lt;br /&gt;
// Door movment:&lt;br /&gt;
float T_S2 = 2.0;//timer stopped before opening door.&lt;br /&gt;
float Train_leave = 0.8;//how long the train sits after closing the doors and takes off&lt;br /&gt;
float Door_open = 10.0;//How long the doors are Open.&lt;br /&gt;
integer door1 = 2;//find the link number for the door you want to move.&lt;br /&gt;
integer door2 = 3;&lt;br /&gt;
float Door_Slid_dist = 3.3;//sets the slide forward distance of the door on the X axis&lt;br /&gt;
&lt;br /&gt;
//Math:&lt;br /&gt;
integer num = 1;//do math 1+1=__&lt;br /&gt;
integer num2 = 1;&lt;br /&gt;
&lt;br /&gt;
//Predefined integers etc:&lt;br /&gt;
integer i;&lt;br /&gt;
integer t;&lt;br /&gt;
&lt;br /&gt;
//Train turn timming:&lt;br /&gt;
float M_1 = 255;// first turn&lt;br /&gt;
float M_2 = 735;//second turn&lt;br /&gt;
float M_3 = 1215;//third turn&lt;br /&gt;
float M_4 = 1695;//forth turn&lt;br /&gt;
&lt;br /&gt;
//Station stop timing:&lt;br /&gt;
float W_S = 1920;//start train at west station.&lt;br /&gt;
float E_S = 985;//stop at east station.&lt;br /&gt;
&lt;br /&gt;
//Speed:(note:If this number changes the turn timming and stops must be changed)&lt;br /&gt;
float speed = .20;// Speed controls the PRIM_POSITION&lt;br /&gt;
&lt;br /&gt;
//Timers:&lt;br /&gt;
float T_S1 = 0.001;//Timer controls the default timer&lt;br /&gt;
float Horn_timing = 1.0;//horn sound then door opens/closes.&lt;br /&gt;
float door_Open_timing = 1.7;&lt;br /&gt;
float door_Close_timing = 2.6;&lt;br /&gt;
&lt;br /&gt;
//Sounds:&lt;br /&gt;
string Eng = &amp;quot;UUID&amp;quot;;//train_motor&lt;br /&gt;
string movment = &amp;quot;UUID&amp;quot;;//train-going&lt;br /&gt;
string Stops = &amp;quot;UUID&amp;quot;;//train-breaks&lt;br /&gt;
string Horn = &amp;quot;UUID&amp;quot;;//train-stand-clear&lt;br /&gt;
string DoorOpen = &amp;quot;UUID&amp;quot;;//train-door-open&lt;br /&gt;
string DoorClose = &amp;quot;UUID&amp;quot;;//train-door-close&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Volume:&lt;br /&gt;
float Vol3 = 1.0;// Volume high.&lt;br /&gt;
float Vol2 = 0.5;// Volume mid.&lt;br /&gt;
float Vol1 = 0.2;// Volume low.&lt;br /&gt;
float Vol0 = 0.0;// Volume mute.&lt;br /&gt;
&lt;br /&gt;
// default location = &amp;lt;67.797,124.500,33.107&amp;gt;&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//User defined functions are wonderful&lt;br /&gt;
SetLinkPosLocal2Root(integer linknum,vector offset)&lt;br /&gt;
{&lt;br /&gt;
    llSetLinkPrimitiveParamsFast(linknum, [PRIM_POSITION, ((llList2Vector(&lt;br /&gt;
    llGetLinkPrimitiveParams(linknum, [PRIM_POSITION]),0) - llGetPos())/llGetRot())+offset]);&lt;br /&gt;
}&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S1);&lt;br /&gt;
        llLoopSound(Eng,Vol3);&lt;br /&gt;
        llLoopSound(movment,Vol3);&lt;br /&gt;
    }&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        integer t;&lt;br /&gt;
        rotation rot=llGetRot();&lt;br /&gt;
        &lt;br /&gt;
        num += num2;&lt;br /&gt;
        llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
        [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot())]);&lt;br /&gt;
    &lt;br /&gt;
        if(num == M_1)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_2&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_2)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_3&amp;quot;);&lt;br /&gt;
             for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_3)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_4&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_4)&lt;br /&gt;
        {&lt;br /&gt;
           llSay(0,&amp;quot;in check M_1&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04); &lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == W_S)&lt;br /&gt;
        {&lt;br /&gt;
            num = 0;&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llSay(0,&amp;quot;At West station&amp;quot;);&lt;br /&gt;
            state two;&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == E_S)&lt;br /&gt;
        {&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llSay(0,&amp;quot;At East station&amp;quot;);&lt;br /&gt;
            state two;&lt;br /&gt;
        }           &lt;br /&gt;
        llSetText((string)num,&amp;lt;1,1,1&amp;gt;,1.0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
///////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
state two&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S2);&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorOpen,Vol3);&lt;br /&gt;
        llSleep(door_Open_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Door_open);&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorClose,Vol3);&lt;br /&gt;
        llSleep(door_Close_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Train_leave);&lt;br /&gt;
&lt;br /&gt;
        state default;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
things&lt;br /&gt;
&lt;br /&gt;
{{skills&lt;br /&gt;
|Architect=*&lt;br /&gt;
|Builder=*&lt;br /&gt;
|Scripter=*&lt;br /&gt;
|Terraformer=&lt;br /&gt;
|}}&lt;br /&gt;
{{ISO 639-3/cat-speaking|eng}}&lt;/div&gt;</summary>
		<author><name>Dantia Gothly</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1131551</id>
		<title>User:Dantia Gothly</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1131551"/>
		<updated>2011-01-12T05:30:35Z</updated>

		<summary type="html">&lt;p&gt;Dantia Gothly: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dans open source scripts ==&lt;br /&gt;
{{LSL Header|[http://terminalproxy.com/]}}&lt;br /&gt;
&lt;br /&gt;
Hello there! I&#039;m Dantia Gothly&lt;br /&gt;
&lt;br /&gt;
Scripter,Sculpter,Texture artist.&lt;br /&gt;
&lt;br /&gt;
creater of TopHat Viewer link-&amp;gt;(http://terminalproxy.com/)&lt;br /&gt;
&lt;br /&gt;
I believe you can do just about everything in 1 script&lt;br /&gt;
&lt;br /&gt;
but that also depends on what it is your doing. For the most part it can be.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
quote:&amp;quot;dose it work? Yes it do.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
..........................................................................................................................&lt;br /&gt;
&lt;br /&gt;
Here is a nonphysical train script&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Copyright (C) 2011 Dantia Gothly&lt;br /&gt;
//This program is free software; you can redistribute it and/or&lt;br /&gt;
//modify it under the terms of the GNU General Public License&lt;br /&gt;
//as published by the Free Software Foundation; either version 2&lt;br /&gt;
//of the License, or (at your option) any later version.&lt;br /&gt;
//This program is distributed in the hope that it will be useful,&lt;br /&gt;
//but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
//GNU General Public License for more details.&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//                                     (Global Settings)&lt;br /&gt;
&lt;br /&gt;
// Door movment:&lt;br /&gt;
float T_S2 = 2.0;//timer stoped before opening door.&lt;br /&gt;
float Train_leave = 0.8;//how long the train sits after closing the doors and takes off&lt;br /&gt;
float Door_open = 10.0;//How long the doors are Open.&lt;br /&gt;
integer door1 = 2;//find the link number for the door you want to move.&lt;br /&gt;
integer door2 = 3;&lt;br /&gt;
float Door_Slid_dist = 3.3;//sets the slide forword distance of the door on the X axis&lt;br /&gt;
&lt;br /&gt;
//Math:&lt;br /&gt;
integer num = 1;//do math 1+1=__&lt;br /&gt;
integer num2 = 1;&lt;br /&gt;
&lt;br /&gt;
//Predefined integers etc:&lt;br /&gt;
integer i;&lt;br /&gt;
integer t;&lt;br /&gt;
&lt;br /&gt;
//Train turn timming:&lt;br /&gt;
float M_1 = 255;// first turn&lt;br /&gt;
float M_2 = 735;//second turn&lt;br /&gt;
float M_3 = 1215;//therd turn&lt;br /&gt;
float M_4 = 1695;//forth turn&lt;br /&gt;
&lt;br /&gt;
//Station stop timming:&lt;br /&gt;
float W_S = 1920;//start train at west station.&lt;br /&gt;
float E_S = 985;//stop at east station.&lt;br /&gt;
&lt;br /&gt;
//Speed:(note:If this number changes the turn timming and stops must be changed)&lt;br /&gt;
float speed = .20;// Speed controls the PRIM_POSITION&lt;br /&gt;
&lt;br /&gt;
//Timers:&lt;br /&gt;
float T_S1 = 0.001;//Timer controls the default timer&lt;br /&gt;
float Horn_timing = 1.0;//horn sound then door opens/closes.&lt;br /&gt;
float door_Open_timing = 1.7;&lt;br /&gt;
float door_Close_timing = 2.6;&lt;br /&gt;
&lt;br /&gt;
//Sounds:&lt;br /&gt;
string Eng = &amp;quot;UUID&amp;quot;;//train_motor&lt;br /&gt;
string movment = &amp;quot;UUID&amp;quot;;//train-going&lt;br /&gt;
string Stops = &amp;quot;UUID&amp;quot;;//train-breaks&lt;br /&gt;
string Horn = &amp;quot;UUID&amp;quot;;//train-stand-clear&lt;br /&gt;
string DoorOpen = &amp;quot;UUID&amp;quot;;//train-door-open&lt;br /&gt;
string DoorClose = &amp;quot;UUID&amp;quot;;//train-door-close&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Volume:&lt;br /&gt;
float Vol3 = 1.0;// Volume high.&lt;br /&gt;
float Vol2 = 0.5;// Volume mid.&lt;br /&gt;
float Vol1 = 0.2;// Volume low.&lt;br /&gt;
float Vol0 = 0.0;// Volume mute.&lt;br /&gt;
&lt;br /&gt;
// default location = &amp;lt;67.797,124.500,33.107&amp;gt;&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//User defind functions are wonderful&lt;br /&gt;
SetLinkPosLocal2Root(integer linknum,vector offset)&lt;br /&gt;
{&lt;br /&gt;
    llSetLinkPrimitiveParamsFast(linknum, [PRIM_POSITION, ((llList2Vector(&lt;br /&gt;
    llGetLinkPrimitiveParams(linknum, [PRIM_POSITION]),0) - llGetPos())/llGetRot())+offset]);&lt;br /&gt;
}&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S1);&lt;br /&gt;
        llLoopSound(Eng,Vol3);&lt;br /&gt;
        llLoopSound(movment,Vol3);&lt;br /&gt;
    }&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        integer t;&lt;br /&gt;
        rotation rot=llGetRot();&lt;br /&gt;
        &lt;br /&gt;
        num += num2;&lt;br /&gt;
        llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
        [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot())]);&lt;br /&gt;
    &lt;br /&gt;
        if(num == M_1)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_2&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_2)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_3&amp;quot;);&lt;br /&gt;
             for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_3)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_4&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_4)&lt;br /&gt;
        {&lt;br /&gt;
           llSay(0,&amp;quot;in check M_1&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04); &lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == W_S)&lt;br /&gt;
        {&lt;br /&gt;
            num = 0;&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llSay(0,&amp;quot;At West station&amp;quot;);&lt;br /&gt;
            state two;&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == E_S)&lt;br /&gt;
        {&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llSay(0,&amp;quot;At East station&amp;quot;);&lt;br /&gt;
            state two;&lt;br /&gt;
        }           &lt;br /&gt;
        llSetText((string)num,&amp;lt;1,1,1&amp;gt;,1.0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
///////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
state two&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S2);&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorOpen,Vol3);&lt;br /&gt;
        llSleep(door_Open_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Door_open);&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorClose,Vol3);&lt;br /&gt;
        llSleep(door_Close_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Train_leave);&lt;br /&gt;
&lt;br /&gt;
        state default;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
things&lt;br /&gt;
&lt;br /&gt;
{{skills&lt;br /&gt;
|Architect=*&lt;br /&gt;
|Builder=*&lt;br /&gt;
|Scripter=*&lt;br /&gt;
|Terraformer=&lt;br /&gt;
|}}&lt;br /&gt;
{{ISO 639-3/cat-speaking|eng}}&lt;/div&gt;</summary>
		<author><name>Dantia Gothly</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1131550</id>
		<title>User:Dantia Gothly</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1131550"/>
		<updated>2011-01-12T05:26:02Z</updated>

		<summary type="html">&lt;p&gt;Dantia Gothly: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dans open source scripts ==&lt;br /&gt;
{{LSL Header|[http://terminalproxy.com/]}}&lt;br /&gt;
&lt;br /&gt;
Hello there! I&#039;m Dantia Gothly&lt;br /&gt;
&lt;br /&gt;
Scripter,Sculpter,Texture artist.&lt;br /&gt;
&lt;br /&gt;
creater of TopHat Viewer link-&amp;gt;(http://terminalproxy.com/)&lt;br /&gt;
&lt;br /&gt;
I believe you can do just about everything in 1 script&lt;br /&gt;
&lt;br /&gt;
but that also depends on what it is your doing. For the most part it can be.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
quote:&amp;quot;dose it work? Yes it do.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
..........................................................................................................................&lt;br /&gt;
&lt;br /&gt;
Here is a nonphysical train script&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Copyright (C) 2011 Dantia Gothly&lt;br /&gt;
//This program is free software; you can redistribute it and/or&lt;br /&gt;
//modify it under the terms of the GNU General Public License&lt;br /&gt;
//as published by the Free Software Foundation; either version 2&lt;br /&gt;
//of the License, or (at your option) any later version.&lt;br /&gt;
//This program is distributed in the hope that it will be useful,&lt;br /&gt;
//but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
//GNU General Public License for more details.&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//                                     (Global Settings)&lt;br /&gt;
&lt;br /&gt;
// Door movment:&lt;br /&gt;
float T_S2 = 2.0;//timer stoped before opening door.&lt;br /&gt;
float Train_leave = 0.8;//how long the train sits after closing the doors and takes off&lt;br /&gt;
float Door_open = 10.0;//How long the doors are Open.&lt;br /&gt;
integer door1 = 2;//find the link number for the door you want to move.&lt;br /&gt;
integer door2 = 3;&lt;br /&gt;
float Door_Slid_dist = 3.3;//sets the slide forword distance of the door on the X axis&lt;br /&gt;
&lt;br /&gt;
//Math:&lt;br /&gt;
integer num = 1;//do math 1+1=__&lt;br /&gt;
integer num2 = 1;&lt;br /&gt;
&lt;br /&gt;
//Predefined integers etc:&lt;br /&gt;
integer i;&lt;br /&gt;
integer t;&lt;br /&gt;
&lt;br /&gt;
//Train turn timming:&lt;br /&gt;
float M_1 = 255;// first turn&lt;br /&gt;
float M_2 = 735;//second turn&lt;br /&gt;
float M_3 = 1215;//therd turn&lt;br /&gt;
float M_4 = 1695;//forth turn&lt;br /&gt;
&lt;br /&gt;
//Station stop timming:&lt;br /&gt;
float W_S = 1920;//start train at west station.&lt;br /&gt;
float E_S = 985;//stop at east station.&lt;br /&gt;
&lt;br /&gt;
//Speed:(note:If this number changes the turn timming and stops must be changed)&lt;br /&gt;
float speed = .20;// Speed controls the PRIM_POSITION&lt;br /&gt;
&lt;br /&gt;
//Timers:&lt;br /&gt;
float T_S1 = 0.001;//Timer controls the default timer&lt;br /&gt;
float Horn_timing = 1.0;//horn sound then door opens/closes.&lt;br /&gt;
float door_Open_timing = 1.7;&lt;br /&gt;
float door_Close_timing = 2.6;&lt;br /&gt;
&lt;br /&gt;
//Sounds:&lt;br /&gt;
string Eng = &amp;quot;d0dc3135-d00a-a3ed-88b0-412a9d867734&amp;quot;;//freezer-s&lt;br /&gt;
string movment = &amp;quot;8737851f-17e3-bb15-b71e-f4235ad64f65&amp;quot;;//train-going&lt;br /&gt;
string Stops = &amp;quot;51a96f42-80ff-db3f-d44f-01002c921946&amp;quot;;//train-breaks&lt;br /&gt;
string Horn = &amp;quot;4e7218f7-6983-64d6-7d0b-bca5b19dfec8&amp;quot;;//train-stand-clear&lt;br /&gt;
string DoorOpen = &amp;quot;26dc4084-9380-e0d2-8810-f624277b6e66&amp;quot;;//train-door-open&lt;br /&gt;
string DoorClose = &amp;quot;fffcde68-ad75-4c7b-17ff-7cfecf65cd4a&amp;quot;;//train-door-close&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Volume:&lt;br /&gt;
float Vol3 = 1.0;// Volume high.&lt;br /&gt;
float Vol2 = 0.5;// Volume mid.&lt;br /&gt;
float Vol1 = 0.2;// Volume low.&lt;br /&gt;
float Vol0 = 0.0;// Volume mute.&lt;br /&gt;
&lt;br /&gt;
// default location = &amp;lt;67.797,124.500,33.107&amp;gt;&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//User defind functions are wonderful&lt;br /&gt;
SetLinkPosLocal2Root(integer linknum,vector offset)&lt;br /&gt;
{&lt;br /&gt;
    llSetLinkPrimitiveParamsFast(linknum, [PRIM_POSITION, ((llList2Vector(&lt;br /&gt;
    llGetLinkPrimitiveParams(linknum, [PRIM_POSITION]),0) - llGetPos())/llGetRot())+offset]);&lt;br /&gt;
}&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S1);&lt;br /&gt;
        llLoopSound(Eng,Vol3);&lt;br /&gt;
        llLoopSound(movment,Vol3);&lt;br /&gt;
    }&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        integer t;&lt;br /&gt;
        rotation rot=llGetRot();&lt;br /&gt;
        &lt;br /&gt;
        num += num2;&lt;br /&gt;
        llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
        [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot())]);&lt;br /&gt;
    &lt;br /&gt;
        if(num == M_1)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_2&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_2)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_3&amp;quot;);&lt;br /&gt;
             for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_3)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_4&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_4)&lt;br /&gt;
        {&lt;br /&gt;
           llSay(0,&amp;quot;in check M_1&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04); &lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == W_S)&lt;br /&gt;
        {&lt;br /&gt;
            num = 0;&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llSay(0,&amp;quot;At West station&amp;quot;);&lt;br /&gt;
            state two;&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == E_S)&lt;br /&gt;
        {&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llSay(0,&amp;quot;At East station&amp;quot;);&lt;br /&gt;
            state two;&lt;br /&gt;
        }           &lt;br /&gt;
        llSetText((string)num,&amp;lt;1,1,1&amp;gt;,1.0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
///////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
state two&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S2);&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorOpen,Vol3);&lt;br /&gt;
        llSleep(door_Open_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Door_open);&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorClose,Vol3);&lt;br /&gt;
        llSleep(door_Close_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Train_leave);&lt;br /&gt;
&lt;br /&gt;
        state default;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
things&lt;br /&gt;
&lt;br /&gt;
{{skills&lt;br /&gt;
|Architect=*&lt;br /&gt;
|Builder=*&lt;br /&gt;
|Scripter=*&lt;br /&gt;
|Terraformer=&lt;br /&gt;
|}}&lt;br /&gt;
{{ISO 639-3/cat-speaking|eng}}&lt;/div&gt;</summary>
		<author><name>Dantia Gothly</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1131549</id>
		<title>User:Dantia Gothly</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1131549"/>
		<updated>2011-01-12T05:24:21Z</updated>

		<summary type="html">&lt;p&gt;Dantia Gothly: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dans open source scripts ==&lt;br /&gt;
{{LSL Header|[http://terminalproxy.com/]}}&lt;br /&gt;
&lt;br /&gt;
Hello there! I&#039;m Dantia Gothly&lt;br /&gt;
&lt;br /&gt;
Scripter,Sculpter,Texture artist.&lt;br /&gt;
&lt;br /&gt;
creater of TopHat Viewer link-&amp;gt;(http://terminalproxy.com/)&lt;br /&gt;
&lt;br /&gt;
I believe you can do just about everything in 1 script&lt;br /&gt;
&lt;br /&gt;
but that also depends on what it is your doing. For the most part it can be.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
quote:&amp;quot;dose it work? Yes it do.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
..........................................................................................................................&lt;br /&gt;
&lt;br /&gt;
Here is a nonphysical train script&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Copyright (C) 2011 Dantia Gothly&lt;br /&gt;
//This program is free software; you can redistribute it and/or&lt;br /&gt;
//modify it under the terms of the GNU General Public License&lt;br /&gt;
//as published by the Free Software Foundation; either version 2&lt;br /&gt;
//of the License, or (at your option) any later version.&lt;br /&gt;
//This program is distributed in the hope that it will be useful,&lt;br /&gt;
//but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
//GNU General Public License for more details.&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//                                     (Global Settings)&lt;br /&gt;
&lt;br /&gt;
// Door movment:&lt;br /&gt;
float T_S2 = 2.0;//timer stoped before opening door.&lt;br /&gt;
float Train_leave = 0.8;//how long the train sits after closing the doors and takes off&lt;br /&gt;
float Door_open = 10.0;//How long the doors are Open.&lt;br /&gt;
integer door1 = 2;//find the link number for the door you want to move.&lt;br /&gt;
integer door2 = 3;&lt;br /&gt;
float Door_Slid_dist = 3.3;//sets the slide forword distance of the door on the X axis&lt;br /&gt;
&lt;br /&gt;
//Math:&lt;br /&gt;
integer num = 1;//do math 1+1=__&lt;br /&gt;
integer num2 = 1;&lt;br /&gt;
&lt;br /&gt;
//Predefined integers etc:&lt;br /&gt;
integer i;&lt;br /&gt;
integer t;&lt;br /&gt;
&lt;br /&gt;
//Train turn timming:&lt;br /&gt;
float M_1 = 255;// first turn&lt;br /&gt;
float M_2 = 735;//second turn&lt;br /&gt;
float M_3 = 1215;//therd turn&lt;br /&gt;
float M_4 = 1695;//forth turn&lt;br /&gt;
&lt;br /&gt;
//Station stop timming:&lt;br /&gt;
float W_S = 1920;//start train at west station.&lt;br /&gt;
float E_S = 985;//stop at east station.&lt;br /&gt;
&lt;br /&gt;
//Speed:(note:If this number changes the turn timming and stops must be changed)&lt;br /&gt;
float speed = .20;// Speed controls the PRIM_POSITION&lt;br /&gt;
&lt;br /&gt;
//Timers:&lt;br /&gt;
float T_S1 = 0.001;//Timer controls the default timer&lt;br /&gt;
float Horn_timing = 1.0;//horn sound then door opens/closes.&lt;br /&gt;
float door_Open_timing = 1.7;&lt;br /&gt;
float door_Close_timing = 2.6;&lt;br /&gt;
&lt;br /&gt;
//Sounds:&lt;br /&gt;
string Eng = &amp;quot;d0dc3135-d00a-a3ed-88b0-412a9d867734&amp;quot;;//freezer-s&lt;br /&gt;
string movment = &amp;quot;8737851f-17e3-bb15-b71e-f4235ad64f65&amp;quot;;//train-going&lt;br /&gt;
string Stops = &amp;quot;51a96f42-80ff-db3f-d44f-01002c921946&amp;quot;;//train-breaks&lt;br /&gt;
string Horn = &amp;quot;4e7218f7-6983-64d6-7d0b-bca5b19dfec8&amp;quot;;//train-stand-clear&lt;br /&gt;
string DoorOpen = &amp;quot;26dc4084-9380-e0d2-8810-f624277b6e66&amp;quot;;//train-door-open&lt;br /&gt;
string DoorClose = &amp;quot;fffcde68-ad75-4c7b-17ff-7cfecf65cd4a&amp;quot;;//train-door-close&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Volume:&lt;br /&gt;
float Vol3 = 1.0;// Volume high.&lt;br /&gt;
float Vol2 = 0.5;// Volume mid.&lt;br /&gt;
float Vol1 = 0.2;// Volume low.&lt;br /&gt;
float Vol0 = 0.0;// Volume mute.&lt;br /&gt;
&lt;br /&gt;
// default location = &amp;lt;67.797,124.500,33.107&amp;gt;&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//User defind functions are wonderful&lt;br /&gt;
SetLinkPosLocal2Root(integer linknum,vector offset)&lt;br /&gt;
{&lt;br /&gt;
    llSetLinkPrimitiveParamsFast(linknum, [PRIM_POSITION, ((llList2Vector(&lt;br /&gt;
    llGetLinkPrimitiveParams(linknum, [PRIM_POSITION]),0) - llGetPos())/llGetRot())+offset]);&lt;br /&gt;
}&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S1);&lt;br /&gt;
        llLoopSound(Eng,Vol3);&lt;br /&gt;
        llLoopSound(movment,Vol3);&lt;br /&gt;
    }&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        integer t;&lt;br /&gt;
        rotation rot=llGetRot();&lt;br /&gt;
        &lt;br /&gt;
        num += num2;&lt;br /&gt;
        llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
        [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot())]);&lt;br /&gt;
    &lt;br /&gt;
        if(num == M_1)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_2&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_2)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_3&amp;quot;);&lt;br /&gt;
             for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_3)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_4&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_4)&lt;br /&gt;
        {&lt;br /&gt;
           llSay(0,&amp;quot;in check M_1&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04); &lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == W_S)&lt;br /&gt;
        {&lt;br /&gt;
            num = 0;&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llSay(0,&amp;quot;At West station&amp;quot;);&lt;br /&gt;
            state two;&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == E_S)&lt;br /&gt;
        {&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llSay(0,&amp;quot;At East station&amp;quot;);&lt;br /&gt;
            state two;&lt;br /&gt;
        }           &lt;br /&gt;
        llSetText((string)num,&amp;lt;1,1,1&amp;gt;,1.0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
///////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
state two&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S2);&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorOpen,Vol3);&lt;br /&gt;
        llSleep(door_Open_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Door_open);&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorClose,Vol3);&lt;br /&gt;
        llSleep(door_Close_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Train_leave);&lt;br /&gt;
&lt;br /&gt;
        state default;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
things&lt;br /&gt;
&lt;br /&gt;
{{skills&lt;br /&gt;
|Architect=*&lt;br /&gt;
|Builder=*&lt;br /&gt;
|Machinima=&lt;br /&gt;
|Scenographer=&lt;br /&gt;
|Scripter=*&lt;br /&gt;
|SLogistician=*&lt;br /&gt;
|Terraformer=&lt;br /&gt;
|}}&lt;br /&gt;
{{Tweeter}}&lt;br /&gt;
{{ISO 639-3/cat-speaking|eng}}&lt;/div&gt;</summary>
		<author><name>Dantia Gothly</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1131548</id>
		<title>User:Dantia Gothly</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1131548"/>
		<updated>2011-01-12T05:13:17Z</updated>

		<summary type="html">&lt;p&gt;Dantia Gothly: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header|[[http://terminalproxy.com/]]}}&lt;br /&gt;
&lt;br /&gt;
Hello there! I&#039;m Dantia Gothly&lt;br /&gt;
Scripter,Sculpter,Texture artist.&lt;br /&gt;
creater of TopHat Viewer link-&amp;gt;(http://terminalproxy.com/)&lt;br /&gt;
&lt;br /&gt;
I believe you can do just about everything in 1 script&lt;br /&gt;
but that also depends on what it is your doing. For the most part it can be.&lt;br /&gt;
&lt;br /&gt;
quote:&amp;quot;dose it work? Yes it do.&amp;quot;&lt;br /&gt;
.......................................&lt;br /&gt;
Here is a nonphysical train script&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Copyright (C) 2011 Dantia Gothly&lt;br /&gt;
//This program is free software; you can redistribute it and/or&lt;br /&gt;
//modify it under the terms of the GNU General Public License&lt;br /&gt;
//as published by the Free Software Foundation; either version 2&lt;br /&gt;
//of the License, or (at your option) any later version.&lt;br /&gt;
//This program is distributed in the hope that it will be useful,&lt;br /&gt;
//but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
//GNU General Public License for more details.&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//                                     (Global Settings)&lt;br /&gt;
&lt;br /&gt;
// Door movment:&lt;br /&gt;
float T_S2 = 2.0;//timer stoped before opening door.&lt;br /&gt;
float Train_leave = 0.8;//how long the train sits after closing the doors and takes off&lt;br /&gt;
float Door_open = 10.0;//How long the doors are Open.&lt;br /&gt;
integer door1 = 2;//find the link number for the door you want to move.&lt;br /&gt;
integer door2 = 3;&lt;br /&gt;
float Door_Slid_dist = 3.3;//sets the slide forword distance of the door on the X axis&lt;br /&gt;
&lt;br /&gt;
//Math:&lt;br /&gt;
integer num = 1;//do math 1+1=__&lt;br /&gt;
integer num2 = 1;&lt;br /&gt;
&lt;br /&gt;
//Predefined integers etc:&lt;br /&gt;
integer i;&lt;br /&gt;
integer t;&lt;br /&gt;
&lt;br /&gt;
//Train turn timming:&lt;br /&gt;
float M_1 = 255;// first turn&lt;br /&gt;
float M_2 = 735;//second turn&lt;br /&gt;
float M_3 = 1215;//therd turn&lt;br /&gt;
float M_4 = 1695;//forth turn&lt;br /&gt;
&lt;br /&gt;
//Station stop timming:&lt;br /&gt;
float W_S = 1920;//start train at west station.&lt;br /&gt;
float E_S = 985;//stop at east station.&lt;br /&gt;
&lt;br /&gt;
//Speed:(note:If this number changes the turn timming and stops must be changed)&lt;br /&gt;
float speed = .20;// Speed controls the PRIM_POSITION&lt;br /&gt;
&lt;br /&gt;
//Timers:&lt;br /&gt;
float T_S1 = 0.001;//Timer controls the default timer&lt;br /&gt;
float Horn_timing = 1.0;//horn sound then door opens/closes.&lt;br /&gt;
float door_Open_timing = 1.7;&lt;br /&gt;
float door_Close_timing = 2.6;&lt;br /&gt;
&lt;br /&gt;
//Sounds:&lt;br /&gt;
string Eng = &amp;quot;d0dc3135-d00a-a3ed-88b0-412a9d867734&amp;quot;;//freezer-s&lt;br /&gt;
string movment = &amp;quot;8737851f-17e3-bb15-b71e-f4235ad64f65&amp;quot;;//train-going&lt;br /&gt;
string Stops = &amp;quot;51a96f42-80ff-db3f-d44f-01002c921946&amp;quot;;//train-breaks&lt;br /&gt;
string Horn = &amp;quot;4e7218f7-6983-64d6-7d0b-bca5b19dfec8&amp;quot;;//train-stand-clear&lt;br /&gt;
string DoorOpen = &amp;quot;26dc4084-9380-e0d2-8810-f624277b6e66&amp;quot;;//train-door-open&lt;br /&gt;
string DoorClose = &amp;quot;fffcde68-ad75-4c7b-17ff-7cfecf65cd4a&amp;quot;;//train-door-close&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Volume:&lt;br /&gt;
float Vol3 = 1.0;// Volume high.&lt;br /&gt;
float Vol2 = 0.5;// Volume mid.&lt;br /&gt;
float Vol1 = 0.2;// Volume low.&lt;br /&gt;
float Vol0 = 0.0;// Volume mute.&lt;br /&gt;
&lt;br /&gt;
// default location = &amp;lt;67.797,124.500,33.107&amp;gt;&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//User defind functions are wonderful&lt;br /&gt;
SetLinkPosLocal2Root(integer linknum,vector offset)&lt;br /&gt;
{&lt;br /&gt;
    llSetLinkPrimitiveParamsFast(linknum, [PRIM_POSITION, ((llList2Vector(&lt;br /&gt;
    llGetLinkPrimitiveParams(linknum, [PRIM_POSITION]),0) - llGetPos())/llGetRot())+offset]);&lt;br /&gt;
}&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S1);&lt;br /&gt;
        llLoopSound(Eng,Vol3);&lt;br /&gt;
        llLoopSound(movment,Vol3);&lt;br /&gt;
    }&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        integer t;&lt;br /&gt;
        rotation rot=llGetRot();&lt;br /&gt;
        &lt;br /&gt;
        num += num2;&lt;br /&gt;
        llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
        [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot())]);&lt;br /&gt;
    &lt;br /&gt;
        if(num == M_1)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_2&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_2)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_3&amp;quot;);&lt;br /&gt;
             for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_3)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_4&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_4)&lt;br /&gt;
        {&lt;br /&gt;
           llSay(0,&amp;quot;in check M_1&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04); &lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == W_S)&lt;br /&gt;
        {&lt;br /&gt;
            num = 0;&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llSay(0,&amp;quot;At West station&amp;quot;);&lt;br /&gt;
            state two;&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == E_S)&lt;br /&gt;
        {&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llSay(0,&amp;quot;At East station&amp;quot;);&lt;br /&gt;
            state two;&lt;br /&gt;
        }           &lt;br /&gt;
        llSetText((string)num,&amp;lt;1,1,1&amp;gt;,1.0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
///////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
state two&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S2);&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorOpen,Vol3);&lt;br /&gt;
        llSleep(door_Open_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Door_open);&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorClose,Vol3);&lt;br /&gt;
        llSleep(door_Close_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Train_leave);&lt;br /&gt;
&lt;br /&gt;
        state default;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
things&lt;br /&gt;
&lt;br /&gt;
{{skills&lt;br /&gt;
|Architect=*&lt;br /&gt;
|Builder=*&lt;br /&gt;
|Machinima=&lt;br /&gt;
|Scenographer=&lt;br /&gt;
|Scripter=*&lt;br /&gt;
|SLogistician=*&lt;br /&gt;
|Terraformer=&lt;br /&gt;
|}}&lt;br /&gt;
{{Tweeter}}&lt;br /&gt;
{{ISO 639-3/cat-speaking|eng}}&lt;/div&gt;</summary>
		<author><name>Dantia Gothly</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1131538</id>
		<title>User:Dantia Gothly</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1131538"/>
		<updated>2011-01-12T04:40:42Z</updated>

		<summary type="html">&lt;p&gt;Dantia Gothly: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header|[[http://terminalproxy.com/]]}}&lt;br /&gt;
&lt;br /&gt;
This is for nonphysical train.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Copyright (C) 2011 Dantia Gothly&lt;br /&gt;
//This program is free software; you can redistribute it and/or&lt;br /&gt;
//modify it under the terms of the GNU General Public License&lt;br /&gt;
//as published by the Free Software Foundation; either version 2&lt;br /&gt;
//of the License, or (at your option) any later version.&lt;br /&gt;
//This program is distributed in the hope that it will be useful,&lt;br /&gt;
//but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
//GNU General Public License for more details.&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//                                     (Global Settings)&lt;br /&gt;
&lt;br /&gt;
// Door movment:&lt;br /&gt;
float T_S2 = 2.0;//timer stoped before opening door.&lt;br /&gt;
float Train_leave = 0.8;//how long the train sits after closing the doors and takes off&lt;br /&gt;
float Door_open = 10.0;//How long the doors are Open.&lt;br /&gt;
integer door1 = 2;//find the link number for the door you want to move.&lt;br /&gt;
integer door2 = 3;&lt;br /&gt;
float Door_Slid_dist = 3.3;//sets the slide forword distance of the door on the X axis&lt;br /&gt;
&lt;br /&gt;
//Math:&lt;br /&gt;
integer num = 1;//do math 1+1=__&lt;br /&gt;
integer num2 = 1;&lt;br /&gt;
&lt;br /&gt;
//Predefined integers etc:&lt;br /&gt;
integer i;&lt;br /&gt;
integer t;&lt;br /&gt;
&lt;br /&gt;
//Train turn timming:&lt;br /&gt;
float M_1 = 255;// first turn&lt;br /&gt;
float M_2 = 735;//second turn&lt;br /&gt;
float M_3 = 1215;//therd turn&lt;br /&gt;
float M_4 = 1695;//forth turn&lt;br /&gt;
&lt;br /&gt;
//Station stop timming:&lt;br /&gt;
float W_S = 1920;//start train at west station.&lt;br /&gt;
float E_S = 985;//stop at east station.&lt;br /&gt;
&lt;br /&gt;
//Speed:(note:If this number changes the turn timming and stops must be changed)&lt;br /&gt;
float speed = .20;// Speed controls the PRIM_POSITION&lt;br /&gt;
&lt;br /&gt;
//Timers:&lt;br /&gt;
float T_S1 = 0.001;//Timer controls the default timer&lt;br /&gt;
float Horn_timing = 1.0;//horn sound then door opens/closes.&lt;br /&gt;
float door_Open_timing = 1.7;&lt;br /&gt;
float door_Close_timing = 2.6;&lt;br /&gt;
&lt;br /&gt;
//Sounds:&lt;br /&gt;
string Eng = &amp;quot;d0dc3135-d00a-a3ed-88b0-412a9d867734&amp;quot;;//freezer-s&lt;br /&gt;
string movment = &amp;quot;8737851f-17e3-bb15-b71e-f4235ad64f65&amp;quot;;//train-going&lt;br /&gt;
string Stops = &amp;quot;51a96f42-80ff-db3f-d44f-01002c921946&amp;quot;;//train-breaks&lt;br /&gt;
string Horn = &amp;quot;4e7218f7-6983-64d6-7d0b-bca5b19dfec8&amp;quot;;//train-stand-clear&lt;br /&gt;
string DoorOpen = &amp;quot;26dc4084-9380-e0d2-8810-f624277b6e66&amp;quot;;//train-door-open&lt;br /&gt;
string DoorClose = &amp;quot;fffcde68-ad75-4c7b-17ff-7cfecf65cd4a&amp;quot;;//train-door-close&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Volume:&lt;br /&gt;
float Vol3 = 1.0;// Volume high.&lt;br /&gt;
float Vol2 = 0.5;// Volume mid.&lt;br /&gt;
float Vol1 = 0.2;// Volume low.&lt;br /&gt;
float Vol0 = 0.0;// Volume mute.&lt;br /&gt;
&lt;br /&gt;
// default location = &amp;lt;67.797,124.500,33.107&amp;gt;&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//User defind functions are wonderful&lt;br /&gt;
SetLinkPosLocal2Root(integer linknum,vector offset)&lt;br /&gt;
{&lt;br /&gt;
    llSetLinkPrimitiveParamsFast(linknum, [PRIM_POSITION, ((llList2Vector(&lt;br /&gt;
    llGetLinkPrimitiveParams(linknum, [PRIM_POSITION]),0) - llGetPos())/llGetRot())+offset]);&lt;br /&gt;
}&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S1);&lt;br /&gt;
        llLoopSound(Eng,Vol3);&lt;br /&gt;
        llLoopSound(movment,Vol3);&lt;br /&gt;
    }&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        integer t;&lt;br /&gt;
        rotation rot=llGetRot();&lt;br /&gt;
        &lt;br /&gt;
        num += num2;&lt;br /&gt;
        llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
        [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot())]);&lt;br /&gt;
    &lt;br /&gt;
        if(num == M_1)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_2&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_2)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_3&amp;quot;);&lt;br /&gt;
             for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_3)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_4&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_4)&lt;br /&gt;
        {&lt;br /&gt;
           llSay(0,&amp;quot;in check M_1&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04); &lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == W_S)&lt;br /&gt;
        {&lt;br /&gt;
            num = 0;&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llSay(0,&amp;quot;At West station&amp;quot;);&lt;br /&gt;
            state two;&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == E_S)&lt;br /&gt;
        {&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llSay(0,&amp;quot;At East station&amp;quot;);&lt;br /&gt;
            state two;&lt;br /&gt;
        }           &lt;br /&gt;
        llSetText((string)num,&amp;lt;1,1,1&amp;gt;,1.0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
///////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
state two&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S2);&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorOpen,Vol3);&lt;br /&gt;
        llSleep(door_Open_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Door_open);&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorClose,Vol3);&lt;br /&gt;
        llSleep(door_Close_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Train_leave);&lt;br /&gt;
&lt;br /&gt;
        state default;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
things&lt;br /&gt;
&lt;br /&gt;
{{skills&lt;br /&gt;
|Architect=*&lt;br /&gt;
|Builder=*&lt;br /&gt;
|Machinima=&lt;br /&gt;
|Scenographer=&lt;br /&gt;
|Scripter=*&lt;br /&gt;
|SLogistician=*&lt;br /&gt;
|Terraformer=&lt;br /&gt;
|}}&lt;br /&gt;
{{Tweeter}}&lt;br /&gt;
{{ISO 639-3/cat-speaking|eng}}&lt;/div&gt;</summary>
		<author><name>Dantia Gothly</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1131536</id>
		<title>User:Dantia Gothly</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1131536"/>
		<updated>2011-01-12T04:38:20Z</updated>

		<summary type="html">&lt;p&gt;Dantia Gothly: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header|[[http://terminalproxy.com/]]}}&lt;br /&gt;
&lt;br /&gt;
This is for nonphysical train.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Copyright (C) 2011 Dantia Gothly&lt;br /&gt;
//This program is free software; you can redistribute it and/or&lt;br /&gt;
//modify it under the terms of the GNU General Public License&lt;br /&gt;
//as published by the Free Software Foundation; either version 2&lt;br /&gt;
//of the License, or (at your option) any later version.&lt;br /&gt;
//This program is distributed in the hope that it will be useful,&lt;br /&gt;
//but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
//GNU General Public License for more details.&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//                                     (Global Settings)&lt;br /&gt;
&lt;br /&gt;
// Door movment:&lt;br /&gt;
float T_S2 = 2.0;//timer stoped before opening door.&lt;br /&gt;
float Train_leave = 0.8;//how long the train sits after closing the doors and takes off&lt;br /&gt;
float Door_open = 10.0;//How long the doors are Open.&lt;br /&gt;
integer door1 = 2;//find the link number for the door you want to move.&lt;br /&gt;
integer door2 = 3;&lt;br /&gt;
float Door_Slid_dist = 3.3;//sets the slide forword distance of the door on the X axis&lt;br /&gt;
&lt;br /&gt;
//Math:&lt;br /&gt;
integer num = 1;//do math 1+1=__&lt;br /&gt;
integer num2 = 1;&lt;br /&gt;
&lt;br /&gt;
//Predefined integers etc:&lt;br /&gt;
integer i;&lt;br /&gt;
integer t;&lt;br /&gt;
&lt;br /&gt;
//Train turn timming:&lt;br /&gt;
float M_1 = 255;// first turn&lt;br /&gt;
float M_2 = 735;//second turn&lt;br /&gt;
float M_3 = 1215;//therd turn&lt;br /&gt;
float M_4 = 1695;//forth turn&lt;br /&gt;
&lt;br /&gt;
//Station stop timming:&lt;br /&gt;
float W_S = 1920;//start train at west station.&lt;br /&gt;
float E_S = 985;//stop at east station.&lt;br /&gt;
&lt;br /&gt;
//Speed:(note:If this number changes the turn timming and stops must be changed)&lt;br /&gt;
float speed = .20;// Speed controls the PRIM_POSITION&lt;br /&gt;
&lt;br /&gt;
//Timers:&lt;br /&gt;
float T_S1 = 0.001;//Timer controls the default timer&lt;br /&gt;
float Horn_timing = 1.0;//horn sound then door opens/closes.&lt;br /&gt;
float door_Open_timing = 1.7;&lt;br /&gt;
float door_Close_timing = 2.6;&lt;br /&gt;
&lt;br /&gt;
//Sounds:&lt;br /&gt;
string Eng = &amp;quot;d0dc3135-d00a-a3ed-88b0-412a9d867734&amp;quot;;//freezer-s&lt;br /&gt;
string movment = &amp;quot;8737851f-17e3-bb15-b71e-f4235ad64f65&amp;quot;;//train-going&lt;br /&gt;
string Stops = &amp;quot;51a96f42-80ff-db3f-d44f-01002c921946&amp;quot;;//train-breaks&lt;br /&gt;
string Horn = &amp;quot;4e7218f7-6983-64d6-7d0b-bca5b19dfec8&amp;quot;;//train-stand-clear&lt;br /&gt;
string DoorOpen = &amp;quot;26dc4084-9380-e0d2-8810-f624277b6e66&amp;quot;;//train-door-open&lt;br /&gt;
string DoorClose = &amp;quot;fffcde68-ad75-4c7b-17ff-7cfecf65cd4a&amp;quot;;//train-door-close&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Volume:&lt;br /&gt;
float Vol3 = 1.0;// Volume high.&lt;br /&gt;
float Vol2 = 0.5;// Volume mid.&lt;br /&gt;
float Vol1 = 0.2;// Volume low.&lt;br /&gt;
float Vol0 = 0.0;// Volume mute.&lt;br /&gt;
&lt;br /&gt;
// default location = &amp;lt;67.797,124.500,33.107&amp;gt;&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//User defind functions are wonderful&lt;br /&gt;
SetLinkPosLocal2Root(integer linknum,vector offset)&lt;br /&gt;
{&lt;br /&gt;
    llSetLinkPrimitiveParamsFast(linknum, [PRIM_POSITION, ((llList2Vector(&lt;br /&gt;
    llGetLinkPrimitiveParams(linknum, [PRIM_POSITION]),0) - llGetPos())/llGetRot())+offset]);&lt;br /&gt;
}&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S1);&lt;br /&gt;
        llLoopSound(Eng,Vol3);&lt;br /&gt;
        llLoopSound(movment,Vol3);&lt;br /&gt;
    }&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        integer t;&lt;br /&gt;
        rotation rot=llGetRot();&lt;br /&gt;
        &lt;br /&gt;
        num += num2;&lt;br /&gt;
        llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
        [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot())]);&lt;br /&gt;
    &lt;br /&gt;
        if(num == M_1)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_2&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_2)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_3&amp;quot;);&lt;br /&gt;
             for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_3)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_4&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_4)&lt;br /&gt;
        {&lt;br /&gt;
           llSay(0,&amp;quot;in check M_1&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04); &lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == W_S)&lt;br /&gt;
        {&lt;br /&gt;
            num = 0;&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llSay(0,&amp;quot;At West station&amp;quot;);&lt;br /&gt;
            state two;&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == E_S)&lt;br /&gt;
        {&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llSay(0,&amp;quot;At East station&amp;quot;);&lt;br /&gt;
            state two;&lt;br /&gt;
        }           &lt;br /&gt;
        llSetText((string)num,&amp;lt;1,1,1&amp;gt;,1.0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
///////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
state two&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S2);&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorOpen,Vol3);&lt;br /&gt;
        llSleep(door_Open_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Door_open);&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorClose,Vol3);&lt;br /&gt;
        llSleep(door_Close_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Train_leave);&lt;br /&gt;
&lt;br /&gt;
        state default;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
stuff&lt;/div&gt;</summary>
		<author><name>Dantia Gothly</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1131531</id>
		<title>User:Dantia Gothly</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1131531"/>
		<updated>2011-01-12T04:28:48Z</updated>

		<summary type="html">&lt;p&gt;Dantia Gothly: Train script&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header|[[http://terminalproxy.com/]]}}&lt;br /&gt;
&lt;br /&gt;
This is for nonphysical train.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Copyright (C) 2011 Dantia Gothly&lt;br /&gt;
//This program is free software; you can redistribute it and/or&lt;br /&gt;
//modify it under the terms of the GNU General Public License&lt;br /&gt;
//as published by the Free Software Foundation; either version 2&lt;br /&gt;
//of the License, or (at your option) any later version.&lt;br /&gt;
//This program is distributed in the hope that it will be useful,&lt;br /&gt;
//but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
//GNU General Public License for more details.&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//                                     (Global Settings)&lt;br /&gt;
&lt;br /&gt;
// Door movment:&lt;br /&gt;
float T_S2 = 2.0;//timer stoped before opening door.&lt;br /&gt;
float Train_leave = 0.8;//how long the train sits after closing the doors and takes off&lt;br /&gt;
float Door_open = 10.0;//How long the doors are Open.&lt;br /&gt;
integer door1 = 2;//find the link number for the door you want to move.&lt;br /&gt;
integer door2 = 3;&lt;br /&gt;
float Door_Slid_dist = 3.3;//sets the slide forword distance of the door on the X axis&lt;br /&gt;
&lt;br /&gt;
//Math:&lt;br /&gt;
integer num = 1;//do math 1+1=__&lt;br /&gt;
integer num2 = 1;&lt;br /&gt;
&lt;br /&gt;
//Predefined integers etc:&lt;br /&gt;
integer i;&lt;br /&gt;
integer t;&lt;br /&gt;
&lt;br /&gt;
//Train turn timming:&lt;br /&gt;
float M_1 = 255;// first turn&lt;br /&gt;
float M_2 = 735;//second turn&lt;br /&gt;
float M_3 = 1215;//therd turn&lt;br /&gt;
float M_4 = 1695;//forth turn&lt;br /&gt;
&lt;br /&gt;
//Station stop timming:&lt;br /&gt;
float W_S = 1920;//start train at west station.&lt;br /&gt;
float E_S = 985;//stop at east station.&lt;br /&gt;
&lt;br /&gt;
//Speed:(note:If this number changes the turn timming and stops must be changed)&lt;br /&gt;
float speed = .20;// Speed controls the PRIM_POSITION&lt;br /&gt;
&lt;br /&gt;
//Timers:&lt;br /&gt;
float T_S1 = 0.001;//Timer controls the default timer&lt;br /&gt;
float Horn_timing = 1.0;//horn sound then door opens/closes.&lt;br /&gt;
float door_Open_timing = 1.7;&lt;br /&gt;
float door_Close_timing = 2.6;&lt;br /&gt;
&lt;br /&gt;
//Sounds:&lt;br /&gt;
string Eng = &amp;quot;d0dc3135-d00a-a3ed-88b0-412a9d867734&amp;quot;;//freezer-s&lt;br /&gt;
string movment = &amp;quot;8737851f-17e3-bb15-b71e-f4235ad64f65&amp;quot;;//train-going&lt;br /&gt;
string Stops = &amp;quot;51a96f42-80ff-db3f-d44f-01002c921946&amp;quot;;//train-breaks&lt;br /&gt;
string Horn = &amp;quot;4e7218f7-6983-64d6-7d0b-bca5b19dfec8&amp;quot;;//train-stand-clear&lt;br /&gt;
string DoorOpen = &amp;quot;26dc4084-9380-e0d2-8810-f624277b6e66&amp;quot;;//train-door-open&lt;br /&gt;
string DoorClose = &amp;quot;fffcde68-ad75-4c7b-17ff-7cfecf65cd4a&amp;quot;;//train-door-close&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Volume:&lt;br /&gt;
float Vol3 = 1.0;// Volume high.&lt;br /&gt;
float Vol2 = 0.5;// Volume mid.&lt;br /&gt;
float Vol1 = 0.2;// Volume low.&lt;br /&gt;
float Vol0 = 0.0;// Volume mute.&lt;br /&gt;
&lt;br /&gt;
// default location = &amp;lt;67.797,124.500,33.107&amp;gt;&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//User defind functions are wonderful&lt;br /&gt;
SetLinkPosLocal2Root(integer linknum,vector offset)&lt;br /&gt;
{&lt;br /&gt;
    llSetLinkPrimitiveParamsFast(linknum, [PRIM_POSITION, ((llList2Vector(&lt;br /&gt;
    llGetLinkPrimitiveParams(linknum, [PRIM_POSITION]),0) - llGetPos())/llGetRot())+offset]);&lt;br /&gt;
}&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S1);&lt;br /&gt;
        llLoopSound(Eng,Vol3);&lt;br /&gt;
        llLoopSound(movment,Vol3);&lt;br /&gt;
    }&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        integer t;&lt;br /&gt;
        rotation rot=llGetRot();&lt;br /&gt;
        &lt;br /&gt;
        num += num2;&lt;br /&gt;
        llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
        [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot())]);&lt;br /&gt;
    &lt;br /&gt;
        if(num == M_1)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_2&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_2)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_3&amp;quot;);&lt;br /&gt;
             for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_3)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_4&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_4)&lt;br /&gt;
        {&lt;br /&gt;
           llSay(0,&amp;quot;in check M_1&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04); &lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == W_S)&lt;br /&gt;
        {&lt;br /&gt;
            num = 0;&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llSay(0,&amp;quot;At West station&amp;quot;);&lt;br /&gt;
            state two;&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == E_S)&lt;br /&gt;
        {&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llSay(0,&amp;quot;At East station&amp;quot;);&lt;br /&gt;
            state two;&lt;br /&gt;
        }           &lt;br /&gt;
        llSetText((string)num,&amp;lt;1,1,1&amp;gt;,1.0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
///////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
state two&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S2);&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorOpen,Vol3);&lt;br /&gt;
        llSleep(door_Open_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Door_open);&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorClose,Vol3);&lt;br /&gt;
        llSleep(door_Close_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Train_leave);&lt;br /&gt;
&lt;br /&gt;
        state default;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Dantia Gothly</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1131529</id>
		<title>User:Dantia Gothly</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Dantia_Gothly&amp;diff=1131529"/>
		<updated>2011-01-12T04:23:21Z</updated>

		<summary type="html">&lt;p&gt;Dantia Gothly: Train script&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header|[[http://terminalproxy.com/]]}}&lt;br /&gt;
&lt;br /&gt;
This is for nonphysical train.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//Copyright (C) 2011 Dantia Gothly&lt;br /&gt;
//This program is free software; you can redistribute it and/or&lt;br /&gt;
//modify it under the terms of the GNU General Public License&lt;br /&gt;
//as published by the Free Software Foundation; either version 2&lt;br /&gt;
//of the License, or (at your option) any later version.&lt;br /&gt;
//This program is distributed in the hope that it will be useful,&lt;br /&gt;
//but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
//GNU General Public License for more details.&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//                                     (Globle Settings)&lt;br /&gt;
&lt;br /&gt;
// Door movment:&lt;br /&gt;
float T_S2 = 2.0;//timer stoped before opening door.&lt;br /&gt;
float Train_leave = 0.8;//how long the train sits after closing the doors and takes off&lt;br /&gt;
float Door_open = 10.0;//How long the doors are Open.&lt;br /&gt;
integer door1 = 2;//find the link number for the door you want to move.&lt;br /&gt;
integer door2 = 3;&lt;br /&gt;
float Door_Slid_dist = 3.3;//sets the slide forword distance of the door on the X axis&lt;br /&gt;
&lt;br /&gt;
//Math:&lt;br /&gt;
integer num = 1;//do math 1+1=__&lt;br /&gt;
integer num2 = 1;&lt;br /&gt;
&lt;br /&gt;
//Predefined integers etc:&lt;br /&gt;
integer i;&lt;br /&gt;
integer t;&lt;br /&gt;
&lt;br /&gt;
//Train turn timming:&lt;br /&gt;
float M_1 = 255;// first turn&lt;br /&gt;
float M_2 = 735;//second turn&lt;br /&gt;
float M_3 = 1215;//therd turn&lt;br /&gt;
float M_4 = 1695;//forth turn&lt;br /&gt;
&lt;br /&gt;
//Station stop timming:&lt;br /&gt;
float W_S = 1920;//start train at west station.&lt;br /&gt;
float E_S = 985;//stop at east station.&lt;br /&gt;
&lt;br /&gt;
//Speed:(note:If this number changes the turn timming and stops must be changed)&lt;br /&gt;
float speed = .20;// Speed controls the PRIM_POSITION&lt;br /&gt;
&lt;br /&gt;
//Timers:&lt;br /&gt;
float T_S1 = 0.001;//Timer controls the default timer&lt;br /&gt;
float Horn_timing = 1.0;//horn sound then door opens/closes.&lt;br /&gt;
float door_Open_timing = 1.7;&lt;br /&gt;
float door_Close_timing = 2.6;&lt;br /&gt;
&lt;br /&gt;
//Sounds:&lt;br /&gt;
string Eng = &amp;quot;d0dc3135-d00a-a3ed-88b0-412a9d867734&amp;quot;;//freezer-s&lt;br /&gt;
string movment = &amp;quot;8737851f-17e3-bb15-b71e-f4235ad64f65&amp;quot;;//train-going&lt;br /&gt;
string Stops = &amp;quot;51a96f42-80ff-db3f-d44f-01002c921946&amp;quot;;//train-breaks&lt;br /&gt;
string Horn = &amp;quot;4e7218f7-6983-64d6-7d0b-bca5b19dfec8&amp;quot;;//train-stand-clear&lt;br /&gt;
string DoorOpen = &amp;quot;26dc4084-9380-e0d2-8810-f624277b6e66&amp;quot;;//train-door-open&lt;br /&gt;
string DoorClose = &amp;quot;fffcde68-ad75-4c7b-17ff-7cfecf65cd4a&amp;quot;;//train-door-close&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Volume:&lt;br /&gt;
float Vol3 = 1.0;// Volume high.&lt;br /&gt;
float Vol2 = 0.5;// Volume mid.&lt;br /&gt;
float Vol1 = 0.2;// Volume low.&lt;br /&gt;
float Vol0 = 0.0;// Volume mute.&lt;br /&gt;
&lt;br /&gt;
// default location = &amp;lt;67.797,124.500,33.107&amp;gt;&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
//User defind functions are wonderful&lt;br /&gt;
SetLinkPosLocal2Root(integer linknum,vector offset)&lt;br /&gt;
{&lt;br /&gt;
    llSetLinkPrimitiveParamsFast(linknum, [PRIM_POSITION, ((llList2Vector(&lt;br /&gt;
    llGetLinkPrimitiveParams(linknum, [PRIM_POSITION]),0) - llGetPos())/llGetRot())+offset]);&lt;br /&gt;
}&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S1);&lt;br /&gt;
        llLoopSound(Eng,Vol3);&lt;br /&gt;
        llLoopSound(movment,Vol3);&lt;br /&gt;
    }&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        integer t;&lt;br /&gt;
        rotation rot=llGetRot();&lt;br /&gt;
        &lt;br /&gt;
        num += num2;&lt;br /&gt;
        llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
        [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot())]);&lt;br /&gt;
    &lt;br /&gt;
        if(num == M_1)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_2&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_2)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_3&amp;quot;);&lt;br /&gt;
             for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_3)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0,&amp;quot;in check M_4&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if (num == M_4)&lt;br /&gt;
        {&lt;br /&gt;
           llSay(0,&amp;quot;in check M_1&amp;quot;);&lt;br /&gt;
           for(t=0;t&amp;lt;=90;t++)&lt;br /&gt;
           {&lt;br /&gt;
               llSetLinkPrimitiveParamsFast(LINK_THIS,&lt;br /&gt;
               [PRIM_POSITION, llGetPos()+(&amp;lt; speed,0.0,0.0&amp;gt;*llGetRot()),&lt;br /&gt;
               PRIM_ROTATION,(rot/llEuler2Rot(&amp;lt;0,0,t&amp;gt;*DEG_TO_RAD))]);&lt;br /&gt;
               llSleep(0.04); &lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == W_S)&lt;br /&gt;
        {&lt;br /&gt;
            num = 0;&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llSay(0,&amp;quot;At West station&amp;quot;);&lt;br /&gt;
            state two;&lt;br /&gt;
        }&lt;br /&gt;
        else if(num == E_S)&lt;br /&gt;
        {&lt;br /&gt;
            llTriggerSound(Stops,Vol3);&lt;br /&gt;
            llLoopSound(movment,Vol0);&lt;br /&gt;
            llLoopSound(Eng,Vol1);&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llSay(0,&amp;quot;At East station&amp;quot;);&lt;br /&gt;
            state two;&lt;br /&gt;
        }           &lt;br /&gt;
        llSetText((string)num,&amp;lt;1,1,1&amp;gt;,1.0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
///////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
state two&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(T_S2);&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorOpen,Vol3);&lt;br /&gt;
        llSleep(door_Open_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Door_open);&lt;br /&gt;
        llTriggerSound(Horn,Vol3);&lt;br /&gt;
        llSleep(Horn_timing);&lt;br /&gt;
        llTriggerSound(DoorClose,Vol3);&lt;br /&gt;
        llSleep(door_Close_timing);&lt;br /&gt;
        SetLinkPosLocal2Root(door1,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        SetLinkPosLocal2Root(door2,&amp;lt;-Door_Slid_dist,0.0,0.0&amp;gt;);&lt;br /&gt;
        llSleep(Train_leave);&lt;br /&gt;
&lt;br /&gt;
        state default;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Dantia Gothly</name></author>
	</entry>
</feed>