<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[GridTalk.de - Fertige Scripts]]></title>
		<link>https://www.gridtalk.de/</link>
		<description><![CDATA[GridTalk.de - https://www.gridtalk.de]]></description>
		<pubDate>Thu, 25 Jun 2026 06:56:22 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[Name des Objects als Hovertext]]></title>
			<link>https://www.gridtalk.de/showthread.php?tid=2894</link>
			<pubDate>Sat, 24 Feb 2018 17:18:12 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://www.gridtalk.de/member.php?action=profile&uid=673">Leora Jacobus</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.gridtalk.de/showthread.php?tid=2894</guid>
			<description><![CDATA[Einen normalen Hovertext habe ich aber da muß ich bei jedem Objekt in den ich ihn packe immer den Text im Script ändern.<br />
<br />
Viel besser wäre es wenn ich nur den Namen des Objectes ändern müßte und der Hovertext gibt diesen Namen an.<br />
<br />
Perfekt wäre es, wenn der Namen nicht dauernd über der Kiste steht, sondern nur bei mouseover erscheint.<br />
<br />
Weiß jemand Rat?]]></description>
			<content:encoded><![CDATA[Einen normalen Hovertext habe ich aber da muß ich bei jedem Objekt in den ich ihn packe immer den Text im Script ändern.<br />
<br />
Viel besser wäre es wenn ich nur den Namen des Objectes ändern müßte und der Hovertext gibt diesen Namen an.<br />
<br />
Perfekt wäre es, wenn der Namen nicht dauernd über der Kiste steht, sondern nur bei mouseover erscheint.<br />
<br />
Weiß jemand Rat?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[1000 Scripts - Repo]]></title>
			<link>https://www.gridtalk.de/showthread.php?tid=1744</link>
			<pubDate>Mon, 24 Aug 2015 11:24:13 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://www.gridtalk.de/member.php?action=profile&uid=2">Bogus Curry</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.gridtalk.de/showthread.php?tid=1744</guid>
			<description><![CDATA[Hallo zusammen ;D<br />
<br />
Hab per Zufall ein Repo bei Github gefunden, was 1000 LSL Scripts beinhaltet. Diese Scripts gehören zu der Seite <a href="http://www.OutWorldz.com" target="_blank" rel="noopener" class="mycode_url">OutWorldz.com</a>, dahinter steckt nun widerrum ein <a href="http://www.mitsi.com" target="_blank" rel="noopener" class="mycode_url">Hardware Hersteller.</a> <br />
<br />
Hier der Link zu der Repo<br />
<a href="https://github.com/Ferdzee/LSL-Scripts" target="_blank" rel="noopener" class="mycode_url">https://github.com/Ferdzee/LSL-Scripts</a><br />
<br />
Viel Spass beim testen ;D]]></description>
			<content:encoded><![CDATA[Hallo zusammen ;D<br />
<br />
Hab per Zufall ein Repo bei Github gefunden, was 1000 LSL Scripts beinhaltet. Diese Scripts gehören zu der Seite <a href="http://www.OutWorldz.com" target="_blank" rel="noopener" class="mycode_url">OutWorldz.com</a>, dahinter steckt nun widerrum ein <a href="http://www.mitsi.com" target="_blank" rel="noopener" class="mycode_url">Hardware Hersteller.</a> <br />
<br />
Hier der Link zu der Repo<br />
<a href="https://github.com/Ferdzee/LSL-Scripts" target="_blank" rel="noopener" class="mycode_url">https://github.com/Ferdzee/LSL-Scripts</a><br />
<br />
Viel Spass beim testen ;D]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Mirrorscript von Aine Caoimhe]]></title>
			<link>https://www.gridtalk.de/showthread.php?tid=1693</link>
			<pubDate>Thu, 23 Jul 2015 21:20:01 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://www.gridtalk.de/member.php?action=profile&uid=2">Bogus Curry</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.gridtalk.de/showthread.php?tid=1693</guid>
			<description><![CDATA[Hier ein schönes Mirror Script, wurde von Spike gefunden, werde es mal hier unterbringen, da es im Blog von der Aime ein bisschen unglücklich eingebunden wurrde.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>// Mirror script<br />
// by Aine Caoimhe (c. LACM) July 2015<br />
// Provided under Creative Commons Attribution-Non-Commercial-ShareAlike 4.0 International license.<br />
// Please be sure you read and adhere to the terms of this license: https://creativecommons.org/licenses/by-nc-sa/4.0/<br />
//<br />
// When an avatar sits on an object containing this script the avi will be cloned to an NPC who will also sit<br />
// Paired aniamtions supplied in the object will be played, making it appear as though the NPC is the mirrored user<br />
// If the sitter touches the mirror it will advance to the next pose (if there are more to play)<br />
// when the sitter stands, the NPC is removed<br />
// (Note: if sitter changes appearance during use the NPC will not change to copy that change...it will continue to appear as intiailly rezzed)<br />
//<br />
// Place this script in the ROOT prim which can either be the mirror object itself or ain invisible prim placed at that location.<br />
// It is assumed that the root prim's XZ-plane is the axis to be mirrored<br />
//<br />
// Add animations to the contents of the root prim in pairs where each pair consists of:<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- an animation for the sitter to play<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- an animation that mirrors this, that has the IDENTICAL NAME with " mirror" (including the leading space) added after it<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;example: "sit 1" and "sit 1 mirror"<br />
// DO NOT have a main sitter pose end with the word mirror because it would be interpretted as being a mirror pose and ignored<br />
//<br />
// ***** IF YOU ADD OR REMOVE ANIMATIONS YOU WILL NEED TO RESET THE SCRIPT TO PICK UP THE CHANGES!!! *****<br />
//<br />
// The sitter's pose position is determined by the base sitPos and sitRot settings (see user settings section below) UNLESS you<br />
// overide these for an animation by placing new values in the DESCRIPTION field of the main pose in the format:<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;sitpose&gt;::&lt;sit rot&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;--- note the double colon separator between position and rotation<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;example:&nbsp;&nbsp;&lt;0.0, 1.0, 0.0&gt;::&lt;0.0, 0.0, 0.0, 1.0&gt;<br />
// at which point the sitter will be moved to that sit target posision instead<br />
//<br />
// In all cases, the clone (mirror NPC) will be positioned exactly 180 rotated around the root prim's LOCAL Z axis<br />
// If you have already rotated the mirror pose animation on axis when creating the mirror and do not need it subequently rotated<br />
// when the clone NPC plays it, set the user variable mirrorRot to FALSE, otherwise leave it TRUE (this applies to all animations played<br />
// so you can't use a mixture of both, sorry)<br />
//<br />
// USER SETTINGS<br />
// use something like the Magic Sit Kit to set the value of these two<br />
integer sayPoseName=TRUE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // TURE = owner will be told the name of the pose each time one is activated, FALSE = mirror will be silent<br />
integer userName=FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // TRUE = NPC will have the sitter's name, FALSE = NPC will have empty name<br />
vector sitPos=&lt;0.0, 1.0, 0.0&gt;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// base sit target position to set for the main sitter relative to the mirror - NPC clone will mirror this position on the opposite side of the mirror<br />
rotation sitRot=&lt;0.0, 0.0, 0.0, 1.0&gt;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // base sit target rotation to set for the main sitter relative to the mirror - NPC clone will mirror this on the opposite side of the mirror<br />
integer mirrorRot=TRUE;&nbsp;&nbsp;&nbsp;&nbsp; // FALSE = the mirror animations you are supplying are already rotated on root; TRUE = they need to be rotated by the script<br />
string baseAn="*****base__stand priority 1";&nbsp;&nbsp;&nbsp;&nbsp;// name of a base priority 1 animation to use for underlying synch (no mirror pose of it is needed)<br />
//<br />
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *<br />
// DO NOT CHANGE ANYTHING BELOW HERE UNLESS YOU KNOW WHAT YOU'RE DOING<br />
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *<br />
list poses;<br />
list mirrors;<br />
integer anIndex;<br />
key user;<br />
key npc;<br />
integer linkNpc;<br />
integer linkUser;<br />
<br />
updatePositions()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;vector pos=sitPos;<br />
&nbsp;&nbsp;&nbsp;&nbsp;rotation rot=sitRot;<br />
&nbsp;&nbsp;&nbsp;&nbsp;// see if this pose requires position override<br />
&nbsp;&nbsp;&nbsp;&nbsp;string posOverride=osGetInventoryDesc(llList2String(poses,anIndex));<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (llSubStringIndex(posOverride,"::")&gt;=0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list orData=llParseString2List(posOverride,["::"],[]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos=llList2Vector(orData,0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rot=llList2Rot(orData,1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;vector size = llGetAgentSize(user);<br />
&nbsp;&nbsp;&nbsp;&nbsp;float fAdjust = ((((0.008906 * size.z) + -0.049831) * size.z) + 0.088967) * size.z;<br />
&nbsp;&nbsp;&nbsp;&nbsp;vector newPos=(pos + &lt;0.0, 0.0, 0.4&gt;) - (llRot2Up(rot) * fAdjust);<br />
&nbsp;&nbsp;&nbsp;&nbsp;llSetLinkPrimitiveParamsFast(linkUser, [PRIM_POS_LOCAL,newPos,PRIM_ROT_LOCAL, rot]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;newPos.y=-newPos.y;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (mirrorRot)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vector aviRot=llRot2Euler(rot);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aviRot.z=-aviRot.z;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aviRot.x=-aviRot.x;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rot =llEuler2Rot(aviRot);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;llSetLinkPrimitiveParamsFast(linkNpc, [PRIM_POS_LOCAL,newPos,PRIM_ROT_LOCAL, rot]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (sayPoseName) llOwnerSay("New pose: "+llList2String(poses,anIndex));<br />
}<br />
buildPoseList()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;list an;<br />
&nbsp;&nbsp;&nbsp;&nbsp;poses=[];<br />
&nbsp;&nbsp;&nbsp;&nbsp;mirrors=[];<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer i=llGetInventoryNumber(INVENTORY_ANIMATION);<br />
&nbsp;&nbsp;&nbsp;&nbsp;while (--i&gt;=0) { an=[]+[llGetInventoryName(INVENTORY_ANIMATION,i)]+an; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;i=llListFindList(an,[baseAn]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (i==-1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llOwnerSay("ERROR! Unable to locate the base priototy 1 aniamtion: "+baseAn);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user="ERROR";<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else an=[]+llDeleteSubList(an,i,i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;i=llGetListLength(an);<br />
&nbsp;&nbsp;&nbsp;&nbsp;while (--i&gt;=0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string name=llList2String(an,i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (llGetSubString(name,-7,-1)!=" mirror")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;integer m=llListFindList(an,[name+" mirror"]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (m==-1) llOwnerSay("WARNING: found an animation with the name &#92;""+name+"&#92;" but no matching animation was located");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;poses=[]+[name]+poses;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mirrors=[]+[name+" mirror"]+mirrors;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;// double-check even though mismatch ought to be impossible;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (llGetListLength(poses)!=llGetListLength(mirrors))<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llOwnerSay("ERROR! Somehow build pose and mirror lists with mismatched lengths. Dump of data:&#92;n&#92;nPOSES: "+llDumpList2String(poses,", ")+"&#92;nMIRRORS: "+llDumpList2String(mirrors,", "));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user="ERROR";<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;anIndex=0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (llGetListLength(poses)==1) llOwnerSay("Pose list built. Found only 1 mirrored pose in inventory so disabling touch advance");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else llOwnerSay("Pose list built. Found "+(string)llGetListLength(poses)+" mirrored pose in inventory");<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
cleanSitters()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;user=NULL_KEY;<br />
&nbsp;&nbsp;&nbsp;&nbsp;npc=NULL_KEY;<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer l=llGetNumberOfPrims();<br />
&nbsp;&nbsp;&nbsp;&nbsp;while (l&gt;0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key who=llGetLinkKey(l);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (llGetAgentSize(who)==ZERO_VECTOR) l=0; // agents are always the last link numbers<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (osIsNpc(who)) osNpcRemove(who);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llRegionSayTo(who,0,"Sorry, the system has been reset so you will need to sit down again");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llUnSit(who);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l--;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
default<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;state_entry()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buildPoseList();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSitTarget(&lt;0.0, 0.0, 0.000001&gt;,ZERO_ROTATION);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetClickAction(CLICK_ACTION_SIT);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (user=="ERROR") llOwnerSay("Cannot active device until animation list building errors are correct");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else cleanSitters();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;on_rez(integer foo)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llResetScript();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;touch_start(integer num)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key who=llDetectedKey(0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (who!=user)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (user==NULL_KEY) llRegionSayTo(who,0,"Please sit on me to use me");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else llRegionSayTo(who,0,"Sorry, only the current user can touch me");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (llGetListLength(poses)==1) return;&nbsp;&nbsp; // with only 1 pose no changing<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osAvatarStopAnimation(user,llList2String(poses,anIndex));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osAvatarStopAnimation(npc,llList2String(mirrors,anIndex));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;anIndex++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (anIndex&gt;=llGetListLength(poses)) anIndex=0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osAvatarPlayAnimation(user,llList2String(poses,anIndex));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osAvatarPlayAnimation(npc,llList2String(mirrors,anIndex));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;updatePositions();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;changed (integer change)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (change &amp; CHANGED_OWNER) llResetScript();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (change &amp; CHANGED_REGION_START) llResetScript();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (change &amp; CHANGED_INVENTORY) llOwnerSay("Detected a change in inventory. Remember to reset the script if you have changed the animations");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (change &amp; CHANGED_LINK)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// find out who is currently sitting<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list aviSitters=[];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list npcSitters=[];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;integer l=llGetNumberOfPrims();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (l&gt;0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key who=llGetLinkKey(l);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (llGetAgentSize(who)==ZERO_VECTOR) l=0;&nbsp;&nbsp;// sitters are always last links<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (osIsNpc(who))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;npcSitters=[]+[who]+npcSitters;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (who==npc) linkNpc=l;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aviSitters=[]+[who]+aviSitters;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (who==user) linkUser=l;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l--;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (user==NULL_KEY)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l=llGetListLength(npcSitters);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (--l&gt;=0) { osNpcRemove(llList2Key(npcSitters,l)); }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;npc=NULL_KEY;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (llGetListLength(aviSitters)==0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetClickAction(CLICK_ACTION_SIT); // back to sit as default action<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;&nbsp;&nbsp;&nbsp;&nbsp; // link change triggered by user standing or a change in some other linkset action<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// getting here means a new avi sat<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user=llList2Key(aviSitters,0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osAvatarPlayAnimation(user,baseAn); // initiate base an<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetClickAction(CLICK_ACTION_TOUCH);&nbsp;&nbsp; // now in use so default action should be touch<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string first=" ";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string last=" ";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (userName)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string nameToParse=llList2String(llGetObjectDetails(user,[OBJECT_NAME]),0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list parsedName=llParseString2List(nameToParse,[" ",".","@"],[]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;first=llList2String(parsedName,0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;last=llList2String(parsedName,1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;npc=osNpcCreate(first,last,llGetPos()+&lt;0.0,0.0,1.0&gt;,user);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osAvatarPlayAnimation(npc,baseAn);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osNpcSit(npc,llGetKey(),OS_NPC_SIT_NOW);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// everything else handled when NPC is detected as sitting<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if (user=="ERROR")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l=llGetListLength(npcSitters);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (--l&gt;=0) { osNpcRemove(llList2Key(npcSitters,l)); }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l=llGetListLength(aviSitters);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (--l&gt;=0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llRegionSayTo(llList2Key(aviSitters,l),0,"Sorry, the mirror has encountered an error and needs to be reset");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llUnSit(llList2Key(aviSitters,l));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// we already have a user on record<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (llListFindList(aviSitters,[user])==-1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// but no longer sitting so need to release animations, clear user, and remove NPC<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (llGetAgentSize(user)!=ZERO_VECTOR)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osAvatarPlayAnimation(user,"Stand");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osAvatarStopAnimation(user,llList2Key(poses,anIndex));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osAvatarStopAnimation(user,baseAn);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user=NULL_KEY;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (osIsNpc(npc))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osNpcRemove(npc);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;npc=NULL_KEY;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetClickAction(CLICK_ACTION_SIT); // back to sit as default action<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// make sure someone else didn't sit down when user was set<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l=llGetListLength(aviSitters);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (--l&gt;=0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (llList2Key(aviSitters,l)!=user)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llRegionSayTo(llList2Key(aviSitters,l),0,"Sorry, the mirror is already being used by someone else");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llUnSit(llList2Key(aviSitters,l));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// prevent any NPC from sitting other than the current one on record<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l=llGetListLength(npcSitters);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (--l&gt;=0) { if (llList2Key(npcSitters,l)!=npc) osNpcRemove(llList2Key(npcSitters,l)); }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ((npc!=NULL_KEY) &amp;&amp; osIsNpc(npc))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// most of the time we only get here if a new NPC sat after initial creation so this should trigger start of animation<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// need to wait briefly for base an to kick in<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSleep(0.25);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// then clear any existing AO/sit animations<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key dontStop=llGetInventoryKey(baseAn);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list anToStop=llGetAnimationList(user);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l=llGetListLength(anToStop);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (--l&gt;=0) { if (llList2Key(anToStop,l)!=dontStop) osAvatarStopAnimation(user,llList2Key(anToStop,l)); }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;anToStop=[]+llGetAnimationList(npc);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l=llGetListLength(anToStop);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (--l&gt;=0) { if (llList2Key(anToStop,l)!=dontStop) osAvatarStopAnimation(npc,llList2Key(anToStop,l)); }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// now start the mirrored animations<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osAvatarPlayAnimation(user,llList2String(poses,anIndex));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osAvatarPlayAnimation(npc,llList2String(mirrors,anIndex));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;updatePositions();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</code></div></div><br />
Das Script steht unter Creative Commons Attribution-Non-Commercial-ShareAlike 4.0 International license. <a href="http://ainetutorials.blogspot.de/2015/07/paramour-release-mirror-script.html" target="_blank" rel="noopener" class="mycode_url">http://ainetutorials.blogspot.de/2015/07...cript.html</a>]]></description>
			<content:encoded><![CDATA[Hier ein schönes Mirror Script, wurde von Spike gefunden, werde es mal hier unterbringen, da es im Blog von der Aime ein bisschen unglücklich eingebunden wurrde.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>// Mirror script<br />
// by Aine Caoimhe (c. LACM) July 2015<br />
// Provided under Creative Commons Attribution-Non-Commercial-ShareAlike 4.0 International license.<br />
// Please be sure you read and adhere to the terms of this license: https://creativecommons.org/licenses/by-nc-sa/4.0/<br />
//<br />
// When an avatar sits on an object containing this script the avi will be cloned to an NPC who will also sit<br />
// Paired aniamtions supplied in the object will be played, making it appear as though the NPC is the mirrored user<br />
// If the sitter touches the mirror it will advance to the next pose (if there are more to play)<br />
// when the sitter stands, the NPC is removed<br />
// (Note: if sitter changes appearance during use the NPC will not change to copy that change...it will continue to appear as intiailly rezzed)<br />
//<br />
// Place this script in the ROOT prim which can either be the mirror object itself or ain invisible prim placed at that location.<br />
// It is assumed that the root prim's XZ-plane is the axis to be mirrored<br />
//<br />
// Add animations to the contents of the root prim in pairs where each pair consists of:<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- an animation for the sitter to play<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- an animation that mirrors this, that has the IDENTICAL NAME with " mirror" (including the leading space) added after it<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;example: "sit 1" and "sit 1 mirror"<br />
// DO NOT have a main sitter pose end with the word mirror because it would be interpretted as being a mirror pose and ignored<br />
//<br />
// ***** IF YOU ADD OR REMOVE ANIMATIONS YOU WILL NEED TO RESET THE SCRIPT TO PICK UP THE CHANGES!!! *****<br />
//<br />
// The sitter's pose position is determined by the base sitPos and sitRot settings (see user settings section below) UNLESS you<br />
// overide these for an animation by placing new values in the DESCRIPTION field of the main pose in the format:<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;sitpose&gt;::&lt;sit rot&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;--- note the double colon separator between position and rotation<br />
//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;example:&nbsp;&nbsp;&lt;0.0, 1.0, 0.0&gt;::&lt;0.0, 0.0, 0.0, 1.0&gt;<br />
// at which point the sitter will be moved to that sit target posision instead<br />
//<br />
// In all cases, the clone (mirror NPC) will be positioned exactly 180 rotated around the root prim's LOCAL Z axis<br />
// If you have already rotated the mirror pose animation on axis when creating the mirror and do not need it subequently rotated<br />
// when the clone NPC plays it, set the user variable mirrorRot to FALSE, otherwise leave it TRUE (this applies to all animations played<br />
// so you can't use a mixture of both, sorry)<br />
//<br />
// USER SETTINGS<br />
// use something like the Magic Sit Kit to set the value of these two<br />
integer sayPoseName=TRUE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // TURE = owner will be told the name of the pose each time one is activated, FALSE = mirror will be silent<br />
integer userName=FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // TRUE = NPC will have the sitter's name, FALSE = NPC will have empty name<br />
vector sitPos=&lt;0.0, 1.0, 0.0&gt;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// base sit target position to set for the main sitter relative to the mirror - NPC clone will mirror this position on the opposite side of the mirror<br />
rotation sitRot=&lt;0.0, 0.0, 0.0, 1.0&gt;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // base sit target rotation to set for the main sitter relative to the mirror - NPC clone will mirror this on the opposite side of the mirror<br />
integer mirrorRot=TRUE;&nbsp;&nbsp;&nbsp;&nbsp; // FALSE = the mirror animations you are supplying are already rotated on root; TRUE = they need to be rotated by the script<br />
string baseAn="*****base__stand priority 1";&nbsp;&nbsp;&nbsp;&nbsp;// name of a base priority 1 animation to use for underlying synch (no mirror pose of it is needed)<br />
//<br />
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *<br />
// DO NOT CHANGE ANYTHING BELOW HERE UNLESS YOU KNOW WHAT YOU'RE DOING<br />
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *<br />
list poses;<br />
list mirrors;<br />
integer anIndex;<br />
key user;<br />
key npc;<br />
integer linkNpc;<br />
integer linkUser;<br />
<br />
updatePositions()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;vector pos=sitPos;<br />
&nbsp;&nbsp;&nbsp;&nbsp;rotation rot=sitRot;<br />
&nbsp;&nbsp;&nbsp;&nbsp;// see if this pose requires position override<br />
&nbsp;&nbsp;&nbsp;&nbsp;string posOverride=osGetInventoryDesc(llList2String(poses,anIndex));<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (llSubStringIndex(posOverride,"::")&gt;=0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list orData=llParseString2List(posOverride,["::"],[]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos=llList2Vector(orData,0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rot=llList2Rot(orData,1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;vector size = llGetAgentSize(user);<br />
&nbsp;&nbsp;&nbsp;&nbsp;float fAdjust = ((((0.008906 * size.z) + -0.049831) * size.z) + 0.088967) * size.z;<br />
&nbsp;&nbsp;&nbsp;&nbsp;vector newPos=(pos + &lt;0.0, 0.0, 0.4&gt;) - (llRot2Up(rot) * fAdjust);<br />
&nbsp;&nbsp;&nbsp;&nbsp;llSetLinkPrimitiveParamsFast(linkUser, [PRIM_POS_LOCAL,newPos,PRIM_ROT_LOCAL, rot]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;newPos.y=-newPos.y;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (mirrorRot)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vector aviRot=llRot2Euler(rot);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aviRot.z=-aviRot.z;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aviRot.x=-aviRot.x;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rot =llEuler2Rot(aviRot);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;llSetLinkPrimitiveParamsFast(linkNpc, [PRIM_POS_LOCAL,newPos,PRIM_ROT_LOCAL, rot]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (sayPoseName) llOwnerSay("New pose: "+llList2String(poses,anIndex));<br />
}<br />
buildPoseList()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;list an;<br />
&nbsp;&nbsp;&nbsp;&nbsp;poses=[];<br />
&nbsp;&nbsp;&nbsp;&nbsp;mirrors=[];<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer i=llGetInventoryNumber(INVENTORY_ANIMATION);<br />
&nbsp;&nbsp;&nbsp;&nbsp;while (--i&gt;=0) { an=[]+[llGetInventoryName(INVENTORY_ANIMATION,i)]+an; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;i=llListFindList(an,[baseAn]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (i==-1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llOwnerSay("ERROR! Unable to locate the base priototy 1 aniamtion: "+baseAn);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user="ERROR";<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else an=[]+llDeleteSubList(an,i,i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;i=llGetListLength(an);<br />
&nbsp;&nbsp;&nbsp;&nbsp;while (--i&gt;=0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string name=llList2String(an,i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (llGetSubString(name,-7,-1)!=" mirror")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;integer m=llListFindList(an,[name+" mirror"]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (m==-1) llOwnerSay("WARNING: found an animation with the name &#92;""+name+"&#92;" but no matching animation was located");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;poses=[]+[name]+poses;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mirrors=[]+[name+" mirror"]+mirrors;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;// double-check even though mismatch ought to be impossible;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (llGetListLength(poses)!=llGetListLength(mirrors))<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llOwnerSay("ERROR! Somehow build pose and mirror lists with mismatched lengths. Dump of data:&#92;n&#92;nPOSES: "+llDumpList2String(poses,", ")+"&#92;nMIRRORS: "+llDumpList2String(mirrors,", "));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user="ERROR";<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;anIndex=0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (llGetListLength(poses)==1) llOwnerSay("Pose list built. Found only 1 mirrored pose in inventory so disabling touch advance");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else llOwnerSay("Pose list built. Found "+(string)llGetListLength(poses)+" mirrored pose in inventory");<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
cleanSitters()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;user=NULL_KEY;<br />
&nbsp;&nbsp;&nbsp;&nbsp;npc=NULL_KEY;<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer l=llGetNumberOfPrims();<br />
&nbsp;&nbsp;&nbsp;&nbsp;while (l&gt;0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key who=llGetLinkKey(l);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (llGetAgentSize(who)==ZERO_VECTOR) l=0; // agents are always the last link numbers<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (osIsNpc(who)) osNpcRemove(who);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llRegionSayTo(who,0,"Sorry, the system has been reset so you will need to sit down again");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llUnSit(who);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l--;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
default<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;state_entry()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buildPoseList();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSitTarget(&lt;0.0, 0.0, 0.000001&gt;,ZERO_ROTATION);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetClickAction(CLICK_ACTION_SIT);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (user=="ERROR") llOwnerSay("Cannot active device until animation list building errors are correct");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else cleanSitters();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;on_rez(integer foo)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llResetScript();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;touch_start(integer num)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key who=llDetectedKey(0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (who!=user)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (user==NULL_KEY) llRegionSayTo(who,0,"Please sit on me to use me");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else llRegionSayTo(who,0,"Sorry, only the current user can touch me");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (llGetListLength(poses)==1) return;&nbsp;&nbsp; // with only 1 pose no changing<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osAvatarStopAnimation(user,llList2String(poses,anIndex));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osAvatarStopAnimation(npc,llList2String(mirrors,anIndex));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;anIndex++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (anIndex&gt;=llGetListLength(poses)) anIndex=0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osAvatarPlayAnimation(user,llList2String(poses,anIndex));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osAvatarPlayAnimation(npc,llList2String(mirrors,anIndex));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;updatePositions();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;changed (integer change)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (change &amp; CHANGED_OWNER) llResetScript();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (change &amp; CHANGED_REGION_START) llResetScript();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (change &amp; CHANGED_INVENTORY) llOwnerSay("Detected a change in inventory. Remember to reset the script if you have changed the animations");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (change &amp; CHANGED_LINK)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// find out who is currently sitting<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list aviSitters=[];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list npcSitters=[];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;integer l=llGetNumberOfPrims();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (l&gt;0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key who=llGetLinkKey(l);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (llGetAgentSize(who)==ZERO_VECTOR) l=0;&nbsp;&nbsp;// sitters are always last links<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (osIsNpc(who))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;npcSitters=[]+[who]+npcSitters;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (who==npc) linkNpc=l;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aviSitters=[]+[who]+aviSitters;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (who==user) linkUser=l;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l--;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (user==NULL_KEY)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l=llGetListLength(npcSitters);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (--l&gt;=0) { osNpcRemove(llList2Key(npcSitters,l)); }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;npc=NULL_KEY;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (llGetListLength(aviSitters)==0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetClickAction(CLICK_ACTION_SIT); // back to sit as default action<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;&nbsp;&nbsp;&nbsp;&nbsp; // link change triggered by user standing or a change in some other linkset action<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// getting here means a new avi sat<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user=llList2Key(aviSitters,0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osAvatarPlayAnimation(user,baseAn); // initiate base an<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetClickAction(CLICK_ACTION_TOUCH);&nbsp;&nbsp; // now in use so default action should be touch<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string first=" ";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string last=" ";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (userName)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string nameToParse=llList2String(llGetObjectDetails(user,[OBJECT_NAME]),0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list parsedName=llParseString2List(nameToParse,[" ",".","@"],[]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;first=llList2String(parsedName,0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;last=llList2String(parsedName,1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;npc=osNpcCreate(first,last,llGetPos()+&lt;0.0,0.0,1.0&gt;,user);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osAvatarPlayAnimation(npc,baseAn);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osNpcSit(npc,llGetKey(),OS_NPC_SIT_NOW);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// everything else handled when NPC is detected as sitting<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if (user=="ERROR")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l=llGetListLength(npcSitters);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (--l&gt;=0) { osNpcRemove(llList2Key(npcSitters,l)); }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l=llGetListLength(aviSitters);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (--l&gt;=0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llRegionSayTo(llList2Key(aviSitters,l),0,"Sorry, the mirror has encountered an error and needs to be reset");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llUnSit(llList2Key(aviSitters,l));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// we already have a user on record<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (llListFindList(aviSitters,[user])==-1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// but no longer sitting so need to release animations, clear user, and remove NPC<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (llGetAgentSize(user)!=ZERO_VECTOR)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osAvatarPlayAnimation(user,"Stand");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osAvatarStopAnimation(user,llList2Key(poses,anIndex));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osAvatarStopAnimation(user,baseAn);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user=NULL_KEY;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (osIsNpc(npc))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osNpcRemove(npc);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;npc=NULL_KEY;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetClickAction(CLICK_ACTION_SIT); // back to sit as default action<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// make sure someone else didn't sit down when user was set<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l=llGetListLength(aviSitters);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (--l&gt;=0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (llList2Key(aviSitters,l)!=user)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llRegionSayTo(llList2Key(aviSitters,l),0,"Sorry, the mirror is already being used by someone else");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llUnSit(llList2Key(aviSitters,l));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// prevent any NPC from sitting other than the current one on record<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l=llGetListLength(npcSitters);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (--l&gt;=0) { if (llList2Key(npcSitters,l)!=npc) osNpcRemove(llList2Key(npcSitters,l)); }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ((npc!=NULL_KEY) &amp;&amp; osIsNpc(npc))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// most of the time we only get here if a new NPC sat after initial creation so this should trigger start of animation<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// need to wait briefly for base an to kick in<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSleep(0.25);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// then clear any existing AO/sit animations<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key dontStop=llGetInventoryKey(baseAn);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list anToStop=llGetAnimationList(user);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l=llGetListLength(anToStop);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (--l&gt;=0) { if (llList2Key(anToStop,l)!=dontStop) osAvatarStopAnimation(user,llList2Key(anToStop,l)); }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;anToStop=[]+llGetAnimationList(npc);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l=llGetListLength(anToStop);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (--l&gt;=0) { if (llList2Key(anToStop,l)!=dontStop) osAvatarStopAnimation(npc,llList2Key(anToStop,l)); }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// now start the mirrored animations<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osAvatarPlayAnimation(user,llList2String(poses,anIndex));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osAvatarPlayAnimation(npc,llList2String(mirrors,anIndex));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;updatePositions();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</code></div></div><br />
Das Script steht unter Creative Commons Attribution-Non-Commercial-ShareAlike 4.0 International license. <a href="http://ainetutorials.blogspot.de/2015/07/paramour-release-mirror-script.html" target="_blank" rel="noopener" class="mycode_url">http://ainetutorials.blogspot.de/2015/07...cript.html</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Lampen(u. Feuer)script u. Dämmerungsschalter]]></title>
			<link>https://www.gridtalk.de/showthread.php?tid=1682</link>
			<pubDate>Mon, 13 Jul 2015 21:38:13 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://www.gridtalk.de/member.php?action=profile&uid=850">MoniTill</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.gridtalk.de/showthread.php?tid=1682</guid>
			<description><![CDATA[„Wenn man denkt es geht nicht mehr, kommt irgendwo ein Lichtlein her“ <img src="https://www.gridtalk.de/images/smilies/smile.gif" alt="Smile" title="Smile" class="smilie smilie_1" onclick="&#36;.markItUp({target:markitup_instance,replaceWith:''});&#36;.modal.close()" /><br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.gridtalk.de/images/attachtypes/image.gif" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=747" target="_blank" title="">lichtlein.jpg</a> (Größe: 17,19 KB / Downloads: 769)
<!-- end: postbit_attachments_attachment --><br />
Ich liebe ja so Lichtspielereien^^ u. da sich meine beiden kleinen Scriptchen recht gut in der Praxis bewährt haben, setze ich sie mal hier rein.<br />
<br />
Das Lampenscript:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>//****** Use this for a Region-Light Control ****<br />
integer RegContchannel =1238;<br />
string RegContOn ="on";<br />
string RegContOff ="off";<br />
// **********************************************<br />
<br />
// Licht-Script<br />
// MoniTill<br />
<br />
// Lizenz: Gemeinfrei (Public domain)<br />
<br />
vector lightcolor = &lt;1.000, 0.757, 0.514&gt;;&nbsp;&nbsp;&nbsp;&nbsp;// The Color of the flame a lit. bit yellow <br />
integer lightObj =1;&nbsp;&nbsp; // The Flame/Light Object in the Linkset<br />
<br />
<br />
integer onoff=0; <br />
<br />
ligton()<br />
 {<br />
 llSetLinkPrimitiveParams(lightObj,[ PRIM_GLOW, ALL_SIDES, 0.21 ] );&nbsp;&nbsp;<br />
 llSetLinkPrimitiveParams(lightObj,[PRIM_FULLBRIGHT,ALL_SIDES,TRUE,PRIM_POINT_LIGHT, TRUE,&nbsp;&nbsp;lightcolor, 1.0, 10.0, 0.75]); <br />
// llSetLinkAlpha(lightObj, 0.34, ALL_SIDES);&nbsp;&nbsp;&nbsp;&nbsp;// Delete this for a normal Lamp<br />
 onoff = 1;<br />
 }<br />
<br />
ligtoff()<br />
 {<br />
 llSetLinkPrimitiveParams(lightObj,[ PRIM_GLOW, ALL_SIDES, 0 ] );&nbsp;&nbsp;<br />
 llSetLinkPrimitiveParams(lightObj,[PRIM_FULLBRIGHT,ALL_SIDES,FALSE,PRIM_POINT_LIGHT, FALSE,lightcolor, 1.0, 10.0, 0.75 ]); <br />
 //llSetLinkAlpha(lightObj, 0.00, ALL_SIDES);&nbsp;&nbsp;&nbsp;&nbsp;// Delete this for a normal Lamp<br />
 onoff = 0;&nbsp;&nbsp;<br />
 }<br />
<br />
default<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;state_entry()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;integer handle = llListen( RegContchannel, "", "", "" );&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;touch_start(integer total_number)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (onoff == 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ligton();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ligtoff();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;listen(integer RegContchannel, string name, key id, string message)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (message == RegContOn)&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ligton();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (message == RegContOff)&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ligtoff();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}</code></div></div><br />
Man trägt bei  „integer lightObj =“ die Nummer des Objektes aus dem Linkset ein, welches das Leuchtmittel ist.<br />
Falls das Leuchtmittel ein Feuer (wie zB bei einer Kerze) ist, einfach bei den beiden  //llSetLinkAlpha .. Zeilen die Kommentarslashes entfernen, dann wird die Flamme beim abschalten unsichtbar.<br />
Man kann die Lampe von Hand schalten und/oder über eine Regionskontrolle. <br />
<br />
Diese kommt hier.  Das ist ein Regionsweiter Dämmerungsschalter, der bei Sonnenhöhe 0.1 (Abends wenn es anfängt zu dämmern oder Morgens im Morgengrauen) die Lampen an bzw. ab schaltet.  Und das geschieht nur einmal Abends u. Morgens. Wenn man sich ein Kerzchen angemacht hat, bläst einem das Teil diese nicht 5 min später wieder aus... <img src="https://www.gridtalk.de/images/smilies/smile.gif" alt="Smile" title="Smile" class="smilie smilie_1" onclick="&#36;.markItUp({target:markitup_instance,replaceWith:''});&#36;.modal.close()" />   Ist auch praktisch, wenn man am Sim Tag ein Nachtfoto machen will, dann kann man damit alle Lampen für kurze Zeit anschalten. Das Ding packt man einmal pro Region in ein Objekt.  In der Gridtalk Region ist es der Nistkasten an der Birke bei der Holzbrücke. In Degol findet man das Ding im ersten Shop.<br />
<br />
Ich habe das auch deshalb absichtlich getrennt, weil es per Timer die Höhe abfragt und somit mehr Ressourcen fordert als die Lampenscripte, die solange ruhen bis sie jemand anklickt oder eine Nachricht über ihren Kanal kommt.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>// Lichtschalter&nbsp;&nbsp; V1&nbsp;&nbsp;<br />
<br />
float schaltzeit = 0.1 ;<br />
integer RegContchannel =1238;<br />
integer onoff = 0;<br />
<br />
<br />
default<br />
{<br />
&nbsp;&nbsp; state_entry()<br />
&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp; llSetTimerEvent(300);<br />
&nbsp;&nbsp; }<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; timer()<br />
&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp; vector sun = llGetSunDirection();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; if (sun.z &lt;= schaltzeit &amp;&amp; onoff == 0 )<br />
&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; llRegionSay(RegContchannel,"on");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onoff = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (sun.z &gt; schaltzeit &amp;&amp; onoff == 1)<br />
&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; llRegionSay(RegContchannel,"off");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onoff = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp; touch_start(integer total_number)<br />
&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (onoff == 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; llRegionSay(RegContchannel,"on");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onoff = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; llRegionSay(RegContchannel,"off");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onoff = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp; <br />
<br />
&nbsp;&nbsp; <br />
}</code></div></div>]]></description>
			<content:encoded><![CDATA[„Wenn man denkt es geht nicht mehr, kommt irgendwo ein Lichtlein her“ <img src="https://www.gridtalk.de/images/smilies/smile.gif" alt="Smile" title="Smile" class="smilie smilie_1" onclick="&#36;.markItUp({target:markitup_instance,replaceWith:''});&#36;.modal.close()" /><br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.gridtalk.de/images/attachtypes/image.gif" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=747" target="_blank" title="">lichtlein.jpg</a> (Größe: 17,19 KB / Downloads: 769)
<!-- end: postbit_attachments_attachment --><br />
Ich liebe ja so Lichtspielereien^^ u. da sich meine beiden kleinen Scriptchen recht gut in der Praxis bewährt haben, setze ich sie mal hier rein.<br />
<br />
Das Lampenscript:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>//****** Use this for a Region-Light Control ****<br />
integer RegContchannel =1238;<br />
string RegContOn ="on";<br />
string RegContOff ="off";<br />
// **********************************************<br />
<br />
// Licht-Script<br />
// MoniTill<br />
<br />
// Lizenz: Gemeinfrei (Public domain)<br />
<br />
vector lightcolor = &lt;1.000, 0.757, 0.514&gt;;&nbsp;&nbsp;&nbsp;&nbsp;// The Color of the flame a lit. bit yellow <br />
integer lightObj =1;&nbsp;&nbsp; // The Flame/Light Object in the Linkset<br />
<br />
<br />
integer onoff=0; <br />
<br />
ligton()<br />
 {<br />
 llSetLinkPrimitiveParams(lightObj,[ PRIM_GLOW, ALL_SIDES, 0.21 ] );&nbsp;&nbsp;<br />
 llSetLinkPrimitiveParams(lightObj,[PRIM_FULLBRIGHT,ALL_SIDES,TRUE,PRIM_POINT_LIGHT, TRUE,&nbsp;&nbsp;lightcolor, 1.0, 10.0, 0.75]); <br />
// llSetLinkAlpha(lightObj, 0.34, ALL_SIDES);&nbsp;&nbsp;&nbsp;&nbsp;// Delete this for a normal Lamp<br />
 onoff = 1;<br />
 }<br />
<br />
ligtoff()<br />
 {<br />
 llSetLinkPrimitiveParams(lightObj,[ PRIM_GLOW, ALL_SIDES, 0 ] );&nbsp;&nbsp;<br />
 llSetLinkPrimitiveParams(lightObj,[PRIM_FULLBRIGHT,ALL_SIDES,FALSE,PRIM_POINT_LIGHT, FALSE,lightcolor, 1.0, 10.0, 0.75 ]); <br />
 //llSetLinkAlpha(lightObj, 0.00, ALL_SIDES);&nbsp;&nbsp;&nbsp;&nbsp;// Delete this for a normal Lamp<br />
 onoff = 0;&nbsp;&nbsp;<br />
 }<br />
<br />
default<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;state_entry()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;integer handle = llListen( RegContchannel, "", "", "" );&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;touch_start(integer total_number)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (onoff == 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ligton();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ligtoff();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;listen(integer RegContchannel, string name, key id, string message)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (message == RegContOn)&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ligton();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (message == RegContOff)&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ligtoff();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}</code></div></div><br />
Man trägt bei  „integer lightObj =“ die Nummer des Objektes aus dem Linkset ein, welches das Leuchtmittel ist.<br />
Falls das Leuchtmittel ein Feuer (wie zB bei einer Kerze) ist, einfach bei den beiden  //llSetLinkAlpha .. Zeilen die Kommentarslashes entfernen, dann wird die Flamme beim abschalten unsichtbar.<br />
Man kann die Lampe von Hand schalten und/oder über eine Regionskontrolle. <br />
<br />
Diese kommt hier.  Das ist ein Regionsweiter Dämmerungsschalter, der bei Sonnenhöhe 0.1 (Abends wenn es anfängt zu dämmern oder Morgens im Morgengrauen) die Lampen an bzw. ab schaltet.  Und das geschieht nur einmal Abends u. Morgens. Wenn man sich ein Kerzchen angemacht hat, bläst einem das Teil diese nicht 5 min später wieder aus... <img src="https://www.gridtalk.de/images/smilies/smile.gif" alt="Smile" title="Smile" class="smilie smilie_1" onclick="&#36;.markItUp({target:markitup_instance,replaceWith:''});&#36;.modal.close()" />   Ist auch praktisch, wenn man am Sim Tag ein Nachtfoto machen will, dann kann man damit alle Lampen für kurze Zeit anschalten. Das Ding packt man einmal pro Region in ein Objekt.  In der Gridtalk Region ist es der Nistkasten an der Birke bei der Holzbrücke. In Degol findet man das Ding im ersten Shop.<br />
<br />
Ich habe das auch deshalb absichtlich getrennt, weil es per Timer die Höhe abfragt und somit mehr Ressourcen fordert als die Lampenscripte, die solange ruhen bis sie jemand anklickt oder eine Nachricht über ihren Kanal kommt.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>// Lichtschalter&nbsp;&nbsp; V1&nbsp;&nbsp;<br />
<br />
float schaltzeit = 0.1 ;<br />
integer RegContchannel =1238;<br />
integer onoff = 0;<br />
<br />
<br />
default<br />
{<br />
&nbsp;&nbsp; state_entry()<br />
&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp; llSetTimerEvent(300);<br />
&nbsp;&nbsp; }<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; timer()<br />
&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp; vector sun = llGetSunDirection();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; if (sun.z &lt;= schaltzeit &amp;&amp; onoff == 0 )<br />
&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; llRegionSay(RegContchannel,"on");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onoff = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (sun.z &gt; schaltzeit &amp;&amp; onoff == 1)<br />
&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; llRegionSay(RegContchannel,"off");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onoff = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp; touch_start(integer total_number)<br />
&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (onoff == 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; llRegionSay(RegContchannel,"on");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onoff = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; llRegionSay(RegContchannel,"off");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onoff = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp; <br />
<br />
&nbsp;&nbsp; <br />
}</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Ein Wau Wau Script aus SL als Open Source]]></title>
			<link>https://www.gridtalk.de/showthread.php?tid=1402</link>
			<pubDate>Sun, 19 Oct 2014 22:46:46 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://www.gridtalk.de/member.php?action=profile&uid=2">Bogus Curry</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.gridtalk.de/showthread.php?tid=1402</guid>
			<description><![CDATA[Hab was aufgeschnappt ;D<br />
<br />
Ein <a href="https://marketplace.secondlife.com/p/Open-Source-Serenity-Script-Breedable-System/4737238?id=4737238&amp;slug=Open-Source-Serenity-Script-Breedable-System" target="_blank" rel="noopener" class="mycode_url">Dog Script aus SL als Open Source</a>, leider muss man dafür ins SL ...<br />
<br />
Es ist einer dieser Breedable System, keine Ahnung ob er in OpenSim läuft. Auf WhiteCore Sim region läuft er ...<br />
<br />
<a href="https://plus.google.com/u/0/103855501842725624494/posts/V593oe2XAta" target="_blank" rel="noopener" class="mycode_url">https://plus.google.com/u/0/103855501842...593oe2XAta</a>]]></description>
			<content:encoded><![CDATA[Hab was aufgeschnappt ;D<br />
<br />
Ein <a href="https://marketplace.secondlife.com/p/Open-Source-Serenity-Script-Breedable-System/4737238?id=4737238&amp;slug=Open-Source-Serenity-Script-Breedable-System" target="_blank" rel="noopener" class="mycode_url">Dog Script aus SL als Open Source</a>, leider muss man dafür ins SL ...<br />
<br />
Es ist einer dieser Breedable System, keine Ahnung ob er in OpenSim läuft. Auf WhiteCore Sim region läuft er ...<br />
<br />
<a href="https://plus.google.com/u/0/103855501842725624494/posts/V593oe2XAta" target="_blank" rel="noopener" class="mycode_url">https://plus.google.com/u/0/103855501842...593oe2XAta</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Intercom - neu]]></title>
			<link>https://www.gridtalk.de/showthread.php?tid=1264</link>
			<pubDate>Wed, 14 May 2014 09:51:51 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://www.gridtalk.de/member.php?action=profile&uid=10">Rebekka Revnik</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.gridtalk.de/showthread.php?tid=1264</guid>
			<description><![CDATA[Auf vielfachen Wunsch eines einzelnen Herren <img src="https://www.gridtalk.de/images/smilies/biggrin.gif" alt="Big Grin" title="Big Grin" class="smilie smilie_4" onclick="&#36;.markItUp({target:markitup_instance,replaceWith:''});&#36;.modal.close()" /> hier mal die 3 Skripte, die für ein gridübergreifendes Chatsystem nötig sind. Als Basis diente das Intercom von Kira Komarov, leider ist das fehlerhaft so dass ichs umgeschrieben hab. Steht eigenlich alles im Skript drin, ansonsten einfach fragen :-)<br />
<br />
EDIT: Hatte leider noch eine Zeile auskommentiert, nun ist es besser.<br />
EDIT2: Löschen von ungültigen URLs korrigiert, leider mit minderem Erfolg. Siehe Script-Forum.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>// Part of Intercom Chat Relay (1/3)<br />
// Original Idea from Kira Komarov<br />
// Rewritten by Rebbeka Revnik<br />
<br />
// Funktion:<br />
// Gibt den öffentlichen Chat von anderen URL Relays aus (nur von Avas)<br />
// Funktioniert auch über Sim- und Grid-Grenzen<br />
// Dazu gehören die Skripte url relay, message relay, chat plugin<br />
// Diese müssen alle in ein Objekt, eventuell noch die access Notecard dazu<br />
// Wie es funktioniert:<br />
// Intercom Passwort<br />
// 1. Denk dir ein Passwort aus oder...<br />
// 2.1. Geh auf die Seite http://www.md5hashgenerator.com/index.php<br />
// 2.2. Lass dir da eine Hash Summe generieren, die du als Passwort benutzt<br />
// 3. Trage das Passwort unten bei INTERCOM_PASSWORD zwischen die Anführungsstriche ein<br />
// 4. Nur die URL Relays mit dem gleichen Passwort können miteinander kommunizieren<br />
//&nbsp;&nbsp;&nbsp;&nbsp;Also kann man auch mehrere Systeme parallel betreiben, wenn sie über unterschiedliche Passwörter verfügen<br />
// Zugang:<br />
// 1. Erstelle eine NC namens access<br />
// 2. Trage da die Namen ein die das URL Relay bedienen dürfen<br />
// 3. Lege sie in das Objekt mit den Skripten<br />
// 4. Das sollte man tun bevor die URLs eingetragen/abgerufen wurden, sonst darf man alles nochmal machen, weil dadurch das Skript zurück gesetzt wird<br />
//&nbsp;&nbsp;&nbsp;&nbsp;Standardmässig hat nur der Eigentümer Zugriff<br />
// URLs:<br />
// 1. Jedes URL Relay erhält beim Rezzen/Sim-Restart/Sim-Wechsel automatisch eine neue URL<br />
// 2. Diese URLs müssen bei jedem URL Relay durch Anklicken und My URL abgerufen werden<br />
// 3. Ein URL Relay (es reicht eins) erhält nun die URLs der anderen durch Anklicken und Add URL<br />
// 4. Nach einer Weile (SYNC_TIME * Anzahl der URL Relays) bekommen diese URLs auch die anderen Relays<br />
// 5. Das wirkt auch bei Rezzen/Sim-Restart/Sim-Wechsel, aber nicht bei Ändern/Zurücksetzen des Skripts<br />
//&nbsp;&nbsp;&nbsp;&nbsp;Dann muss die URL erneut aufgenommen und eingetragen werden<br />
//&nbsp;&nbsp;&nbsp;&nbsp;Falls es das Relay war wo alle anderen URLs eingetragen wurden, muss man Punkt 2 und 3 wiederholen<br />
// Chat:<br />
// 1. Das Chat Plugin nimmt den Chat auf<br />
//&nbsp;&nbsp;&nbsp;&nbsp;Falls es sich nicht um Objekte handelt sendet es den Chat an das URL Relay<br />
//&nbsp;&nbsp;&nbsp;&nbsp;/me wird dabei in den Namen umgewandelt<br />
// 2. Das URL Relay sendet den Chat an das das Message Relay, zusammen mit den gespeicherten URLs ausser der eigenen<br />
// 3. Das Message Relay sendet nun den Chat an alle übergebenen URLs<br />
// 4. Jedes angeschlossene URL Relay gibt den Chat aus, ohne den Objekt-Namen davor<br />
//&nbsp;&nbsp;&nbsp;&nbsp;Aber nur falls es auch eingeschaltet ist, standardmässig ist es Off<br />
<br />
// Hinweis: Im OS muss möglicherweise die OpenSim.ini geändert werden<br />
// Dazu muss im Abschnitt [Network] in der Zeile<br />
// user_agent = "OpenSim LSL (Mozilla Compatible)"<br />
// das führende Semikolon entfernt und die Sim neu gestartet werden<br />
<br />
string INTERCOM_PASSWORD = "";<br />
string NCNAME = "access";<br />
// Language = 0 German/Deutsch<br />
// Language = 1 English/Englisch<br />
integer Language = 0;<br />
<br />
integer SYNC_TIME = 10;<br />
<br />
integer BROADCAST = 1000;<br />
integer SEND = 1001;<br />
<br />
string MyURL;<br />
list URLs;<br />
list URLs1;<br />
list URLs2;<br />
integer IntercomOn;<br />
key User;<br />
list Access;<br />
integer NCLine;<br />
key NCid;<br />
integer Listener;<br />
integer Handle;<br />
<br />
Menu()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;string s = "Options description:&#92;n&#92;nAdd URL: Use this to add new Intercoms.&#92;n"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "My URL: Use this to get the address of this Intercom.&#92;n"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "List URLs: Use this to list all the linked intercoms.&#92;n"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "Reset: Use this to permanently reset the current Intercom since resetting "<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "maybe it looses the contact to other Intercoms.&#92;n"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "On/Off: This will turn the intercom on and off. It will remain connected "<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "to the network but will not receive or broadcast messages.";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string s1 = "Beschreibung der Optionen&#92;n&#92;nAdd URL: URLs von anderen Intercoms hinzufügen&#92;n"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "My URL: Ruft die eigene URL ab&#92;n"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "List URLs: Listet alle verbundenen Intercom-URLs auf&#92;n"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "Reset: Setzt das Intercom zurück "<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "und kann dadurch den Kontakt zu anderen Intercoms verlieren&#92;n"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "On/Off: Schaltet das Intercom ein/aus, bleibt aber verbunden, "<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "sendet oder empfängt aber keine Nachrichten mehr";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list l = ["Add URL", "My URL", "List URLs", "Reset", "On", "Off"];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;integer Channel = (integer)llFrand(99999) + 999;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Listener = llListen(Channel, "", User, "");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Language == 1) llDialog(User, s, l, Channel);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else llDialog(User, s1, l, Channel);<br />
}<br />
<br />
NewURL()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer x = llListFindList(URLs, [MyURL]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(x != -1) URLs = llDeleteSubList(URLs, x, x);<br />
&nbsp;&nbsp;&nbsp;&nbsp;x = llListFindList(URLs1, [MyURL]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(x != -1) URLs1 = llDeleteSubList(URLs1, x, x);<br />
&nbsp;&nbsp;&nbsp;&nbsp;x = llListFindList(URLs2, [MyURL]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(x != -1) URLs2 = llDeleteSubList(URLs2, x, x);<br />
&nbsp;&nbsp;&nbsp;&nbsp;llReleaseURL(MyURL);<br />
&nbsp;&nbsp;&nbsp;&nbsp;MyURL = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;llRequestURL();<br />
}<br />
<br />
Say(string s)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;string s1 = llGetObjectName();<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer x = llSubStringIndex(s, " ");<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(x != -1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string s2 = llGetSubString(s, 0, x - 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s = llDeleteSubString(s, 0, x -1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s = "/me" + s;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetObjectName(s2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;llSay(0, s);<br />
&nbsp;&nbsp;&nbsp;&nbsp;llSetObjectName(s1);<br />
}<br />
<br />
integer HasAccess(key k)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(k == llGetOwner()) return TRUE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;string s = llKey2Name(k);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(llListFindList(Access, [s]) != -1) return TRUE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<br />
}<br />
<br />
default<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;on_rez(integer param)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NewURL();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;changed(integer change)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (change &amp; (CHANGED_REGION_START | CHANGED_REGION)) NewURL();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(change &amp; CHANGED_INVENTORY) llResetScript();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;state_entry()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IntercomOn = FALSE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NewURL();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetTimerEvent(SYNC_TIME);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NCLine = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(llGetInventoryType(NCNAME) == INVENTORY_NOTECARD) NCid = llGetNotecardLine(NCNAME, NCLine++);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;http_request(key id, string method, string body)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (method == URL_REQUEST_GRANTED)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyURL = body;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URLs += [body];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (method == URL_REQUEST_DENIED)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NewURL();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (method == "POST")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list l = llParseString2List(body, [" "], [""]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(llList2String(l, 1) != INTERCOM_PASSWORD) return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(llListFindList(URLs, [llList2String(l, 0)]) != -1) return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URLs += [llList2String(l, 0)];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llHTTPResponse(id, 200, "OK");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (method == "PUT")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!IntercomOn) return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Say(body);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llHTTPResponse(id, 200, "OK");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;http_response(key id, integer status, list metadata, string body)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (status &gt;= 400 &amp;&amp; status &lt;= 404)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;integer i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i = 0; i &lt; llGetListLength(URLs); i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (llSubStringIndex(body, llList2String(URLs, i)) != -1) URLs = llDeleteSubList(URLs, i, i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i = 0; i &lt; llGetListLength(URLs1); i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (llSubStringIndex(body, llList2String(URLs1, i)) != -1) URLs1 = llDeleteSubList(URLs1, i, i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i = 0; i &lt; llGetListLength(URLs2); i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (llSubStringIndex(body, llList2String(URLs2, i)) != -1) URLs2 = llDeleteSubList(URLs2, i, i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;link_message(integer sender_num, integer num, string str, key id)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!IntercomOn || num != BROADCAST) return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;integer x = llListFindList(URLs, [MyURL]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list l = llDeleteSubList(URLs, x, x);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (llGetListLength(l) == 0) return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llMessageLinked(LINK_THIS, SEND, llList2CSV(l), str);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;timer()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetTimerEvent((float)FALSE);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (llGetListLength(URLs1) == 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URLs1 = URLs;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URLs2 = llDeleteSubList(URLs2, 0, 0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (llGetListLength(URLs2) == 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URLs2 = URLs;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(llList2String(URLs1, 0) != "" &amp;&amp; llList2String(URLs2, 0) != "")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llHTTPRequest(llList2String(URLs1, 0),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[HTTP_METHOD, "POST"],<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llList2String(URLs2, 0) + " " + INTERCOM_PASSWORD);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URLs1 = llDeleteSubList(URLs1, 0, 0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetTimerEvent(SYNC_TIME);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;dataserver(key requested, string data)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(requested == NCid)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(data != EOF)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data = llStringTrim(data, STRING_TRIM);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(data != "") Access += [data];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NCid = llGetNotecardLine(NCNAME, NCLine++);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;listen(integer channel, string name, key id, string message)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llListenRemove(Listener);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llListenRemove(Handle);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(message == "On")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IntercomOn = TRUE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Language == 1) llInstantMessage(id, "Intercom is now: ON");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else llInstantMessage(id, "Intercom ist nun: AN");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(message == "Off")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IntercomOn = FALSE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Language == 1) llInstantMessage(id, "Intercom is now: OFF");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else llInstantMessage(id, "Intercom ist nun: AUS");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(message == "My URL")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (MyURL == "")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Language == 1) llInstantMessage(id, "I don't have an URL registered yet.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else llInstantMessage(id, "Ich habe noch keine registrierte URL.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Language == 1) llInstantMessage(id, "My URL is: " + MyURL);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else llInstantMessage(id, "Meine URL lautet: " + MyURL);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(message == "Add URL")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Language == 1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llInstantMessage(id, "Please paste an URL on channel " + (string)89<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ " in order to register it with the system by typing:&#92;n/" + (string)89<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ " URL&#92;nWhere URL is the URL of another intercom.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llInstantMessage(id, "Bitte kopiere eine URL auf Kanal " + (string)89<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ ", um die URL im System zu registrieren. Tippe dazu &#92;n/" + (string)89<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ " URL&#92;n wobei URL die URL eines anderen Intercoms ist.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Handle = llListen(89, "", id, "");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(message == "List URLs")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(llGetListLength(URLs) == 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Language == 1) llInstantMessage(id, "No URLs registered.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else llInstantMessage(id, "Es sind keine URLs registriert.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;integer i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i = 0; i &lt; llGetListLength(URLs); i++) llSay(0, llList2String(URLs, i));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(message == "Reset")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetTimerEvent(0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llResetScript();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(channel == 89)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message = llStringTrim(message, STRING_TRIM);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(message == "") return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(llListFindList(URLs, [message]) != -1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Language == 1) llInstantMessage(id, "URL already exists.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else llInstantMessage(id, "Dies URL gibt es bereits.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URLs += [message];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Language == 1) llInstantMessage(id, "URL: " + message + " has been registered.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else llInstantMessage(id, "URL: " + message + " wurde registriert.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;touch_start(integer total_number)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User = llDetectedKey(0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(HasAccess(User)) Menu();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</code></div></div>]]></description>
			<content:encoded><![CDATA[Auf vielfachen Wunsch eines einzelnen Herren <img src="https://www.gridtalk.de/images/smilies/biggrin.gif" alt="Big Grin" title="Big Grin" class="smilie smilie_4" onclick="&#36;.markItUp({target:markitup_instance,replaceWith:''});&#36;.modal.close()" /> hier mal die 3 Skripte, die für ein gridübergreifendes Chatsystem nötig sind. Als Basis diente das Intercom von Kira Komarov, leider ist das fehlerhaft so dass ichs umgeschrieben hab. Steht eigenlich alles im Skript drin, ansonsten einfach fragen :-)<br />
<br />
EDIT: Hatte leider noch eine Zeile auskommentiert, nun ist es besser.<br />
EDIT2: Löschen von ungültigen URLs korrigiert, leider mit minderem Erfolg. Siehe Script-Forum.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>// Part of Intercom Chat Relay (1/3)<br />
// Original Idea from Kira Komarov<br />
// Rewritten by Rebbeka Revnik<br />
<br />
// Funktion:<br />
// Gibt den öffentlichen Chat von anderen URL Relays aus (nur von Avas)<br />
// Funktioniert auch über Sim- und Grid-Grenzen<br />
// Dazu gehören die Skripte url relay, message relay, chat plugin<br />
// Diese müssen alle in ein Objekt, eventuell noch die access Notecard dazu<br />
// Wie es funktioniert:<br />
// Intercom Passwort<br />
// 1. Denk dir ein Passwort aus oder...<br />
// 2.1. Geh auf die Seite http://www.md5hashgenerator.com/index.php<br />
// 2.2. Lass dir da eine Hash Summe generieren, die du als Passwort benutzt<br />
// 3. Trage das Passwort unten bei INTERCOM_PASSWORD zwischen die Anführungsstriche ein<br />
// 4. Nur die URL Relays mit dem gleichen Passwort können miteinander kommunizieren<br />
//&nbsp;&nbsp;&nbsp;&nbsp;Also kann man auch mehrere Systeme parallel betreiben, wenn sie über unterschiedliche Passwörter verfügen<br />
// Zugang:<br />
// 1. Erstelle eine NC namens access<br />
// 2. Trage da die Namen ein die das URL Relay bedienen dürfen<br />
// 3. Lege sie in das Objekt mit den Skripten<br />
// 4. Das sollte man tun bevor die URLs eingetragen/abgerufen wurden, sonst darf man alles nochmal machen, weil dadurch das Skript zurück gesetzt wird<br />
//&nbsp;&nbsp;&nbsp;&nbsp;Standardmässig hat nur der Eigentümer Zugriff<br />
// URLs:<br />
// 1. Jedes URL Relay erhält beim Rezzen/Sim-Restart/Sim-Wechsel automatisch eine neue URL<br />
// 2. Diese URLs müssen bei jedem URL Relay durch Anklicken und My URL abgerufen werden<br />
// 3. Ein URL Relay (es reicht eins) erhält nun die URLs der anderen durch Anklicken und Add URL<br />
// 4. Nach einer Weile (SYNC_TIME * Anzahl der URL Relays) bekommen diese URLs auch die anderen Relays<br />
// 5. Das wirkt auch bei Rezzen/Sim-Restart/Sim-Wechsel, aber nicht bei Ändern/Zurücksetzen des Skripts<br />
//&nbsp;&nbsp;&nbsp;&nbsp;Dann muss die URL erneut aufgenommen und eingetragen werden<br />
//&nbsp;&nbsp;&nbsp;&nbsp;Falls es das Relay war wo alle anderen URLs eingetragen wurden, muss man Punkt 2 und 3 wiederholen<br />
// Chat:<br />
// 1. Das Chat Plugin nimmt den Chat auf<br />
//&nbsp;&nbsp;&nbsp;&nbsp;Falls es sich nicht um Objekte handelt sendet es den Chat an das URL Relay<br />
//&nbsp;&nbsp;&nbsp;&nbsp;/me wird dabei in den Namen umgewandelt<br />
// 2. Das URL Relay sendet den Chat an das das Message Relay, zusammen mit den gespeicherten URLs ausser der eigenen<br />
// 3. Das Message Relay sendet nun den Chat an alle übergebenen URLs<br />
// 4. Jedes angeschlossene URL Relay gibt den Chat aus, ohne den Objekt-Namen davor<br />
//&nbsp;&nbsp;&nbsp;&nbsp;Aber nur falls es auch eingeschaltet ist, standardmässig ist es Off<br />
<br />
// Hinweis: Im OS muss möglicherweise die OpenSim.ini geändert werden<br />
// Dazu muss im Abschnitt [Network] in der Zeile<br />
// user_agent = "OpenSim LSL (Mozilla Compatible)"<br />
// das führende Semikolon entfernt und die Sim neu gestartet werden<br />
<br />
string INTERCOM_PASSWORD = "";<br />
string NCNAME = "access";<br />
// Language = 0 German/Deutsch<br />
// Language = 1 English/Englisch<br />
integer Language = 0;<br />
<br />
integer SYNC_TIME = 10;<br />
<br />
integer BROADCAST = 1000;<br />
integer SEND = 1001;<br />
<br />
string MyURL;<br />
list URLs;<br />
list URLs1;<br />
list URLs2;<br />
integer IntercomOn;<br />
key User;<br />
list Access;<br />
integer NCLine;<br />
key NCid;<br />
integer Listener;<br />
integer Handle;<br />
<br />
Menu()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;string s = "Options description:&#92;n&#92;nAdd URL: Use this to add new Intercoms.&#92;n"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "My URL: Use this to get the address of this Intercom.&#92;n"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "List URLs: Use this to list all the linked intercoms.&#92;n"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "Reset: Use this to permanently reset the current Intercom since resetting "<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "maybe it looses the contact to other Intercoms.&#92;n"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "On/Off: This will turn the intercom on and off. It will remain connected "<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "to the network but will not receive or broadcast messages.";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string s1 = "Beschreibung der Optionen&#92;n&#92;nAdd URL: URLs von anderen Intercoms hinzufügen&#92;n"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "My URL: Ruft die eigene URL ab&#92;n"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "List URLs: Listet alle verbundenen Intercom-URLs auf&#92;n"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "Reset: Setzt das Intercom zurück "<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "und kann dadurch den Kontakt zu anderen Intercoms verlieren&#92;n"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "On/Off: Schaltet das Intercom ein/aus, bleibt aber verbunden, "<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "sendet oder empfängt aber keine Nachrichten mehr";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list l = ["Add URL", "My URL", "List URLs", "Reset", "On", "Off"];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;integer Channel = (integer)llFrand(99999) + 999;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Listener = llListen(Channel, "", User, "");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Language == 1) llDialog(User, s, l, Channel);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else llDialog(User, s1, l, Channel);<br />
}<br />
<br />
NewURL()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer x = llListFindList(URLs, [MyURL]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(x != -1) URLs = llDeleteSubList(URLs, x, x);<br />
&nbsp;&nbsp;&nbsp;&nbsp;x = llListFindList(URLs1, [MyURL]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(x != -1) URLs1 = llDeleteSubList(URLs1, x, x);<br />
&nbsp;&nbsp;&nbsp;&nbsp;x = llListFindList(URLs2, [MyURL]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(x != -1) URLs2 = llDeleteSubList(URLs2, x, x);<br />
&nbsp;&nbsp;&nbsp;&nbsp;llReleaseURL(MyURL);<br />
&nbsp;&nbsp;&nbsp;&nbsp;MyURL = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;llRequestURL();<br />
}<br />
<br />
Say(string s)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;string s1 = llGetObjectName();<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer x = llSubStringIndex(s, " ");<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(x != -1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string s2 = llGetSubString(s, 0, x - 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s = llDeleteSubString(s, 0, x -1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s = "/me" + s;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetObjectName(s2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;llSay(0, s);<br />
&nbsp;&nbsp;&nbsp;&nbsp;llSetObjectName(s1);<br />
}<br />
<br />
integer HasAccess(key k)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(k == llGetOwner()) return TRUE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;string s = llKey2Name(k);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(llListFindList(Access, [s]) != -1) return TRUE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<br />
}<br />
<br />
default<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;on_rez(integer param)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NewURL();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;changed(integer change)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (change &amp; (CHANGED_REGION_START | CHANGED_REGION)) NewURL();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(change &amp; CHANGED_INVENTORY) llResetScript();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;state_entry()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IntercomOn = FALSE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NewURL();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetTimerEvent(SYNC_TIME);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NCLine = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(llGetInventoryType(NCNAME) == INVENTORY_NOTECARD) NCid = llGetNotecardLine(NCNAME, NCLine++);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;http_request(key id, string method, string body)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (method == URL_REQUEST_GRANTED)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyURL = body;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URLs += [body];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (method == URL_REQUEST_DENIED)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NewURL();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (method == "POST")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list l = llParseString2List(body, [" "], [""]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(llList2String(l, 1) != INTERCOM_PASSWORD) return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(llListFindList(URLs, [llList2String(l, 0)]) != -1) return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URLs += [llList2String(l, 0)];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llHTTPResponse(id, 200, "OK");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (method == "PUT")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!IntercomOn) return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Say(body);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llHTTPResponse(id, 200, "OK");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;http_response(key id, integer status, list metadata, string body)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (status &gt;= 400 &amp;&amp; status &lt;= 404)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;integer i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i = 0; i &lt; llGetListLength(URLs); i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (llSubStringIndex(body, llList2String(URLs, i)) != -1) URLs = llDeleteSubList(URLs, i, i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i = 0; i &lt; llGetListLength(URLs1); i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (llSubStringIndex(body, llList2String(URLs1, i)) != -1) URLs1 = llDeleteSubList(URLs1, i, i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i = 0; i &lt; llGetListLength(URLs2); i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (llSubStringIndex(body, llList2String(URLs2, i)) != -1) URLs2 = llDeleteSubList(URLs2, i, i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;link_message(integer sender_num, integer num, string str, key id)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!IntercomOn || num != BROADCAST) return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;integer x = llListFindList(URLs, [MyURL]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list l = llDeleteSubList(URLs, x, x);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (llGetListLength(l) == 0) return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llMessageLinked(LINK_THIS, SEND, llList2CSV(l), str);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;timer()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetTimerEvent((float)FALSE);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (llGetListLength(URLs1) == 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URLs1 = URLs;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URLs2 = llDeleteSubList(URLs2, 0, 0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (llGetListLength(URLs2) == 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URLs2 = URLs;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(llList2String(URLs1, 0) != "" &amp;&amp; llList2String(URLs2, 0) != "")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llHTTPRequest(llList2String(URLs1, 0),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[HTTP_METHOD, "POST"],<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llList2String(URLs2, 0) + " " + INTERCOM_PASSWORD);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URLs1 = llDeleteSubList(URLs1, 0, 0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetTimerEvent(SYNC_TIME);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;dataserver(key requested, string data)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(requested == NCid)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(data != EOF)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data = llStringTrim(data, STRING_TRIM);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(data != "") Access += [data];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NCid = llGetNotecardLine(NCNAME, NCLine++);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;listen(integer channel, string name, key id, string message)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llListenRemove(Listener);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llListenRemove(Handle);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(message == "On")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IntercomOn = TRUE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Language == 1) llInstantMessage(id, "Intercom is now: ON");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else llInstantMessage(id, "Intercom ist nun: AN");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(message == "Off")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IntercomOn = FALSE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Language == 1) llInstantMessage(id, "Intercom is now: OFF");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else llInstantMessage(id, "Intercom ist nun: AUS");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(message == "My URL")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (MyURL == "")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Language == 1) llInstantMessage(id, "I don't have an URL registered yet.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else llInstantMessage(id, "Ich habe noch keine registrierte URL.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Language == 1) llInstantMessage(id, "My URL is: " + MyURL);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else llInstantMessage(id, "Meine URL lautet: " + MyURL);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(message == "Add URL")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Language == 1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llInstantMessage(id, "Please paste an URL on channel " + (string)89<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ " in order to register it with the system by typing:&#92;n/" + (string)89<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ " URL&#92;nWhere URL is the URL of another intercom.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llInstantMessage(id, "Bitte kopiere eine URL auf Kanal " + (string)89<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ ", um die URL im System zu registrieren. Tippe dazu &#92;n/" + (string)89<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ " URL&#92;n wobei URL die URL eines anderen Intercoms ist.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Handle = llListen(89, "", id, "");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(message == "List URLs")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(llGetListLength(URLs) == 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Language == 1) llInstantMessage(id, "No URLs registered.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else llInstantMessage(id, "Es sind keine URLs registriert.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;integer i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i = 0; i &lt; llGetListLength(URLs); i++) llSay(0, llList2String(URLs, i));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(message == "Reset")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetTimerEvent(0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llResetScript();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(channel == 89)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message = llStringTrim(message, STRING_TRIM);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(message == "") return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(llListFindList(URLs, [message]) != -1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Language == 1) llInstantMessage(id, "URL already exists.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else llInstantMessage(id, "Dies URL gibt es bereits.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URLs += [message];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Language == 1) llInstantMessage(id, "URL: " + message + " has been registered.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else llInstantMessage(id, "URL: " + message + " wurde registriert.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;touch_start(integer total_number)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User = llDetectedKey(0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(HasAccess(User)) Menu();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Unsichtbare Energiebarriere/Schild]]></title>
			<link>https://www.gridtalk.de/showthread.php?tid=1115</link>
			<pubDate>Sun, 15 Sep 2013 17:49:46 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://www.gridtalk.de/member.php?action=profile&uid=850">MoniTill</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.gridtalk.de/showthread.php?tid=1115</guid>
			<description><![CDATA[Stopft man das Script in ein Prim, wird dieses unsichtbar. Wenn jemand dagegen rennt, blitzt es kurz auf u. glüht einige Sekunden in der angegebenen Farbe <br />
Falls Textur u. passender Sound vorhanden sind, können die mitverwendet werden.<br />
<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>// Unsichtb. Energieschild<br />
// MoniTill 9.13 V1<br />
// Lizenz: Gemeinfrei (Public Domain)<br />
<br />
<br />
<br />
<br />
<br />
<br />
string energietex = "";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Wenn eine Textur im Verzeichnis liegt, hier den Namen eintragen<br />
string energiesound ="";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Falls eine Sounddatei im Verzeichnis liegt, hier den Namen eintragen<br />
float transparenzgrad = 0.7; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 0 = unsichtbar 1= voll sichtbar<br />
float dauer = 3;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Dauer in Sekunden<br />
float gluehstrk = 0.2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Glühstärke 0 = Kein Glühen 1= hell weiß<br />
vector grundfarbe =&lt;1,0,0&gt;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// rot,grün,blau Farbe <br />
<br />
<br />
default<br />
{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;state_entry()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (energietex != "")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetTexture( energietex, ALL_SIDES );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetTextureAnim( ANIM_ON | ROTATE | LOOP, ALL_SIDES, 0, 0, 0, TWO_PI, 10 );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetPrimitiveParams([ PRIM_GLOW, ALL_SIDES, 0 , PRIM_COLOR, ALL_SIDES, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;grundfarbe, 0.0] ); <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;collision_start( integer num )<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (energiesound != "")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; llTriggerSound( energiesound, 0.5 );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetPrimitiveParams([ PRIM_GLOW, ALL_SIDES, gluehstrk , PRIM_COLOR, ALL_SIDES, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;1.0, 1.0, 1.0&gt;, transparenzgrad] ); <br />
&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSleep(0.3);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetColor(grundfarbe, ALL_SIDES);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSleep(dauer);&nbsp;&nbsp;<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetPrimitiveParams([ PRIM_GLOW, ALL_SIDES, 0 , PRIM_COLOR, ALL_SIDES, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;grundfarbe, 0.0] ); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}</code></div></div>]]></description>
			<content:encoded><![CDATA[Stopft man das Script in ein Prim, wird dieses unsichtbar. Wenn jemand dagegen rennt, blitzt es kurz auf u. glüht einige Sekunden in der angegebenen Farbe <br />
Falls Textur u. passender Sound vorhanden sind, können die mitverwendet werden.<br />
<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>// Unsichtb. Energieschild<br />
// MoniTill 9.13 V1<br />
// Lizenz: Gemeinfrei (Public Domain)<br />
<br />
<br />
<br />
<br />
<br />
<br />
string energietex = "";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Wenn eine Textur im Verzeichnis liegt, hier den Namen eintragen<br />
string energiesound ="";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Falls eine Sounddatei im Verzeichnis liegt, hier den Namen eintragen<br />
float transparenzgrad = 0.7; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 0 = unsichtbar 1= voll sichtbar<br />
float dauer = 3;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Dauer in Sekunden<br />
float gluehstrk = 0.2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Glühstärke 0 = Kein Glühen 1= hell weiß<br />
vector grundfarbe =&lt;1,0,0&gt;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// rot,grün,blau Farbe <br />
<br />
<br />
default<br />
{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;state_entry()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (energietex != "")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetTexture( energietex, ALL_SIDES );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetTextureAnim( ANIM_ON | ROTATE | LOOP, ALL_SIDES, 0, 0, 0, TWO_PI, 10 );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetPrimitiveParams([ PRIM_GLOW, ALL_SIDES, 0 , PRIM_COLOR, ALL_SIDES, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;grundfarbe, 0.0] ); <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;collision_start( integer num )<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (energiesound != "")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; llTriggerSound( energiesound, 0.5 );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetPrimitiveParams([ PRIM_GLOW, ALL_SIDES, gluehstrk , PRIM_COLOR, ALL_SIDES, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;1.0, 1.0, 1.0&gt;, transparenzgrad] ); <br />
&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSleep(0.3);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetColor(grundfarbe, ALL_SIDES);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSleep(dauer);&nbsp;&nbsp;<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetPrimitiveParams([ PRIM_GLOW, ALL_SIDES, 0 , PRIM_COLOR, ALL_SIDES, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;grundfarbe, 0.0] ); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Einfache, leicht erweiterbare NPC Steuerung]]></title>
			<link>https://www.gridtalk.de/showthread.php?tid=1096</link>
			<pubDate>Wed, 14 Aug 2013 13:38:53 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://www.gridtalk.de/member.php?action=profile&uid=850">MoniTill</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.gridtalk.de/showthread.php?tid=1096</guid>
			<description><![CDATA[Hallöchen!<br />
<br />
Ich wollte auf einer Sim ein NPC als Maskottchen umherwandern lassen. <br />
Dazu habe ich mir ein einfaches System mit drei kleinen Scripten ausgedacht. Da es auch andere vielleicht gebrauchen können,<br />
poste ich es frech hierher ^^<br />
<br />
Das erste Script kommt in den NPC (bzw. in ein Objekt was er trägt). <br />
Er wandert dann zum ersten Checkpoint, wo er sein nächstes Ziel abfragt.  <br />
<br />
Das zweite Script kommt in die Checkpoints, die an alle Abzweigungen gebaut werden. Es enthält alle UUIDs der erreichbaren Nachbar – Checkpoints <br />
und wählt per Zufall einen davon aus. Ich habe mir dafür einen kleinen Phantomwürfel gerezzt, den ich wg der <br />
begrenzten Reichweite (um Überschneidungen in Räumen zu vermeiden "hört" der NPC nur 1,5m weit auf Befehle) auf  halber Avatarhöhe schweben lasse. <br />
<br />
Und das dritte Script kommt in ein Schalterobjekt  um die Checkpoints simweit sichtbar/unsichtbar zu schalten.<br />
<br />
<br />
<br />
           <br />
<br />
           <br />
Das Script für den NPC:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>// NPC Steuerungssystem <br />
// MoniTill 8.13 V1<br />
// Lizenz: Gemeinfrei (Public Domain)<br />
<br />
// Script für Objekt am Avatar/NPC<br />
<br />
<br />
<br />
key zielchkp = "0c3a6a5b-df1f-4d43-8370-775cfc1fbcda"; // Den ersten Checkpoint nach dem Rezzen ansteuern<br />
//&nbsp;&nbsp;Diese Zeile muss angepasst werden. Der Rest nur bei Bedarf<br />
<br />
<br />
integer NPCkanal = 15432; // Der Kanal für das System. Falls NPCs unterschiedliche Wege nutzen sollen, einfach versch. Kanäle verw.<br />
vector ziel;<br />
vector altziel;<br />
float maxZeit = 60 ; //Wenn in 60 Sek. noch nicht am Ziel, wird er wohl aufgehalten, also Teleport und fertig!^^<br />
float startzeit;<br />
integer fragenzaehler;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Wenn er zurück soll, fragt er mehrmals (5x)nach. <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Falls dann immer noch der alte Checkpoint kommt, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// steckt er wohl in einer Sackgasse u. muss wirklich zurück<br />
<br />
<br />
integer flag;<br />
<br />
// Für die Verwendung in SL muss osNpcMoveToTarget u. osIsNpc entfernt u. osTeleportOwner ersetzt werden<br />
// dann sollte es auch dort laufen.... glaube ich :O)..<br />
<br />
default<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;state_entry()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
 <br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetStatus(STATUS_PHYSICS, TRUE);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSleep(10);<br />
&nbsp;&nbsp;&nbsp;&nbsp;llResetTime();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list checkpointPOSstr = llGetObjectDetails(zielchkp,[OBJECT_POS]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;ziel = llList2Vector(checkpointPOSstr,0); <br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;llSetTimerEvent(2.0);&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;llListen( NPCkanal, "", NULL_KEY, "" ); <br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;timer()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;key&nbsp;&nbsp;npc=llGetOwner();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (osIsNpc(npc) == TRUE)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Wenn er als echter NPC unterwegs ist, gilt diese Zeile....<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osNpcMoveToTarget(npc,ziel, OS_NPC_NO_FLY) ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;else <br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//..und beim Test mit Viewer gilt diese.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llMoveToTarget(ziel,0.05);&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Bei Verwendung in SL muss die "if/else" Schleife weg und nur der llMoveToTarget stehen bleiben<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;<br />
 <br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;if (llVecDist(ziel,llGetPos()) &lt; 1.5)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag= 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llWhisper(NPCkanal,"*ziel*");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llResetTime();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;startzeit=llGetTime();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (startzeit +maxZeit &lt; llGetTime() )<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osTeleportOwner(ziel,ZERO_VECTOR);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Bei Verwendung in SL muss dieser Befehl ersetzt werden<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; listen( integer channel, string name, key id, string msg)&nbsp;&nbsp;<br />
&nbsp;&nbsp; {&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list checkpointPOSstr = llGetObjectDetails(id,[OBJECT_POS]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vector checkpointPOS = llList2Vector(checkpointPOSstr,0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;float distanz = llVecDist(checkpointPOS,llGetPos());<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (flag == 1 &amp;&amp; llGetSubString(msg, 0, 5)== "*gehe*" &amp;&amp; distanz &lt; 1.5)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vector msgz =(vector)llGetSubString(msg, 6, -1); <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (msgz != altziel&nbsp;&nbsp;|| fragenzaehler &gt; 4 )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//llWhisper(0,(string)fragenzaehler + (string)ziel+ (string)altziel); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;altziel = ziel;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ziel = msgz; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag= 0;<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fragenzaehler = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fragenzaehler += 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp; <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; }<br />
}</code></div></div><br />
<br />
<br />
<br />
Das Script für die Checkpoints:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>// NPC Steuerungssystem <br />
// MoniTill 8.13 V1<br />
// Lizenz: Gemeinfrei (Public Domain)<br />
<br />
// Script für die Checkpoints<br />
<br />
 <br />
 <br />
 // Liste der anderen Checkpoints, die von diesem ohne Hindernisse erreichbar sind <br />
list npcWeg = ["4f081952-f657-4e78-8b8b-f9633ae7729f","0c3a6a5b-df1f-4d43-8370-775cfc1fbcda"];<br />
 // Diese Zeile muss angepasst werden. Der Rest nur bei Bedarf<br />
 <br />
<br />
integer NPCkanal = 15432;&nbsp;&nbsp;// Der Kanal für das System<br />
integer i;<br />
integer ii;<br />
key npc;&nbsp;&nbsp;<br />
<br />
integer randInt(integer n)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (integer)llFrand(n + 1);<br />
}<br />
<br />
integer randIntBetween(integer min, integer max)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return min + randInt(max - min);<br />
} <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
default<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;state_entry()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ii = llGetListLength(npcWeg); <br />
&nbsp;&nbsp;&nbsp;&nbsp;llListen( NPCkanal, "", NULL_KEY, "" ); <br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;listen( integer channel, string name, key id, string msg)&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (msg == "ckptranson")<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetAlpha(0.0, ALL_SIDES);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;if (msg == "ckptransoff")<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetAlpha(1.0, ALL_SIDES);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
 <br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;if (msg == "*ziel*")<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i = randIntBetween(0, ii - 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string checkpointPOSstr =llList2String( llGetObjectDetails(llList2String(npcWeg,i),[OBJECT_POS]),0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llWhisper(NPCkanal,"*gehe*"+checkpointPOSstr );<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp; }<br />
}</code></div></div><br />
<br />
<br />
<br />
<br />
Das Script für den Schalter:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>// NPC Steuerungssystem <br />
// MoniTill 8.13 V1<br />
// Lizenz: Gemeinfrei (Public Domain)<br />
<br />
// Script für Schalter um die Checkpoints unsichtbar/sichtbar zu machen<br />
<br />
<br />
integer NPCkanal = 15432; // Der Kanal für das System<br />
integer ckptrans;<br />
<br />
<br />
<br />
default<br />
{<br />
&nbsp;&nbsp;<br />
<br />
<br />
&nbsp;&nbsp; touch_start(integer nummer)<br />
&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(ckptrans == 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llRegionSay(NPCkanal,"ckptranson");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ckptrans = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llRegionSay(NPCkanal,"ckptransoff");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ckptrans = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp; }<br />
}</code></div></div>]]></description>
			<content:encoded><![CDATA[Hallöchen!<br />
<br />
Ich wollte auf einer Sim ein NPC als Maskottchen umherwandern lassen. <br />
Dazu habe ich mir ein einfaches System mit drei kleinen Scripten ausgedacht. Da es auch andere vielleicht gebrauchen können,<br />
poste ich es frech hierher ^^<br />
<br />
Das erste Script kommt in den NPC (bzw. in ein Objekt was er trägt). <br />
Er wandert dann zum ersten Checkpoint, wo er sein nächstes Ziel abfragt.  <br />
<br />
Das zweite Script kommt in die Checkpoints, die an alle Abzweigungen gebaut werden. Es enthält alle UUIDs der erreichbaren Nachbar – Checkpoints <br />
und wählt per Zufall einen davon aus. Ich habe mir dafür einen kleinen Phantomwürfel gerezzt, den ich wg der <br />
begrenzten Reichweite (um Überschneidungen in Räumen zu vermeiden "hört" der NPC nur 1,5m weit auf Befehle) auf  halber Avatarhöhe schweben lasse. <br />
<br />
Und das dritte Script kommt in ein Schalterobjekt  um die Checkpoints simweit sichtbar/unsichtbar zu schalten.<br />
<br />
<br />
<br />
           <br />
<br />
           <br />
Das Script für den NPC:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>// NPC Steuerungssystem <br />
// MoniTill 8.13 V1<br />
// Lizenz: Gemeinfrei (Public Domain)<br />
<br />
// Script für Objekt am Avatar/NPC<br />
<br />
<br />
<br />
key zielchkp = "0c3a6a5b-df1f-4d43-8370-775cfc1fbcda"; // Den ersten Checkpoint nach dem Rezzen ansteuern<br />
//&nbsp;&nbsp;Diese Zeile muss angepasst werden. Der Rest nur bei Bedarf<br />
<br />
<br />
integer NPCkanal = 15432; // Der Kanal für das System. Falls NPCs unterschiedliche Wege nutzen sollen, einfach versch. Kanäle verw.<br />
vector ziel;<br />
vector altziel;<br />
float maxZeit = 60 ; //Wenn in 60 Sek. noch nicht am Ziel, wird er wohl aufgehalten, also Teleport und fertig!^^<br />
float startzeit;<br />
integer fragenzaehler;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Wenn er zurück soll, fragt er mehrmals (5x)nach. <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Falls dann immer noch der alte Checkpoint kommt, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// steckt er wohl in einer Sackgasse u. muss wirklich zurück<br />
<br />
<br />
integer flag;<br />
<br />
// Für die Verwendung in SL muss osNpcMoveToTarget u. osIsNpc entfernt u. osTeleportOwner ersetzt werden<br />
// dann sollte es auch dort laufen.... glaube ich :O)..<br />
<br />
default<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;state_entry()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
 <br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetStatus(STATUS_PHYSICS, TRUE);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSleep(10);<br />
&nbsp;&nbsp;&nbsp;&nbsp;llResetTime();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list checkpointPOSstr = llGetObjectDetails(zielchkp,[OBJECT_POS]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;ziel = llList2Vector(checkpointPOSstr,0); <br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;llSetTimerEvent(2.0);&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;llListen( NPCkanal, "", NULL_KEY, "" ); <br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;timer()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;key&nbsp;&nbsp;npc=llGetOwner();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (osIsNpc(npc) == TRUE)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Wenn er als echter NPC unterwegs ist, gilt diese Zeile....<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osNpcMoveToTarget(npc,ziel, OS_NPC_NO_FLY) ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;else <br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//..und beim Test mit Viewer gilt diese.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llMoveToTarget(ziel,0.05);&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Bei Verwendung in SL muss die "if/else" Schleife weg und nur der llMoveToTarget stehen bleiben<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;<br />
 <br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;if (llVecDist(ziel,llGetPos()) &lt; 1.5)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag= 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llWhisper(NPCkanal,"*ziel*");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llResetTime();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;startzeit=llGetTime();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (startzeit +maxZeit &lt; llGetTime() )<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;osTeleportOwner(ziel,ZERO_VECTOR);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Bei Verwendung in SL muss dieser Befehl ersetzt werden<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; listen( integer channel, string name, key id, string msg)&nbsp;&nbsp;<br />
&nbsp;&nbsp; {&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list checkpointPOSstr = llGetObjectDetails(id,[OBJECT_POS]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vector checkpointPOS = llList2Vector(checkpointPOSstr,0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;float distanz = llVecDist(checkpointPOS,llGetPos());<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (flag == 1 &amp;&amp; llGetSubString(msg, 0, 5)== "*gehe*" &amp;&amp; distanz &lt; 1.5)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vector msgz =(vector)llGetSubString(msg, 6, -1); <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (msgz != altziel&nbsp;&nbsp;|| fragenzaehler &gt; 4 )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//llWhisper(0,(string)fragenzaehler + (string)ziel+ (string)altziel); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;altziel = ziel;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ziel = msgz; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag= 0;<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fragenzaehler = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fragenzaehler += 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp; <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; }<br />
}</code></div></div><br />
<br />
<br />
<br />
Das Script für die Checkpoints:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>// NPC Steuerungssystem <br />
// MoniTill 8.13 V1<br />
// Lizenz: Gemeinfrei (Public Domain)<br />
<br />
// Script für die Checkpoints<br />
<br />
 <br />
 <br />
 // Liste der anderen Checkpoints, die von diesem ohne Hindernisse erreichbar sind <br />
list npcWeg = ["4f081952-f657-4e78-8b8b-f9633ae7729f","0c3a6a5b-df1f-4d43-8370-775cfc1fbcda"];<br />
 // Diese Zeile muss angepasst werden. Der Rest nur bei Bedarf<br />
 <br />
<br />
integer NPCkanal = 15432;&nbsp;&nbsp;// Der Kanal für das System<br />
integer i;<br />
integer ii;<br />
key npc;&nbsp;&nbsp;<br />
<br />
integer randInt(integer n)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (integer)llFrand(n + 1);<br />
}<br />
<br />
integer randIntBetween(integer min, integer max)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return min + randInt(max - min);<br />
} <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
default<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;state_entry()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ii = llGetListLength(npcWeg); <br />
&nbsp;&nbsp;&nbsp;&nbsp;llListen( NPCkanal, "", NULL_KEY, "" ); <br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;listen( integer channel, string name, key id, string msg)&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (msg == "ckptranson")<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetAlpha(0.0, ALL_SIDES);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;if (msg == "ckptransoff")<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetAlpha(1.0, ALL_SIDES);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
 <br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;if (msg == "*ziel*")<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i = randIntBetween(0, ii - 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string checkpointPOSstr =llList2String( llGetObjectDetails(llList2String(npcWeg,i),[OBJECT_POS]),0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llWhisper(NPCkanal,"*gehe*"+checkpointPOSstr );<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp; }<br />
}</code></div></div><br />
<br />
<br />
<br />
<br />
Das Script für den Schalter:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>// NPC Steuerungssystem <br />
// MoniTill 8.13 V1<br />
// Lizenz: Gemeinfrei (Public Domain)<br />
<br />
// Script für Schalter um die Checkpoints unsichtbar/sichtbar zu machen<br />
<br />
<br />
integer NPCkanal = 15432; // Der Kanal für das System<br />
integer ckptrans;<br />
<br />
<br />
<br />
default<br />
{<br />
&nbsp;&nbsp;<br />
<br />
<br />
&nbsp;&nbsp; touch_start(integer nummer)<br />
&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(ckptrans == 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llRegionSay(NPCkanal,"ckptranson");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ckptrans = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llRegionSay(NPCkanal,"ckptransoff");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ckptrans = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp; }<br />
}</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[(Fast) weiche Bewegung - Tour Skript]]></title>
			<link>https://www.gridtalk.de/showthread.php?tid=977</link>
			<pubDate>Mon, 08 Apr 2013 20:58:54 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://www.gridtalk.de/member.php?action=profile&uid=10">Rebekka Revnik</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.gridtalk.de/showthread.php?tid=977</guid>
			<description><![CDATA[Basierend auf dem VogelSkript von Kayaker Magic (zu finden <a href="http://forums.osgrid.org/viewtopic.php?f=5&amp;t=4577" target="_blank" rel="noopener" class="mycode_url">hier</a>) hab ich mal ein Tour-Skript gebastelt, das Wegpunkte abfährt, auch mal etwas verweilt und/oder Text ausgibt. Im OSgrid hab ich damit fast flüssige Bewegungen hinbekommen, auf meiner Insel leider nicht weils da momentan ziemlich laggt. Das hängt wohl auch von der Grösse des Objektes ab. Nötig ist dazu nur eine Notecard namens config, wo die Wegpunkte in der Form<br />
DRIVE = &lt;Position&gt; = &lt;Rotation&gt;<br />
drinstehen. Die letzte Position sollte natürlich die Ausgangspostion sein. <br />
Unter dem jeweiligen Wegpunkt kann auch noch eine Pause angegeben werden.<br />
PAUSE = Sekunden<br />
Und/oder auch ein Text der ausgegeben werden soll.<br />
TEXT = Text<br />
Mit der Konstanten TIME kann im Skript eingestellt werden wie schnell sich das Objekt bewegt, mit 1.0 ist es etwa 1 Meter/Sekunde. Grösser = schneller, aber auch mehr Ruckeln.<br />
Und hier das Skript:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>// Tour script by Rebekka Revnik<br />
// it's free for everyone, no restrictions<br />
// you may delete my name and claim it as your own script<br />
// but if you give credit it would be nice :-)<br />
<br />
// the first part is not mine, thanks and credits goes to Kayaker :-)<br />
<br />
// Single Framed (SF) motion without llKeyframedMotion<br />
// original script : Kayaker Magic<br />
// from: http://forums.osgrid.org/viewtopic.php?f=5&amp;t=4577<br />
// minor changes by me<br />
<br />
vector&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SF_spos;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//start position<br />
rotation&nbsp;&nbsp;&nbsp;&nbsp;SF_srot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//starting rotation<br />
float&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SF_stime;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //starting time<br />
vector&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SF_epos;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ending position<br />
rotation&nbsp;&nbsp;&nbsp;&nbsp;SF_erot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ending rotation<br />
float&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SF_seconds;&nbsp;&nbsp;&nbsp;&nbsp; //time to move that distance<br />
integer&nbsp;&nbsp;&nbsp;&nbsp; SF_target=-1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//handle of last target position<br />
<br />
SFrame()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;SF_spos=llGetPos();<br />
&nbsp;&nbsp;&nbsp;&nbsp;SF_srot=llGetRot();<br />
&nbsp;&nbsp;&nbsp;&nbsp;SF_stime=llGetTime();<br />
&nbsp;&nbsp;&nbsp;&nbsp;SF_epos = llList2Vector(Points, Count);<br />
&nbsp;&nbsp;&nbsp;&nbsp;SF_erot = llList2Rot(Rots, Count);<br />
&nbsp;&nbsp;&nbsp;&nbsp;SF_seconds=llVecDist(SF_epos, llGetPos()) / TIME;<br />
&nbsp;&nbsp;&nbsp;&nbsp;rotation t=&lt;SF_srot.x-SF_erot.x,SF_srot.y-SF_erot.y,SF_srot.z-SF_erot.z,SF_srot.s-SF_erot.s&gt;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ((t.x*t.x + t.y*t.y + t.z*t.z + t.s*t.x)&gt;0.5) SF_erot = &lt;-SF_erot.x,-SF_erot.y,-SF_erot.z,-SF_erot.s&gt;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;llTargetRemove(SF_target);<br />
&nbsp;&nbsp;&nbsp;&nbsp;SF_target=llTarget(SF_epos, 0.1);<br />
}<br />
<br />
integer SFnotat()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (SF_target== -1) return TRUE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;float time=llGetTime();<br />
&nbsp;&nbsp;&nbsp;&nbsp;time = (time-SF_stime)/SF_seconds;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (time&gt;1.0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llTargetRemove(SF_target);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SF_target=-1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetLinkPrimitiveParamsFast(LINK_THIS,[PRIM_POSITION,SF_epos,PRIM_ROTATION,SF_erot]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return TRUE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;float emit= 1.0-time;<br />
&nbsp;&nbsp;&nbsp;&nbsp;vector pos=SF_epos*time+SF_spos*emit;<br />
&nbsp;&nbsp;&nbsp;&nbsp;rotation rot = &lt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SF_erot.x*time+SF_srot.x*emit,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SF_erot.y*time+SF_srot.y*emit,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SF_erot.z*time+SF_srot.z*emit,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SF_erot.s*time+SF_srot.s*emit<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;emit = llSqrt(rot.x*rot.x+rot.y*rot.y+rot.z*rot.z+rot.s*rot.s);<br />
&nbsp;&nbsp;&nbsp;&nbsp;rot = &lt;rot.x/emit,rot.y/emit,rot.z/emit,rot.s/emit&gt;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;llSetLinkPrimitiveParamsFast(LINK_THIS,[PRIM_POSITION,pos,PRIM_ROTATION,rot]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<br />
}<br />
<br />
// ab hier hab ich das geschrieben :-)<br />
<br />
// Mach dir eine Notecard mit den folgenden Einträgen<br />
// Gross/Kleinschreibung ist nicht wichtig, also DRIVE ist genauso gut wie drive oder Drive<br />
<br />
// DRIVE = Position = Rotation&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;die Wegpunkte eben, mit Position und Rotation<br />
<br />
// nach dem Wegpunkt (muss aber nicht sein)<br />
<br />
// PAUSE = Sekunden&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hält das Objekt ne Weile an<br />
// TEXT = text&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sagt den Text im Chat<br />
<br />
// now that's my part :-)<br />
<br />
// Make a notecard with the folling entries<br />
// it's not case sensitive, for example drive is accepted as DRIVE or Drive<br />
<br />
// DRIVE = Position = Rotation&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the waypoints with given params<br />
<br />
// after the waypoint (optionally but but not required)<br />
<br />
// PAUSE = seconds&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;makes the object to stay for a while<br />
// TEXT = text&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;says the text in chat<br />
<br />
// wie es oben steht, die Schlüsselwörter<br />
// as above, the keywords<br />
string DRIVE = "drive";<br />
string PAUSE = "pause";<br />
string TEXT = "text";<br />
// Name der Notecard<br />
// name of the notecard<br />
string NCNAME = "config";<br />
// Trennzeichen für die Schlüsselwörter<br />
// separator for keywords<br />
string SEPARATOR = "=";<br />
// wie schnell sich das Objekt bewegt<br />
// 1 ist ungefähr 1 Meter pro Sekunde<br />
// Grösser = schneller, aber auch mehr ruckeln<br />
// how fast your object will move<br />
// 1 means appr. 1 m per second<br />
// a greater number ist faster but less smoothly<br />
float TIME = 1.0;<br />
// Stell es auf TRUE, dann kommen Infos im Chat über die Wegpunkte<br />
// set it to TRUE to get informations about the waypoints in chat<br />
integer DEBUG = FALSE;<br />
// Wähle die Sprache, ich kann nur die beiden unten sprechen<br />
// 0 = deutsch, 1 = englisch<br />
// choose language, I speak only the two below<br />
// 0 for german, 1 for english<br />
integer LANGUAGE = 0;<br />
<br />
list Points;<br />
list Rots;<br />
list Pause;<br />
list Text;<br />
integer NCLine;<br />
key NCid;<br />
integer Count;<br />
<br />
// liest ein Zeile aus der Notecard und speichert sie<br />
// reads a notecard line and saves it<br />
Read(string data)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;list l = llParseString2List(data, [SEPARATOR], []);<br />
&nbsp;&nbsp;&nbsp;&nbsp;string s1 = llToLower(llStringTrim(llList2String(l, 0), STRING_TRIM));<br />
&nbsp;&nbsp;&nbsp;&nbsp;vector v1 = (vector)llToLower(llStringTrim(llList2String(l, 1), STRING_TRIM));<br />
&nbsp;&nbsp;&nbsp;&nbsp;rotation r1 = (rotation)llToLower(llStringTrim(llList2String(l, 2), STRING_TRIM));<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer x;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(s1 == DRIVE)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(v1 != ZERO_VECTOR)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Points += [v1];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rots += [r1];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pause += [0];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Text += [""];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;} else if(s1 == PAUSE)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x = llGetListLength(Pause) - 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pause = llListReplaceList(Pause, [(float)llToLower(llStringTrim(llList2String(l, 1), STRING_TRIM))], x, x);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;} else if(s1 == TEXT)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x = llSubStringIndex(data, SEPARATOR);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data = llDeleteSubString(data, 0, x);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x = llGetListLength(Text) - 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Text = llListReplaceList(Text, [llStringTrim(data, STRING_TRIM)], x, x);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
// Sagt was in der Notecard steht (TEXT = text), ohn den Objektnamen<br />
// es muss aber ein Leerzeichen drin sein und mindestens zwei Wörter haben<br />
// sonst kommt nur der normale Chat mit dem Objektnamen<br />
// says what you wrote in the notecard (TEXT = text) without the object name<br />
// it has to be a space in it and at least two words<br />
// otherwise you'll get only the normal chat with the object name<br />
Say(string s)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;string s1 = llGetObjectName();<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer x = llSubStringIndex(s, " ");<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(x != -1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string s2 = llGetSubString(s, 0, x - 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s = llDeleteSubString(s, 0, x -1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s = "/me" + s;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetObjectName(s2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;llSay(0, s);<br />
&nbsp;&nbsp;&nbsp;&nbsp;llSetObjectName(s1);<br />
}<br />
<br />
default<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;state_entry()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetText("", &lt;1,1,1&gt;, 1.0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Points = [];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rots = [];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pause = [];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Text = [];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(llGetInventoryType(NCNAME) == INVENTORY_NONE)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(LANGUAGE == 0) llOwnerSay("Keine config-NC gefunden.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(LANGUAGE == 1) llOwnerSay("No config nc found.");<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(LANGUAGE == 0) llOwnerSay("Lese config, bitte warten...");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(LANGUAGE == 1) llOwnerSay("Reading config nc, please wait...");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NCLine = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NCid = llGetNotecardLine(NCNAME, NCLine++);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;dataserver(key requested, string data)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(requested == NCid)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(data != EOF)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Read(data);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NCid = llGetNotecardLine(NCNAME, NCLine++);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(LANGUAGE == 0) llOwnerSay("Fertig.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(LANGUAGE == 1) llOwnerSay("Ready.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(llGetListLength(Points) == 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(LANGUAGE == 0) llOwnerSay("Keine Wegpunkte gefunden.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(LANGUAGE == 1) llOwnerSay("No waypoints found.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(LANGUAGE == 0) llOwnerSay((string)llGetListLength(Points) + " Wegpunkte gelesen.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(LANGUAGE == 1) llOwnerSay((string)llGetListLength(Points) + " waypoints read.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state running;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
state running<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;state_entry()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(LANGUAGE == 0) llSetText("Sitze und berühre mich", &lt;1,1,1&gt;, 1.0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(LANGUAGE == 1) llSetText("Sit down and touch me", &lt;1,1,1&gt;, 1.0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;touch_start(integer total_number)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state drive;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
state drive<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;state_entry()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetText("", &lt;1,1,1&gt;, 1.0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Count = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Ändere den Text hier drunter nach deinen Wünschen. Der kommt nur beim Start der Tour<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Change the text below as you like. It appears only at the start of the tour<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Say("Willkommen bei der Tour auf meiner Insel. Sie dauert etwa 20 Minuten. Viel Spass :-)");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SFrame();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;not_at_target()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(SFnotat())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(DEBUG)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(LANGUAGE == 0) llOwnerSay("Wegpunkt Nr. " + (string)(Count + 1) + " bei " + (string)llList2Vector(Points, Count));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(LANGUAGE == 1) llOwnerSay("waypoint no. " + (string)(Count + 1) + " at " + (string)llList2Vector(Points, Count));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(llList2String(Text, Count) != "") Say(llList2String(Text, Count));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(llList2Float(Pause, Count) &gt; 0) llSleep(llList2Float(Pause, Count));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Count++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Count == llGetListLength(Points)) state running;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SFrame();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</code></div></div>]]></description>
			<content:encoded><![CDATA[Basierend auf dem VogelSkript von Kayaker Magic (zu finden <a href="http://forums.osgrid.org/viewtopic.php?f=5&amp;t=4577" target="_blank" rel="noopener" class="mycode_url">hier</a>) hab ich mal ein Tour-Skript gebastelt, das Wegpunkte abfährt, auch mal etwas verweilt und/oder Text ausgibt. Im OSgrid hab ich damit fast flüssige Bewegungen hinbekommen, auf meiner Insel leider nicht weils da momentan ziemlich laggt. Das hängt wohl auch von der Grösse des Objektes ab. Nötig ist dazu nur eine Notecard namens config, wo die Wegpunkte in der Form<br />
DRIVE = &lt;Position&gt; = &lt;Rotation&gt;<br />
drinstehen. Die letzte Position sollte natürlich die Ausgangspostion sein. <br />
Unter dem jeweiligen Wegpunkt kann auch noch eine Pause angegeben werden.<br />
PAUSE = Sekunden<br />
Und/oder auch ein Text der ausgegeben werden soll.<br />
TEXT = Text<br />
Mit der Konstanten TIME kann im Skript eingestellt werden wie schnell sich das Objekt bewegt, mit 1.0 ist es etwa 1 Meter/Sekunde. Grösser = schneller, aber auch mehr Ruckeln.<br />
Und hier das Skript:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>// Tour script by Rebekka Revnik<br />
// it's free for everyone, no restrictions<br />
// you may delete my name and claim it as your own script<br />
// but if you give credit it would be nice :-)<br />
<br />
// the first part is not mine, thanks and credits goes to Kayaker :-)<br />
<br />
// Single Framed (SF) motion without llKeyframedMotion<br />
// original script : Kayaker Magic<br />
// from: http://forums.osgrid.org/viewtopic.php?f=5&amp;t=4577<br />
// minor changes by me<br />
<br />
vector&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SF_spos;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//start position<br />
rotation&nbsp;&nbsp;&nbsp;&nbsp;SF_srot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//starting rotation<br />
float&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SF_stime;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //starting time<br />
vector&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SF_epos;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ending position<br />
rotation&nbsp;&nbsp;&nbsp;&nbsp;SF_erot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ending rotation<br />
float&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SF_seconds;&nbsp;&nbsp;&nbsp;&nbsp; //time to move that distance<br />
integer&nbsp;&nbsp;&nbsp;&nbsp; SF_target=-1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//handle of last target position<br />
<br />
SFrame()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;SF_spos=llGetPos();<br />
&nbsp;&nbsp;&nbsp;&nbsp;SF_srot=llGetRot();<br />
&nbsp;&nbsp;&nbsp;&nbsp;SF_stime=llGetTime();<br />
&nbsp;&nbsp;&nbsp;&nbsp;SF_epos = llList2Vector(Points, Count);<br />
&nbsp;&nbsp;&nbsp;&nbsp;SF_erot = llList2Rot(Rots, Count);<br />
&nbsp;&nbsp;&nbsp;&nbsp;SF_seconds=llVecDist(SF_epos, llGetPos()) / TIME;<br />
&nbsp;&nbsp;&nbsp;&nbsp;rotation t=&lt;SF_srot.x-SF_erot.x,SF_srot.y-SF_erot.y,SF_srot.z-SF_erot.z,SF_srot.s-SF_erot.s&gt;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ((t.x*t.x + t.y*t.y + t.z*t.z + t.s*t.x)&gt;0.5) SF_erot = &lt;-SF_erot.x,-SF_erot.y,-SF_erot.z,-SF_erot.s&gt;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;llTargetRemove(SF_target);<br />
&nbsp;&nbsp;&nbsp;&nbsp;SF_target=llTarget(SF_epos, 0.1);<br />
}<br />
<br />
integer SFnotat()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (SF_target== -1) return TRUE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;float time=llGetTime();<br />
&nbsp;&nbsp;&nbsp;&nbsp;time = (time-SF_stime)/SF_seconds;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (time&gt;1.0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llTargetRemove(SF_target);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SF_target=-1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetLinkPrimitiveParamsFast(LINK_THIS,[PRIM_POSITION,SF_epos,PRIM_ROTATION,SF_erot]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return TRUE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;float emit= 1.0-time;<br />
&nbsp;&nbsp;&nbsp;&nbsp;vector pos=SF_epos*time+SF_spos*emit;<br />
&nbsp;&nbsp;&nbsp;&nbsp;rotation rot = &lt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SF_erot.x*time+SF_srot.x*emit,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SF_erot.y*time+SF_srot.y*emit,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SF_erot.z*time+SF_srot.z*emit,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SF_erot.s*time+SF_srot.s*emit<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;emit = llSqrt(rot.x*rot.x+rot.y*rot.y+rot.z*rot.z+rot.s*rot.s);<br />
&nbsp;&nbsp;&nbsp;&nbsp;rot = &lt;rot.x/emit,rot.y/emit,rot.z/emit,rot.s/emit&gt;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;llSetLinkPrimitiveParamsFast(LINK_THIS,[PRIM_POSITION,pos,PRIM_ROTATION,rot]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<br />
}<br />
<br />
// ab hier hab ich das geschrieben :-)<br />
<br />
// Mach dir eine Notecard mit den folgenden Einträgen<br />
// Gross/Kleinschreibung ist nicht wichtig, also DRIVE ist genauso gut wie drive oder Drive<br />
<br />
// DRIVE = Position = Rotation&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;die Wegpunkte eben, mit Position und Rotation<br />
<br />
// nach dem Wegpunkt (muss aber nicht sein)<br />
<br />
// PAUSE = Sekunden&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hält das Objekt ne Weile an<br />
// TEXT = text&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sagt den Text im Chat<br />
<br />
// now that's my part :-)<br />
<br />
// Make a notecard with the folling entries<br />
// it's not case sensitive, for example drive is accepted as DRIVE or Drive<br />
<br />
// DRIVE = Position = Rotation&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the waypoints with given params<br />
<br />
// after the waypoint (optionally but but not required)<br />
<br />
// PAUSE = seconds&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;makes the object to stay for a while<br />
// TEXT = text&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;says the text in chat<br />
<br />
// wie es oben steht, die Schlüsselwörter<br />
// as above, the keywords<br />
string DRIVE = "drive";<br />
string PAUSE = "pause";<br />
string TEXT = "text";<br />
// Name der Notecard<br />
// name of the notecard<br />
string NCNAME = "config";<br />
// Trennzeichen für die Schlüsselwörter<br />
// separator for keywords<br />
string SEPARATOR = "=";<br />
// wie schnell sich das Objekt bewegt<br />
// 1 ist ungefähr 1 Meter pro Sekunde<br />
// Grösser = schneller, aber auch mehr ruckeln<br />
// how fast your object will move<br />
// 1 means appr. 1 m per second<br />
// a greater number ist faster but less smoothly<br />
float TIME = 1.0;<br />
// Stell es auf TRUE, dann kommen Infos im Chat über die Wegpunkte<br />
// set it to TRUE to get informations about the waypoints in chat<br />
integer DEBUG = FALSE;<br />
// Wähle die Sprache, ich kann nur die beiden unten sprechen<br />
// 0 = deutsch, 1 = englisch<br />
// choose language, I speak only the two below<br />
// 0 for german, 1 for english<br />
integer LANGUAGE = 0;<br />
<br />
list Points;<br />
list Rots;<br />
list Pause;<br />
list Text;<br />
integer NCLine;<br />
key NCid;<br />
integer Count;<br />
<br />
// liest ein Zeile aus der Notecard und speichert sie<br />
// reads a notecard line and saves it<br />
Read(string data)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;list l = llParseString2List(data, [SEPARATOR], []);<br />
&nbsp;&nbsp;&nbsp;&nbsp;string s1 = llToLower(llStringTrim(llList2String(l, 0), STRING_TRIM));<br />
&nbsp;&nbsp;&nbsp;&nbsp;vector v1 = (vector)llToLower(llStringTrim(llList2String(l, 1), STRING_TRIM));<br />
&nbsp;&nbsp;&nbsp;&nbsp;rotation r1 = (rotation)llToLower(llStringTrim(llList2String(l, 2), STRING_TRIM));<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer x;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(s1 == DRIVE)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(v1 != ZERO_VECTOR)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Points += [v1];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rots += [r1];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pause += [0];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Text += [""];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;} else if(s1 == PAUSE)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x = llGetListLength(Pause) - 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pause = llListReplaceList(Pause, [(float)llToLower(llStringTrim(llList2String(l, 1), STRING_TRIM))], x, x);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;} else if(s1 == TEXT)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x = llSubStringIndex(data, SEPARATOR);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data = llDeleteSubString(data, 0, x);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x = llGetListLength(Text) - 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Text = llListReplaceList(Text, [llStringTrim(data, STRING_TRIM)], x, x);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
// Sagt was in der Notecard steht (TEXT = text), ohn den Objektnamen<br />
// es muss aber ein Leerzeichen drin sein und mindestens zwei Wörter haben<br />
// sonst kommt nur der normale Chat mit dem Objektnamen<br />
// says what you wrote in the notecard (TEXT = text) without the object name<br />
// it has to be a space in it and at least two words<br />
// otherwise you'll get only the normal chat with the object name<br />
Say(string s)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;string s1 = llGetObjectName();<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer x = llSubStringIndex(s, " ");<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(x != -1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string s2 = llGetSubString(s, 0, x - 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s = llDeleteSubString(s, 0, x -1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s = "/me" + s;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetObjectName(s2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;llSay(0, s);<br />
&nbsp;&nbsp;&nbsp;&nbsp;llSetObjectName(s1);<br />
}<br />
<br />
default<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;state_entry()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetText("", &lt;1,1,1&gt;, 1.0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Points = [];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rots = [];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pause = [];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Text = [];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(llGetInventoryType(NCNAME) == INVENTORY_NONE)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(LANGUAGE == 0) llOwnerSay("Keine config-NC gefunden.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(LANGUAGE == 1) llOwnerSay("No config nc found.");<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(LANGUAGE == 0) llOwnerSay("Lese config, bitte warten...");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(LANGUAGE == 1) llOwnerSay("Reading config nc, please wait...");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NCLine = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NCid = llGetNotecardLine(NCNAME, NCLine++);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;dataserver(key requested, string data)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(requested == NCid)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(data != EOF)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Read(data);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NCid = llGetNotecardLine(NCNAME, NCLine++);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(LANGUAGE == 0) llOwnerSay("Fertig.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(LANGUAGE == 1) llOwnerSay("Ready.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(llGetListLength(Points) == 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(LANGUAGE == 0) llOwnerSay("Keine Wegpunkte gefunden.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(LANGUAGE == 1) llOwnerSay("No waypoints found.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(LANGUAGE == 0) llOwnerSay((string)llGetListLength(Points) + " Wegpunkte gelesen.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(LANGUAGE == 1) llOwnerSay((string)llGetListLength(Points) + " waypoints read.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state running;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
state running<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;state_entry()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(LANGUAGE == 0) llSetText("Sitze und berühre mich", &lt;1,1,1&gt;, 1.0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(LANGUAGE == 1) llSetText("Sit down and touch me", &lt;1,1,1&gt;, 1.0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;touch_start(integer total_number)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state drive;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
state drive<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;state_entry()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetText("", &lt;1,1,1&gt;, 1.0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Count = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Ändere den Text hier drunter nach deinen Wünschen. Der kommt nur beim Start der Tour<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Change the text below as you like. It appears only at the start of the tour<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Say("Willkommen bei der Tour auf meiner Insel. Sie dauert etwa 20 Minuten. Viel Spass :-)");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SFrame();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;not_at_target()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(SFnotat())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(DEBUG)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(LANGUAGE == 0) llOwnerSay("Wegpunkt Nr. " + (string)(Count + 1) + " bei " + (string)llList2Vector(Points, Count));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(LANGUAGE == 1) llOwnerSay("waypoint no. " + (string)(Count + 1) + " at " + (string)llList2Vector(Points, Count));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(llList2String(Text, Count) != "") Say(llList2String(Text, Count));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(llList2Float(Pause, Count) &gt; 0) llSleep(llList2Float(Pause, Count));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Count++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Count == llGetListLength(Points)) state running;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SFrame();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Hybrid-Poseball]]></title>
			<link>https://www.gridtalk.de/showthread.php?tid=903</link>
			<pubDate>Thu, 24 Jan 2013 13:16:06 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://www.gridtalk.de/member.php?action=profile&uid=10">Rebekka Revnik</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.gridtalk.de/showthread.php?tid=903</guid>
			<description><![CDATA[Fast vergessen: Mandarine hat vor einiger Zeit einen Poseball-Rezzer geskriptet. Ist eigentlich für Single und Couple Dances gedacht, geht aber auch für alles andere. Ich find das viel einfacher zu bedienen als den unsäglichen MPLV. Einfach mal ausprobieren :-)<br />
Und hier gehts lang: <a href="http://forums.osgrid.org/viewtopic.php?f=5&amp;t=4603" target="_blank" rel="noopener" class="mycode_url">LINK</a>]]></description>
			<content:encoded><![CDATA[Fast vergessen: Mandarine hat vor einiger Zeit einen Poseball-Rezzer geskriptet. Ist eigentlich für Single und Couple Dances gedacht, geht aber auch für alles andere. Ich find das viel einfacher zu bedienen als den unsäglichen MPLV. Einfach mal ausprobieren :-)<br />
Und hier gehts lang: <a href="http://forums.osgrid.org/viewtopic.php?f=5&amp;t=4603" target="_blank" rel="noopener" class="mycode_url">LINK</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[AO für OpenSim]]></title>
			<link>https://www.gridtalk.de/showthread.php?tid=871</link>
			<pubDate>Wed, 05 Dec 2012 20:03:23 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://www.gridtalk.de/member.php?action=profile&uid=10">Rebekka Revnik</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.gridtalk.de/showthread.php?tid=871</guid>
			<description><![CDATA[Neulich hatte ich nach einem AO gesucht und auch von Freunden welche bekommen. Die haben auch funktioniert, nur waren die eben entweder no Mod oder es war nicht alles drin was ich mir gewünscht hätte. Also hab ich kurzerhand einen eigenen AO geskriptet (was ich eigentlich vermeiden wollte). Dabei ist auch gleich noch ein Tanzball- und ein Poledance-Skript rausgekommen, aber das später. Hier ist nun der Extrakt.<br />
<br />
Kurzbeschreibung: Der AO überschreibt die Animationen in 26 Kategorien inklusive Typing. Ausserdem sind auch Tänze als 27. Kategorie vorhanden. Es gibt keine Beschränkung in der Anzahl der Animationen, allerdings sind mehrere nur in einigen Kategorien sinnvoll. Zudem sollte es auch in No-Script-Zonen funktionieren, aber beim Test auf Wright Plaza gings trotzdem nicht. Das control Event verhält sich wohl im OS anders als in SL.<br />
Achja das Skript ist nur für OpenSim geeignet, aber mit kleinen Änderungen geht es auch in SL. Ich habs ins Skript geschrieben wo.<br />
<br />
Bei Reset liest das Skript eine Notecard namens config ein. Dort müssen die Animationen in der Form<br />
<br />
AnimType = Typ der Animation (zB Walking)<br />
Animation 1<br />
Animation 2<br />
...<br />
<br />
eingetragen werden (Beispiel weiter unten). Es können pro Animationstyp so viele Animationen eingetragen werden wie gewünscht (keine Beschränkung auf 12 pro Typ), allerdings kann man nur bei Walks, Stands, Sits, Groundsits und Tänzen auswählen, bei allen anderen wird einfach die letzte genommen. Natürlich müssen die Animationen auch im Objekt sein, sonst gibts eine Meldung. Wenn in einer Kategorie nichts steht passiert auch nichts.<br />
Für den AO selber hab ich einfach zwei Prims zusammengelinkt und Texturen für Ein/Aus bzw. das Menü aufgebracht bzw. hineingelegt. Die Texturen hab ich von Marg's AO, dort liegen sie Full Perm drin.<br />
Im Hauptmenü kann man in die einzelnen Untermenüs verzweigen sowie sich auf den Boden setzen oder wieder aufstehen. Im Optionsmenü wird die Zeit für die Stands eingestellt und Art der Wechsel der Stands (nur einen Stand, der Reihe nach oder zufällig). Ausserdem kann man das Sitzen ein- bzw ausschalten. In allen anderen Menüs wählt man die entsprechende Animation.<br />
Der AO wird ans HUD an Bottom Right angehängt und verschiebt sich in den sichtbaren Bereich. Bei anderen Punkten muss man ihn verschieben oder den Wert von LocalPos im Skript ändern.<br />
Leider kann ich mein eigenes AO nicht weitergeben, weil die Animationen No Trans sind (ok ein leeres vielleicht). Dafür gibts das Skript umsonst :-)<br />
Viel Spass<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>string CAT = "AnimType";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Kennzeichnugn für Kategorie in der NC<br />
integer LinkOn = 1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Linknummer zum Ein/Ausschalten<br />
integer LinkMenu = 2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// LinkNummer fürs Menü<br />
string TextureOff = "Button.Off";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Textur wenn der AO aus ist<br />
string TextureOn = "Button.On";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Textur wenn der AO an ist<br />
vector LocalPos = &lt;0.000000,0.058893,0.126620&gt;;&nbsp;&nbsp;&nbsp;&nbsp;// Verschiebung bei Anhängen an Bottom Right<br />
<br />
list AnimTypes = ["Sitting on Ground", "Sitting", "Striding", "Crouching", "CrouchWalking",<br />
"Soft Landing", "Standing Up", "Falling Down", "Hovering Down", "Hovering Up",<br />
"FlyingSlow", "Flying", "Hovering", "Jumping", "PreJumping", "Running",<br />
"Turning Right", "Turning Left", "Walking", "Landing", "Standing",<br />
"Swimming Down", "Swimming Up", "Swimming Forward", "Floating", "Typing",<br />
"Dance"];<br />
<br />
// Variablen und Konstanten für die NC<br />
string NCNAME = "config";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Name der Notecard<br />
integer NCLine;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// die aktuelle Zeile der NC<br />
key NCid;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Kennung der NC<br />
integer State;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Abschnitt beim Einlesen<br />
integer Count;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Anzahl der gelesenen Anis<br />
<br />
// Variablen und Konstanten fürs Animieren<br />
list Stands;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Liste der Stand-Anis<br />
list Sits;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Liste der Sitz-Anis<br />
list Walks;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Liste der Walk-Anis<br />
list GroundSits;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Liste der Groundsits<br />
list Dances;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Liste der Tänze<br />
list Anims;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Liste der Animationen (einer pro Typ)<br />
<br />
integer StandTime = 40;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Dauer bis zur nächsten Stand-Ani<br />
integer StandType = 2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 0 = fest, 1 = nacheinander, 2 = zufällig<br />
integer CurAnimType;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// der Typ der aktuellen Animation<br />
string CurAni;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// der Name der aktuellen Animation<br />
integer SitAlways = FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Sitzen überschreiben<br />
integer TempType;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// zum Wiederherstellen nach Tippseln<br />
string TempAni;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// zum Wiederherstellen anch Tippseln<br />
<br />
integer On;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// HUD ein oder aus<br />
float TIME = 0.25;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Zeit für Timer<br />
<br />
// Variablen und Konstanten fürs Menü<br />
string NEXT = "&gt;&gt;&gt;";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Schaltflächen für vor und zurück<br />
string PREV = "&lt;&lt;&lt;";<br />
string DlgTitle;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Dialog-Text<br />
integer DlgChannel;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;// Chatkanal<br />
list DlgItems = [];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;// die Schaltflächen des Dialogs<br />
integer DlgPage = 0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// aktuelle Seite - wird vom Skript verwendet<br />
integer DlgType = -1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// das aktuelle Menü<br />
integer Listener;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// ID für den Kanal<br />
integer DlgNo = FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// wenn TRUE, Anzeige mit Zahlen auf den Tasten<br />
<br />
// allgemeines Menü<br />
Menu()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;list l = ["Ende"];<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(DlgType &gt; 1) l += ["Zurück"];<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(DlgType == 7) l += ["Stop"];<br />
&nbsp;&nbsp;&nbsp;&nbsp;list l1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;list l2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer x = llGetListLength(DlgItems);<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer len1 = 12 - llGetListLength(l);<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer len2 = len1 - 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer len3 = len2 - 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer start = (DlgPage - 1) * len3 + len2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(DlgPage == 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(x &lt;= len1) l2 = l + llList2List(DlgItems, 0, len2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l2 = l + llList2List(DlgItems, 0, len3);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l2 = llListInsertList(l2, [NEXT], 2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;} else<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSay(0, (string)(x - start + llGetListLength(l)));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((x - start + llGetListLength(l)) &lt; 12)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l2 = l + llList2List(DlgItems, start, start + len3);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l2 = llListInsertList(l2, [PREV], 0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l2 = l + llList2List(DlgItems, start, start + len3 - 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l2 = llListInsertList(l2, [NEXT], 2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l2 = llListInsertList(l2, [PREV], 0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;l1 = [];<br />
&nbsp;&nbsp;&nbsp;&nbsp;x = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;string s;<br />
&nbsp;&nbsp;&nbsp;&nbsp;string s1 = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(DlgNo)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i = 0; i &lt; llGetListLength(l2); i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s = llList2String(l2, i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(llListFindList(l, [s]) != -1 || s == NEXT || s == PREV) l1 += [s];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l1 += [++start];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s1 += (string)start + " - " + s +"&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;} else l1 = l2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;llListenRemove(Listener);<br />
&nbsp;&nbsp;&nbsp;&nbsp;Listener = llListen(DlgChannel, "", llGetOwner(), "");<br />
&nbsp;&nbsp;&nbsp;&nbsp;llDialog(llGetOwner(), DlgTitle + "&#92;n" + s1, l1, DlgChannel);<br />
}<br />
<br />
// allgemeine Menüprozedur<br />
integer DlgMain(string msg)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;llListenRemove(Listener);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(msg == PREV)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DlgPage--;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return TRUE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;} else if(msg == NEXT)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DlgPage++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return TRUE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;} else if(msg == " ")<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return TRUE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else return FALSE;<br />
}<br />
<br />
// Hauptmenü<br />
Menu1()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgItems = ["Reset", "Optionen", "Hinsetzen", "Dance", "Stands", "Walks", "Sits", "Groundsits"];<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(CurAnimType == 0) DlgItems = llListReplaceList(DlgItems, ["Aufstehen"], 2, 2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgTitle = "Wähle eine Kategorie:";<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgType = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgPage = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgNo = FALSE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Menu();<br />
}<br />
<br />
// Optionsmenü<br />
Menu2()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgItems = ["Stand 20s", "Stand 40s", "Stand 60s", "Stand 80s", "Stand 100s"];<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgItems += ["Zufällig", "Reihe", "Fest"];<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(SitAlways) DlgItems += ["Sitzen aus"]; else DlgItems += ["Sitzen an"];<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgTitle = "Standzeit: " + (string)StandTime + " s&#92;nWiederholung: ";<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(StandType == 0) DlgTitle += "Fest";<br />
&nbsp;&nbsp;&nbsp;&nbsp;else if(StandType == 1) DlgTitle += "Nacheinander";<br />
&nbsp;&nbsp;&nbsp;&nbsp;else if(StandType == 2) DlgTitle += "Zufällig";<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgTitle += "&#92;nImmer Sitzen: ";<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(SitAlways) DlgTitle += "an&#92;n"; else DlgTitle += "aus&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgTitle += "Wähle eine Option:";<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgType = 2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgPage = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgNo = FALSE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Menu();<br />
}<br />
<br />
// Menü für Stands<br />
Menu3()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgItems = Stands;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgTitle = "Wähle einen Stand&#92;nAktueller Stand: " + llList2String(Anims, 20);<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgType = 3;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgPage = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgNo = TRUE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Menu();<br />
}<br />
<br />
// Menü für Walks<br />
Menu4()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgItems = Walks;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgTitle = "Wähle einen Walk:&#92;nAktueller Walk: " + llList2String(Anims, 18);<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgType = 4;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgPage = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgNo = TRUE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Menu();<br />
}<br />
<br />
// Menü für Sits<br />
Menu5()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgItems = Sits;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgTitle = "Wähle einen Sit:&#92;nAktueller Sit: " + llList2String(Anims, 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgType = 5;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgPage = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgNo = TRUE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Menu();<br />
}<br />
<br />
// Menü für Groundsits<br />
Menu6()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgItems = GroundSits;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgTitle = "Wähle einen Groundsit:&#92;nAktueller Groundsit: " + llList2String(Anims, 0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgType = 6;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgPage = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgNo = TRUE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Menu();<br />
}<br />
<br />
// Menü für Tänze<br />
Menu7()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgItems = Dances;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgTitle = "Wähle einen Tanz:";<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgType = 7;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgPage = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgNo = TRUE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Menu();<br />
}<br />
<br />
// Verarbeitung einer Zeile aus der config<br />
ReadNCLine(string s)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;list l = llParseString2List(s, ["="], []);<br />
&nbsp;&nbsp;&nbsp;&nbsp;s = llStringTrim(llList2String(l, 0), STRING_TRIM);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(llToLower(s) == llToLower(CAT))<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s = llStringTrim(llList2String(l, 1), STRING_TRIM);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;integer x = llListFindList(AnimTypes, [s]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(x != -1) State = x;<br />
&nbsp;&nbsp;&nbsp;&nbsp;} else if(State != -1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(s != "")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Count++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(State == 0) GroundSits += [s];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(State == 1) Sits += [s];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(State == 18) Walks += [s];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(State == 20) Stands += [s];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(State == 26) Dances += [s];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Anims = llListReplaceList(Anims, [s], State, State);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(llGetInventoryType(s) != INVENTORY_ANIMATION) llOwnerSay("Warnung: Animation " + s + " nicht gefunden.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;NCid = llGetNotecardLine(NCNAME, NCLine++);<br />
}<br />
<br />
//Initialisierung<br />
Init()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;SetOff();<br />
&nbsp;&nbsp;&nbsp;&nbsp;Anims = [];<br />
&nbsp;&nbsp;&nbsp;&nbsp;GroundSits = [];<br />
&nbsp;&nbsp;&nbsp;&nbsp;Sits = [];<br />
&nbsp;&nbsp;&nbsp;&nbsp;Walks = [];<br />
&nbsp;&nbsp;&nbsp;&nbsp;Stands = [];<br />
&nbsp;&nbsp;&nbsp;&nbsp;Dances = [];<br />
&nbsp;&nbsp;&nbsp;&nbsp;CurAnimType = -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;CurAni = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;State = -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;for(i = 0; i &lt; llGetListLength(AnimTypes); i++) Anims += [""];<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgChannel = -((integer)llFrand(9999999) - 99999);<br />
}<br />
<br />
// startet eine Animation<br />
StartAni(integer Type, string Name)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;string s = CurAni;<br />
&nbsp;&nbsp;&nbsp;&nbsp;CurAni = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(Type == 1 &amp;&amp; !SitAlways)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurAnimType = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;if((Type == 16 || Type == 17) &amp;&amp; Name == "") Name = llList2String(Anims, 20);<br />
&nbsp;&nbsp;&nbsp;&nbsp;else if(Type == 2 &amp;&amp; Name == "") Name = llList2String(Anims, 18);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Striding = Walking<br />
&nbsp;&nbsp;&nbsp;&nbsp;else if(Type == 5 &amp;&amp; Name == "") Name = llList2String(Anims, 19);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Soft Landing = Landing<br />
&nbsp;&nbsp;&nbsp;&nbsp;else if(Type == 4 &amp;&amp; Name == "") Name = llList2String(Anims, 3);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Crouch Walking = Crouching<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(Name != "")<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(s != "")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llStopAnimation(s);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSleep(0.1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llStartAnimation(Name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurAni = Name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;CurAnimType = Type;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(Type == 20 &amp;&amp; StandType != 0) llResetTime();<br />
}<br />
<br />
// startet den nächsten Stand<br />
NextStand()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;string s = llList2String(Anims, 20);<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer x = llListFindList(Stands, [s]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(StandType == 1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x = ++x % llGetListLength(Stands);<br />
&nbsp;&nbsp;&nbsp;&nbsp;} else if(StandType == 2)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(llGetListLength(Stands) &gt; 1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x = (integer)llFrand(llGetListLength(Stands));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} while(llList2String(Stands, x) == s);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;s = llList2String(Stands, x);<br />
&nbsp;&nbsp;&nbsp;&nbsp;Anims = llListReplaceList(Anims, [s], 20, 20);<br />
&nbsp;&nbsp;&nbsp;&nbsp;StartAni(20, s);<br />
}<br />
<br />
// AO an<br />
SetOn()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;On = TRUE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;llSetLinkTexture(LinkOn, TextureOn, ALL_SIDES);<br />
&nbsp;&nbsp;&nbsp;&nbsp;CurAni = llGetAnimation(llGetOwner());<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer x = llListFindList(AnimTypes, [CurAni]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;StartAni(x, llList2String(Anims, x));<br />
&nbsp;&nbsp;&nbsp;&nbsp;llSetTimerEvent(TIME);<br />
}<br />
<br />
// AO aus<br />
SetOff()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;llSetLinkTexture(LinkOn, TextureOff, ALL_SIDES);<br />
&nbsp;&nbsp;&nbsp;&nbsp;On = FALSE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(CurAni != "") llStopAnimation(CurAni);<br />
&nbsp;&nbsp;&nbsp;&nbsp;llSetTimerEvent(0.0);<br />
}<br />
<br />
default<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;state_entry()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Init();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state readnc;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
state readnc<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;state_entry()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NCLine = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Count = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(llGetInventoryType(NCNAME) != INVENTORY_NOTECARD)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llOwnerSay("Keine config vorhanden. Angehalten.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NCid = llGetNotecardLine(NCNAME, NCLine++);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llOwnerSay("Lese config...");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;dataserver(key requested, string data)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(requested == NCid)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(data != EOF)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReadNCLine(data);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llOwnerSay((string)Count + " Animationen gelesen.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state running;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
state running<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;state_entry()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Listener = llListen(DlgChannel, "", NULL_KEY, "");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(llGetAttached()) llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;run_time_permissions(integer permissions)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(permissions &amp; PERMISSION_TAKE_CONTROLS) llTakeControls(CONTROL_BACK|CONTROL_FWD, TRUE, TRUE);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;changed(integer change)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(change &amp; CHANGED_INVENTORY) llResetScript();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// folgender Block gilt nur für OpenSim<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// für SL bitte löschen<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(change &amp; CHANGED_ANIMATION)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!On) return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string s = llGetAnimation(llGetOwner());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;integer x = llListFindList(AnimTypes, [s]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(x != CurAnimType &amp;&amp; x != -1) StartAni(x, llList2String(Anims, x));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Blockende<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(change &amp; CHANGED_TELEPORT) NextStand();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;attach(key attached)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(attached != NULL_KEY)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetPos(LocalPos);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;timer()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!On) return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;integer x = llGetAgentInfo(llGetOwner()) &amp; AGENT_TYPING;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(x != 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(CurAnimType != 25 &amp;&amp; CurAnimType != 26)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TempAni = CurAni;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TempType = CurAnimType;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StartAni(25, llList2String(Anims, 25));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(CurAnimType == 25) StartAni(TempType, TempAni);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(llGetTime() &gt;= StandTime)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(CurAnimType == 20) NextStand();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else llResetTime();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// für SL hier die Kommentarstriche entfernen<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//string s = llGetAnimation(llGetOwner());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//integer x = llListFindList(AnimTypes, [s]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//if(x != CurAnimType) StartAni(x, llList2String(Anims, x));<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;touch_start(integer total_number)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;integer x = llDetectedLinkNumber(0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(x == LinkMenu) Menu1();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(x == LinkOn)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(On) SetOff(); else SetOn();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;listen(integer channel, string name, key id, string message)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(DlgMain(message)) return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string s;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(DlgType == 1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(message == "Reset") llResetScript();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(message == "Ende") return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(message == "Optionen")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu2();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(message == "Stands")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu3();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(message == "Walks")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu4();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(message == "Sits")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu5();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(message == "Groundsits")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu6();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(message == "Dance")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu7();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(message == "Hinsetzen")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StartAni(0, llList2String(Anims, 0));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu1();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(message == "Aufstehen")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llStopAnimation(CurAni);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurAni = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurAnimType = -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NextStand();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu1();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(DlgType == 2)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(message == "Ende") return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(message == "Zurück")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu1();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(message == "Stand 20s") StandTime = 20;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(message == "Stand 40s") StandTime = 40;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(message == "Stand 60s") StandTime = 60;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(message == "Stand 80s") StandTime = 80;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(message == "Stand 100s") StandTime = 100;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(message == "Zufällig") StandType = 2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(message == "Reihe") StandType = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(message == "Fest") StandType = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(message == "Sitzen an")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SitAlways = TRUE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(CurAnimType == 1) StartAni(1, llList2String(Anims, 1));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(message == "Sitzen aus")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SitAlways = FALSE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(CurAnimType == 1 &amp;&amp; CurAni != "")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llStopAnimation(CurAni);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurAni = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llStartAnimation("sit");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu2();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(DlgType == 3)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(message == "Ende") return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(message == "Zurück")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu1();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s = llList2String(Stands, (integer)message - 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(s != "") Anims = llListReplaceList(Anims, [s], 20, 20);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(CurAnimType == 20) StartAni(20, s);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu3();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(DlgType == 4)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(message == "Ende") return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(message == "Zurück")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu1();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s = llList2String(Walks, (integer)message - 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(s != "") Anims = llListReplaceList(Anims, [s], 18, 18);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(CurAnimType == 18) StartAni(18, s);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu4();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(DlgType == 5)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(message == "Ende") return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(message == "Zurück")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu1();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s = llList2String(Sits, (integer)message - 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(s != "") Anims = llListReplaceList(Anims, [s], 1, 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(CurAnimType == 1) StartAni(1, s);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu5();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(DlgType == 6)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(message == "Ende") return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(message == "Zurück")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu1();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s = llList2String(GroundSits, (integer)message - 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(s != "") Anims = llListReplaceList(Anims, [s], 0, 0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(CurAnimType == 0) StartAni(0, s);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu6();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(DlgType == 7)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(message == "Ende") return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(message == "Zurück")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu1();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(message == "Stop")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(CurAnimType == 26)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llStopAnimation(CurAni);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurAni = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurAnimType = -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NextStand();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s = llList2String(Dances, (integer)message - 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(s != "") Anims = llListReplaceList(Anims, [s], 26, 26);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StartAni(26, s);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu7();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;control(key id, integer levels, integer edges)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!On) return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(edges &amp;&amp; llGetAnimation(llGetOwner()) == "Walking")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(levels &amp; edges &amp; (CONTROL_BACK | CONTROL_FWD))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(llGetListLength(Walks) &gt; 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llStopAnimation("walk");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llStopAnimation("female_walk");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StartAni(18, llList2String(Anims, 18));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</code></div></div>Beispiel-config:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>AnimType = Sitting on Ground<br />
GSitShy<br />
<br />
AnimType = Sitting<br />
sitShy1<br />
sitshy2<br />
<br />
AnimType = Striding<br />
<br />
AnimType = Crouching<br />
crouchshy<br />
<br />
AnimType = CrouchWalking<br />
<br />
AnimType = Soft Landing<br />
AnimType = Standing Up<br />
<br />
AnimType = Falling Down<br />
<br />
AnimType = Hovering Down<br />
HoverD<br />
<br />
AnimType = Hovering Up<br />
HoverU<br />
<br />
AnimType = FlyingSlow<br />
<br />
AnimType = Flying<br />
FlyShy<br />
<br />
AnimType = Hovering<br />
Hover<br />
<br />
Animtype = Jumping<br />
jumP<br />
<br />
Animtype = PreJumping<br />
Prejump<br />
<br />
AnimType = Running<br />
runf<br />
runfist<br />
<br />
AnimType = Turning Right<br />
TURNR<br />
<br />
AnimType = Turning Left<br />
TURNL<br />
<br />
Animtype = Walking<br />
sexywalk<br />
walk_bis<br />
walk 3<br />
<br />
AnimType = Landing<br />
LandingF<br />
<br />
Animtype = Standing<br />
stand1<br />
stand2<br />
stand2-2<br />
stand3<br />
stand4<br />
stand4-4<br />
stand6<br />
stand7<br />
stand8-1<br />
stand10<br />
standingf<br />
stand14<br />
stand14-1<br />
stand17<br />
stand17-1<br />
<br />
AnimType = Swimming Down<br />
<br />
AnimType = Swimming Up<br />
<br />
AnimType = Swimming Forward<br />
swimF<br />
<br />
AnimType = Floating<br />
float<br />
<br />
Animtype = Typing<br />
ftyping<br />
<br />
AnimType = Dance<br />
Butterscotch<br />
we love you girl<br />
weeeee</code></div></div>]]></description>
			<content:encoded><![CDATA[Neulich hatte ich nach einem AO gesucht und auch von Freunden welche bekommen. Die haben auch funktioniert, nur waren die eben entweder no Mod oder es war nicht alles drin was ich mir gewünscht hätte. Also hab ich kurzerhand einen eigenen AO geskriptet (was ich eigentlich vermeiden wollte). Dabei ist auch gleich noch ein Tanzball- und ein Poledance-Skript rausgekommen, aber das später. Hier ist nun der Extrakt.<br />
<br />
Kurzbeschreibung: Der AO überschreibt die Animationen in 26 Kategorien inklusive Typing. Ausserdem sind auch Tänze als 27. Kategorie vorhanden. Es gibt keine Beschränkung in der Anzahl der Animationen, allerdings sind mehrere nur in einigen Kategorien sinnvoll. Zudem sollte es auch in No-Script-Zonen funktionieren, aber beim Test auf Wright Plaza gings trotzdem nicht. Das control Event verhält sich wohl im OS anders als in SL.<br />
Achja das Skript ist nur für OpenSim geeignet, aber mit kleinen Änderungen geht es auch in SL. Ich habs ins Skript geschrieben wo.<br />
<br />
Bei Reset liest das Skript eine Notecard namens config ein. Dort müssen die Animationen in der Form<br />
<br />
AnimType = Typ der Animation (zB Walking)<br />
Animation 1<br />
Animation 2<br />
...<br />
<br />
eingetragen werden (Beispiel weiter unten). Es können pro Animationstyp so viele Animationen eingetragen werden wie gewünscht (keine Beschränkung auf 12 pro Typ), allerdings kann man nur bei Walks, Stands, Sits, Groundsits und Tänzen auswählen, bei allen anderen wird einfach die letzte genommen. Natürlich müssen die Animationen auch im Objekt sein, sonst gibts eine Meldung. Wenn in einer Kategorie nichts steht passiert auch nichts.<br />
Für den AO selber hab ich einfach zwei Prims zusammengelinkt und Texturen für Ein/Aus bzw. das Menü aufgebracht bzw. hineingelegt. Die Texturen hab ich von Marg's AO, dort liegen sie Full Perm drin.<br />
Im Hauptmenü kann man in die einzelnen Untermenüs verzweigen sowie sich auf den Boden setzen oder wieder aufstehen. Im Optionsmenü wird die Zeit für die Stands eingestellt und Art der Wechsel der Stands (nur einen Stand, der Reihe nach oder zufällig). Ausserdem kann man das Sitzen ein- bzw ausschalten. In allen anderen Menüs wählt man die entsprechende Animation.<br />
Der AO wird ans HUD an Bottom Right angehängt und verschiebt sich in den sichtbaren Bereich. Bei anderen Punkten muss man ihn verschieben oder den Wert von LocalPos im Skript ändern.<br />
Leider kann ich mein eigenes AO nicht weitergeben, weil die Animationen No Trans sind (ok ein leeres vielleicht). Dafür gibts das Skript umsonst :-)<br />
Viel Spass<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>string CAT = "AnimType";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Kennzeichnugn für Kategorie in der NC<br />
integer LinkOn = 1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Linknummer zum Ein/Ausschalten<br />
integer LinkMenu = 2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// LinkNummer fürs Menü<br />
string TextureOff = "Button.Off";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Textur wenn der AO aus ist<br />
string TextureOn = "Button.On";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Textur wenn der AO an ist<br />
vector LocalPos = &lt;0.000000,0.058893,0.126620&gt;;&nbsp;&nbsp;&nbsp;&nbsp;// Verschiebung bei Anhängen an Bottom Right<br />
<br />
list AnimTypes = ["Sitting on Ground", "Sitting", "Striding", "Crouching", "CrouchWalking",<br />
"Soft Landing", "Standing Up", "Falling Down", "Hovering Down", "Hovering Up",<br />
"FlyingSlow", "Flying", "Hovering", "Jumping", "PreJumping", "Running",<br />
"Turning Right", "Turning Left", "Walking", "Landing", "Standing",<br />
"Swimming Down", "Swimming Up", "Swimming Forward", "Floating", "Typing",<br />
"Dance"];<br />
<br />
// Variablen und Konstanten für die NC<br />
string NCNAME = "config";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Name der Notecard<br />
integer NCLine;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// die aktuelle Zeile der NC<br />
key NCid;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Kennung der NC<br />
integer State;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Abschnitt beim Einlesen<br />
integer Count;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Anzahl der gelesenen Anis<br />
<br />
// Variablen und Konstanten fürs Animieren<br />
list Stands;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Liste der Stand-Anis<br />
list Sits;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Liste der Sitz-Anis<br />
list Walks;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Liste der Walk-Anis<br />
list GroundSits;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Liste der Groundsits<br />
list Dances;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Liste der Tänze<br />
list Anims;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Liste der Animationen (einer pro Typ)<br />
<br />
integer StandTime = 40;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Dauer bis zur nächsten Stand-Ani<br />
integer StandType = 2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 0 = fest, 1 = nacheinander, 2 = zufällig<br />
integer CurAnimType;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// der Typ der aktuellen Animation<br />
string CurAni;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// der Name der aktuellen Animation<br />
integer SitAlways = FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Sitzen überschreiben<br />
integer TempType;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// zum Wiederherstellen nach Tippseln<br />
string TempAni;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// zum Wiederherstellen anch Tippseln<br />
<br />
integer On;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// HUD ein oder aus<br />
float TIME = 0.25;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Zeit für Timer<br />
<br />
// Variablen und Konstanten fürs Menü<br />
string NEXT = "&gt;&gt;&gt;";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Schaltflächen für vor und zurück<br />
string PREV = "&lt;&lt;&lt;";<br />
string DlgTitle;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Dialog-Text<br />
integer DlgChannel;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;// Chatkanal<br />
list DlgItems = [];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;// die Schaltflächen des Dialogs<br />
integer DlgPage = 0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// aktuelle Seite - wird vom Skript verwendet<br />
integer DlgType = -1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// das aktuelle Menü<br />
integer Listener;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// ID für den Kanal<br />
integer DlgNo = FALSE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// wenn TRUE, Anzeige mit Zahlen auf den Tasten<br />
<br />
// allgemeines Menü<br />
Menu()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;list l = ["Ende"];<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(DlgType &gt; 1) l += ["Zurück"];<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(DlgType == 7) l += ["Stop"];<br />
&nbsp;&nbsp;&nbsp;&nbsp;list l1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;list l2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer x = llGetListLength(DlgItems);<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer len1 = 12 - llGetListLength(l);<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer len2 = len1 - 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer len3 = len2 - 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer start = (DlgPage - 1) * len3 + len2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(DlgPage == 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(x &lt;= len1) l2 = l + llList2List(DlgItems, 0, len2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l2 = l + llList2List(DlgItems, 0, len3);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l2 = llListInsertList(l2, [NEXT], 2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;} else<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSay(0, (string)(x - start + llGetListLength(l)));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((x - start + llGetListLength(l)) &lt; 12)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l2 = l + llList2List(DlgItems, start, start + len3);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l2 = llListInsertList(l2, [PREV], 0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l2 = l + llList2List(DlgItems, start, start + len3 - 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l2 = llListInsertList(l2, [NEXT], 2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l2 = llListInsertList(l2, [PREV], 0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;l1 = [];<br />
&nbsp;&nbsp;&nbsp;&nbsp;x = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;string s;<br />
&nbsp;&nbsp;&nbsp;&nbsp;string s1 = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(DlgNo)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i = 0; i &lt; llGetListLength(l2); i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s = llList2String(l2, i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(llListFindList(l, [s]) != -1 || s == NEXT || s == PREV) l1 += [s];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l1 += [++start];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s1 += (string)start + " - " + s +"&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;} else l1 = l2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;llListenRemove(Listener);<br />
&nbsp;&nbsp;&nbsp;&nbsp;Listener = llListen(DlgChannel, "", llGetOwner(), "");<br />
&nbsp;&nbsp;&nbsp;&nbsp;llDialog(llGetOwner(), DlgTitle + "&#92;n" + s1, l1, DlgChannel);<br />
}<br />
<br />
// allgemeine Menüprozedur<br />
integer DlgMain(string msg)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;llListenRemove(Listener);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(msg == PREV)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DlgPage--;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return TRUE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;} else if(msg == NEXT)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DlgPage++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return TRUE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;} else if(msg == " ")<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return TRUE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else return FALSE;<br />
}<br />
<br />
// Hauptmenü<br />
Menu1()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgItems = ["Reset", "Optionen", "Hinsetzen", "Dance", "Stands", "Walks", "Sits", "Groundsits"];<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(CurAnimType == 0) DlgItems = llListReplaceList(DlgItems, ["Aufstehen"], 2, 2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgTitle = "Wähle eine Kategorie:";<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgType = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgPage = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgNo = FALSE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Menu();<br />
}<br />
<br />
// Optionsmenü<br />
Menu2()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgItems = ["Stand 20s", "Stand 40s", "Stand 60s", "Stand 80s", "Stand 100s"];<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgItems += ["Zufällig", "Reihe", "Fest"];<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(SitAlways) DlgItems += ["Sitzen aus"]; else DlgItems += ["Sitzen an"];<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgTitle = "Standzeit: " + (string)StandTime + " s&#92;nWiederholung: ";<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(StandType == 0) DlgTitle += "Fest";<br />
&nbsp;&nbsp;&nbsp;&nbsp;else if(StandType == 1) DlgTitle += "Nacheinander";<br />
&nbsp;&nbsp;&nbsp;&nbsp;else if(StandType == 2) DlgTitle += "Zufällig";<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgTitle += "&#92;nImmer Sitzen: ";<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(SitAlways) DlgTitle += "an&#92;n"; else DlgTitle += "aus&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgTitle += "Wähle eine Option:";<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgType = 2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgPage = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgNo = FALSE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Menu();<br />
}<br />
<br />
// Menü für Stands<br />
Menu3()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgItems = Stands;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgTitle = "Wähle einen Stand&#92;nAktueller Stand: " + llList2String(Anims, 20);<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgType = 3;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgPage = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgNo = TRUE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Menu();<br />
}<br />
<br />
// Menü für Walks<br />
Menu4()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgItems = Walks;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgTitle = "Wähle einen Walk:&#92;nAktueller Walk: " + llList2String(Anims, 18);<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgType = 4;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgPage = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgNo = TRUE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Menu();<br />
}<br />
<br />
// Menü für Sits<br />
Menu5()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgItems = Sits;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgTitle = "Wähle einen Sit:&#92;nAktueller Sit: " + llList2String(Anims, 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgType = 5;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgPage = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgNo = TRUE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Menu();<br />
}<br />
<br />
// Menü für Groundsits<br />
Menu6()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgItems = GroundSits;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgTitle = "Wähle einen Groundsit:&#92;nAktueller Groundsit: " + llList2String(Anims, 0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgType = 6;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgPage = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgNo = TRUE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Menu();<br />
}<br />
<br />
// Menü für Tänze<br />
Menu7()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgItems = Dances;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgTitle = "Wähle einen Tanz:";<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgType = 7;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgPage = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgNo = TRUE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Menu();<br />
}<br />
<br />
// Verarbeitung einer Zeile aus der config<br />
ReadNCLine(string s)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;list l = llParseString2List(s, ["="], []);<br />
&nbsp;&nbsp;&nbsp;&nbsp;s = llStringTrim(llList2String(l, 0), STRING_TRIM);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(llToLower(s) == llToLower(CAT))<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s = llStringTrim(llList2String(l, 1), STRING_TRIM);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;integer x = llListFindList(AnimTypes, [s]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(x != -1) State = x;<br />
&nbsp;&nbsp;&nbsp;&nbsp;} else if(State != -1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(s != "")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Count++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(State == 0) GroundSits += [s];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(State == 1) Sits += [s];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(State == 18) Walks += [s];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(State == 20) Stands += [s];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(State == 26) Dances += [s];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Anims = llListReplaceList(Anims, [s], State, State);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(llGetInventoryType(s) != INVENTORY_ANIMATION) llOwnerSay("Warnung: Animation " + s + " nicht gefunden.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;NCid = llGetNotecardLine(NCNAME, NCLine++);<br />
}<br />
<br />
//Initialisierung<br />
Init()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;SetOff();<br />
&nbsp;&nbsp;&nbsp;&nbsp;Anims = [];<br />
&nbsp;&nbsp;&nbsp;&nbsp;GroundSits = [];<br />
&nbsp;&nbsp;&nbsp;&nbsp;Sits = [];<br />
&nbsp;&nbsp;&nbsp;&nbsp;Walks = [];<br />
&nbsp;&nbsp;&nbsp;&nbsp;Stands = [];<br />
&nbsp;&nbsp;&nbsp;&nbsp;Dances = [];<br />
&nbsp;&nbsp;&nbsp;&nbsp;CurAnimType = -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;CurAni = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;State = -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;for(i = 0; i &lt; llGetListLength(AnimTypes); i++) Anims += [""];<br />
&nbsp;&nbsp;&nbsp;&nbsp;DlgChannel = -((integer)llFrand(9999999) - 99999);<br />
}<br />
<br />
// startet eine Animation<br />
StartAni(integer Type, string Name)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;string s = CurAni;<br />
&nbsp;&nbsp;&nbsp;&nbsp;CurAni = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(Type == 1 &amp;&amp; !SitAlways)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurAnimType = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;if((Type == 16 || Type == 17) &amp;&amp; Name == "") Name = llList2String(Anims, 20);<br />
&nbsp;&nbsp;&nbsp;&nbsp;else if(Type == 2 &amp;&amp; Name == "") Name = llList2String(Anims, 18);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Striding = Walking<br />
&nbsp;&nbsp;&nbsp;&nbsp;else if(Type == 5 &amp;&amp; Name == "") Name = llList2String(Anims, 19);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Soft Landing = Landing<br />
&nbsp;&nbsp;&nbsp;&nbsp;else if(Type == 4 &amp;&amp; Name == "") Name = llList2String(Anims, 3);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Crouch Walking = Crouching<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(Name != "")<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(s != "")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llStopAnimation(s);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSleep(0.1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llStartAnimation(Name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurAni = Name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;CurAnimType = Type;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(Type == 20 &amp;&amp; StandType != 0) llResetTime();<br />
}<br />
<br />
// startet den nächsten Stand<br />
NextStand()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;string s = llList2String(Anims, 20);<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer x = llListFindList(Stands, [s]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(StandType == 1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x = ++x % llGetListLength(Stands);<br />
&nbsp;&nbsp;&nbsp;&nbsp;} else if(StandType == 2)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(llGetListLength(Stands) &gt; 1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x = (integer)llFrand(llGetListLength(Stands));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} while(llList2String(Stands, x) == s);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;s = llList2String(Stands, x);<br />
&nbsp;&nbsp;&nbsp;&nbsp;Anims = llListReplaceList(Anims, [s], 20, 20);<br />
&nbsp;&nbsp;&nbsp;&nbsp;StartAni(20, s);<br />
}<br />
<br />
// AO an<br />
SetOn()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;On = TRUE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;llSetLinkTexture(LinkOn, TextureOn, ALL_SIDES);<br />
&nbsp;&nbsp;&nbsp;&nbsp;CurAni = llGetAnimation(llGetOwner());<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer x = llListFindList(AnimTypes, [CurAni]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;StartAni(x, llList2String(Anims, x));<br />
&nbsp;&nbsp;&nbsp;&nbsp;llSetTimerEvent(TIME);<br />
}<br />
<br />
// AO aus<br />
SetOff()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;llSetLinkTexture(LinkOn, TextureOff, ALL_SIDES);<br />
&nbsp;&nbsp;&nbsp;&nbsp;On = FALSE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(CurAni != "") llStopAnimation(CurAni);<br />
&nbsp;&nbsp;&nbsp;&nbsp;llSetTimerEvent(0.0);<br />
}<br />
<br />
default<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;state_entry()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Init();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state readnc;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
state readnc<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;state_entry()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NCLine = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Count = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(llGetInventoryType(NCNAME) != INVENTORY_NOTECARD)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llOwnerSay("Keine config vorhanden. Angehalten.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NCid = llGetNotecardLine(NCNAME, NCLine++);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llOwnerSay("Lese config...");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;dataserver(key requested, string data)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(requested == NCid)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(data != EOF)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReadNCLine(data);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llOwnerSay((string)Count + " Animationen gelesen.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state running;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
state running<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;state_entry()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Listener = llListen(DlgChannel, "", NULL_KEY, "");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(llGetAttached()) llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;run_time_permissions(integer permissions)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(permissions &amp; PERMISSION_TAKE_CONTROLS) llTakeControls(CONTROL_BACK|CONTROL_FWD, TRUE, TRUE);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;changed(integer change)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(change &amp; CHANGED_INVENTORY) llResetScript();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// folgender Block gilt nur für OpenSim<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// für SL bitte löschen<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(change &amp; CHANGED_ANIMATION)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!On) return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string s = llGetAnimation(llGetOwner());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;integer x = llListFindList(AnimTypes, [s]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(x != CurAnimType &amp;&amp; x != -1) StartAni(x, llList2String(Anims, x));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Blockende<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(change &amp; CHANGED_TELEPORT) NextStand();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;attach(key attached)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(attached != NULL_KEY)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetPos(LocalPos);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;timer()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!On) return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;integer x = llGetAgentInfo(llGetOwner()) &amp; AGENT_TYPING;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(x != 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(CurAnimType != 25 &amp;&amp; CurAnimType != 26)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TempAni = CurAni;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TempType = CurAnimType;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StartAni(25, llList2String(Anims, 25));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(CurAnimType == 25) StartAni(TempType, TempAni);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(llGetTime() &gt;= StandTime)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(CurAnimType == 20) NextStand();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else llResetTime();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// für SL hier die Kommentarstriche entfernen<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//string s = llGetAnimation(llGetOwner());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//integer x = llListFindList(AnimTypes, [s]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//if(x != CurAnimType) StartAni(x, llList2String(Anims, x));<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;touch_start(integer total_number)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;integer x = llDetectedLinkNumber(0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(x == LinkMenu) Menu1();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(x == LinkOn)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(On) SetOff(); else SetOn();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;listen(integer channel, string name, key id, string message)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(DlgMain(message)) return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string s;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(DlgType == 1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(message == "Reset") llResetScript();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(message == "Ende") return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(message == "Optionen")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu2();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(message == "Stands")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu3();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(message == "Walks")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu4();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(message == "Sits")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu5();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(message == "Groundsits")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu6();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(message == "Dance")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu7();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(message == "Hinsetzen")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StartAni(0, llList2String(Anims, 0));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu1();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(message == "Aufstehen")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llStopAnimation(CurAni);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurAni = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurAnimType = -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NextStand();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu1();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(DlgType == 2)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(message == "Ende") return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(message == "Zurück")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu1();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(message == "Stand 20s") StandTime = 20;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(message == "Stand 40s") StandTime = 40;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(message == "Stand 60s") StandTime = 60;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(message == "Stand 80s") StandTime = 80;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(message == "Stand 100s") StandTime = 100;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(message == "Zufällig") StandType = 2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(message == "Reihe") StandType = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(message == "Fest") StandType = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(message == "Sitzen an")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SitAlways = TRUE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(CurAnimType == 1) StartAni(1, llList2String(Anims, 1));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(message == "Sitzen aus")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SitAlways = FALSE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(CurAnimType == 1 &amp;&amp; CurAni != "")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llStopAnimation(CurAni);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurAni = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llStartAnimation("sit");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu2();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(DlgType == 3)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(message == "Ende") return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(message == "Zurück")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu1();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s = llList2String(Stands, (integer)message - 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(s != "") Anims = llListReplaceList(Anims, [s], 20, 20);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(CurAnimType == 20) StartAni(20, s);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu3();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(DlgType == 4)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(message == "Ende") return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(message == "Zurück")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu1();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s = llList2String(Walks, (integer)message - 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(s != "") Anims = llListReplaceList(Anims, [s], 18, 18);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(CurAnimType == 18) StartAni(18, s);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu4();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(DlgType == 5)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(message == "Ende") return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(message == "Zurück")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu1();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s = llList2String(Sits, (integer)message - 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(s != "") Anims = llListReplaceList(Anims, [s], 1, 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(CurAnimType == 1) StartAni(1, s);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu5();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(DlgType == 6)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(message == "Ende") return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(message == "Zurück")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu1();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s = llList2String(GroundSits, (integer)message - 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(s != "") Anims = llListReplaceList(Anims, [s], 0, 0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(CurAnimType == 0) StartAni(0, s);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu6();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(DlgType == 7)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(message == "Ende") return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(message == "Zurück")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu1();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if(message == "Stop")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(CurAnimType == 26)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llStopAnimation(CurAni);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurAni = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurAnimType = -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NextStand();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s = llList2String(Dances, (integer)message - 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(s != "") Anims = llListReplaceList(Anims, [s], 26, 26);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StartAni(26, s);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu7();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;control(key id, integer levels, integer edges)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!On) return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(edges &amp;&amp; llGetAnimation(llGetOwner()) == "Walking")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(levels &amp; edges &amp; (CONTROL_BACK | CONTROL_FWD))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(llGetListLength(Walks) &gt; 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llStopAnimation("walk");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llStopAnimation("female_walk");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StartAni(18, llList2String(Anims, 18));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</code></div></div>Beispiel-config:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>AnimType = Sitting on Ground<br />
GSitShy<br />
<br />
AnimType = Sitting<br />
sitShy1<br />
sitshy2<br />
<br />
AnimType = Striding<br />
<br />
AnimType = Crouching<br />
crouchshy<br />
<br />
AnimType = CrouchWalking<br />
<br />
AnimType = Soft Landing<br />
AnimType = Standing Up<br />
<br />
AnimType = Falling Down<br />
<br />
AnimType = Hovering Down<br />
HoverD<br />
<br />
AnimType = Hovering Up<br />
HoverU<br />
<br />
AnimType = FlyingSlow<br />
<br />
AnimType = Flying<br />
FlyShy<br />
<br />
AnimType = Hovering<br />
Hover<br />
<br />
Animtype = Jumping<br />
jumP<br />
<br />
Animtype = PreJumping<br />
Prejump<br />
<br />
AnimType = Running<br />
runf<br />
runfist<br />
<br />
AnimType = Turning Right<br />
TURNR<br />
<br />
AnimType = Turning Left<br />
TURNL<br />
<br />
Animtype = Walking<br />
sexywalk<br />
walk_bis<br />
walk 3<br />
<br />
AnimType = Landing<br />
LandingF<br />
<br />
Animtype = Standing<br />
stand1<br />
stand2<br />
stand2-2<br />
stand3<br />
stand4<br />
stand4-4<br />
stand6<br />
stand7<br />
stand8-1<br />
stand10<br />
standingf<br />
stand14<br />
stand14-1<br />
stand17<br />
stand17-1<br />
<br />
AnimType = Swimming Down<br />
<br />
AnimType = Swimming Up<br />
<br />
AnimType = Swimming Forward<br />
swimF<br />
<br />
AnimType = Floating<br />
float<br />
<br />
Animtype = Typing<br />
ftyping<br />
<br />
AnimType = Dance<br />
Butterscotch<br />
we love you girl<br />
weeeee</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Lampenskript]]></title>
			<link>https://www.gridtalk.de/showthread.php?tid=858</link>
			<pubDate>Tue, 06 Nov 2012 11:32:22 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://www.gridtalk.de/member.php?action=profile&uid=10">Rebekka Revnik</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.gridtalk.de/showthread.php?tid=858</guid>
			<description><![CDATA[Ich richte grad mein Haus ein und da hat mich bei den Lampen gestört, dass da immer massenhaft Skripte drin waren. Also hab ich mir mal ein Lampen-Skript gemacht, das für alles geeignet ist und das bei mir jetzt in alle Lampen kommt. Vielleicht kanns ja noch jemand gebrauchen.<br />
Außerdem hat hier schon zu lange keiner mehr was geschrieben :-)<br />
<br />
Mal ne kurze Erläuterung:<br />
Mit dem Skript kann man eine oder mehrere Lampen steuern, per Klick und/oder automatisch bei Nacht oder Tag einschalten. Wer nur die Automatik Wünscht, löscht einfach das Event touch_start aus dem Skript raus. Per Linkset wird nur ein Skript benötigt.<br />
Die Prims der Lampe, die leuchten sollen, benennt ihr wie es bei PRIMNAME steht, also hier "light". Der gilt immer für das gesamte Linkset, also kann man auch mehrere Lampen verlinken und braucht dann nur das eine Skript.<br />
Der Channel ist nur dafür da, um nicht verlinkte Lampen simweit fernzusteuern, in jede Lampe muss dann das Skript rein. Mit unterschiedlichen Kanälen kann man so auch verschiedene Lampengruppen steuern. Wird das nicht benötigt, einfach nur Channel = 0 setzen.<br />
Wenn AUTOMATIC = TRUE ist dann wird die Lampe automatisch bei Nacht eingeschaltet (oder bei Tag wenn ON_AT_NIGHT = FALSE ist, warum auch immer man das brauchen sollte). Man kann die Lampe dann aber trotzdem per Hand abschalten, sie wird dann erst wieder nächste Nacht automatisch eingeschaltet.<br />
Es folgen die drei möglichen Prim-Eigenschaften Glow, Light und Fullbright, die kann jeder so einstellen wie er will. Die jeweils erste Konstante mit _ON am Ende gibt an, ob diese Eigenschaft verwendet werden soll oder nicht. (Wenn alle drei ausgeschaltet sind ist es aber keine Lampe mehr.)<br />
Und zum Schluss kann mans noch einen Sound ertönen lassen wenn man die Lampe anklickt...<br />
<br />
Edit: Sorry Zeile vergessen<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>// Konstanten<br />
<br />
// Allgemeines<br />
string&nbsp;&nbsp;PRIMNAME = "light";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Name der Prims die als Lampen fungieren<br />
integer CHANNEL = -99999;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Listenerkanal (0 wenn nicht gewünscht)<br />
<br />
// Nachtschaltung<br />
integer AUTOMATIC = TRUE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Soll automatisch eingeschaltet werden?<br />
integer ON_AT_NIGHT = TRUE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Lampe an bei Nacht (wenn FALSE dann an bei Tag)<br />
<br />
// Glühen<br />
integer GLOW_ON = TRUE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Glühen an oder nicht<br />
float GLOW_INTENSITY = 0.5;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Intensität des Glühens (0..1)<br />
integer GLOW_SIDE = ALL_SIDES;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Seite(n) fürs Glühen<br />
<br />
// Leuchten<br />
integer LIGHT_ON = TRUE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Licht an oder nicht<br />
vector LIGHT_COLOR = &lt;1.0, 1.0, 1.0&gt;;&nbsp;&nbsp;&nbsp;&nbsp;// Farbe für Licht<br />
float LIGHT_INTENSITY = 1.0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Intensität des Leuchtens (0..1)<br />
float LIGHT_RADIUS = 5.0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Lichtradius in m<br />
float LIGHT_FALLOFF = 0.75;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Abfall des Leuchtens<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
// Helligkeit<br />
integer BRIGHT_ON = TRUE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Helligkeit an oder nicht<br />
integer BRIGHT_SIDE = ALL_SIDES;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Seite(n) für die Helligkeit<br />
<br />
// Schalter-Sound<br />
integer PLAY_SOUND = TRUE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Sound an oder nicht<br />
float SOUND_VOL = 0.5;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Lautstärke (0..1)<br />
string&nbsp;&nbsp;SOUND = "bac3e333-9624-4b1a-ade2-d2b01d5960aa";&nbsp;&nbsp;&nbsp;&nbsp;// ein Klicken<br />
<br />
// Variablen<br />
<br />
integer Mode;<br />
integer On;<br />
integer LastCheck = FALSE;<br />
<br />
LightOn()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;list l = [];<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(LIGHT_ON) l += [PRIM_POINT_LIGHT, TRUE, LIGHT_COLOR, LIGHT_INTENSITY, LIGHT_RADIUS, LIGHT_FALLOFF];<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(GLOW_ON) l += [PRIM_GLOW, GLOW_SIDE, GLOW_INTENSITY];<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(BRIGHT_ON) l += [PRIM_FULLBRIGHT, TRUE];<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer x = llGetNumberOfPrims();<br />
&nbsp;&nbsp;&nbsp;&nbsp;for(i = 1; i &lt;= x; i++) if(llGetLinkName(i) == PRIMNAME) llSetLinkPrimitiveParamsFast(i, l);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(CHANNEL != 0) llRegionSay(CHANNEL, (string)TRUE);<br />
&nbsp;&nbsp;&nbsp;&nbsp;On = TRUE;<br />
}<br />
<br />
LightOff()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;list l = [];<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(LIGHT_ON) l += [PRIM_POINT_LIGHT, FALSE, LIGHT_COLOR, LIGHT_INTENSITY, LIGHT_RADIUS, LIGHT_FALLOFF];<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(GLOW_ON) l += [PRIM_GLOW, GLOW_SIDE, 0.0];<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(BRIGHT_ON) l += [PRIM_FULLBRIGHT, FALSE];<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer x = llGetNumberOfPrims();<br />
&nbsp;&nbsp;&nbsp;&nbsp;for(i = 1; i &lt;= x; i++) if(llGetLinkName(i) == PRIMNAME) llSetLinkPrimitiveParamsFast(i, l);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(CHANNEL != 0) llRegionSay(CHANNEL, (string)FALSE);<br />
&nbsp;&nbsp;&nbsp;&nbsp;On = FALSE;<br />
}<br />
<br />
Switch(integer on)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(on) LightOn(); else LightOff();<br />
}<br />
<br />
default {<br />
&nbsp;&nbsp;&nbsp;&nbsp;state_entry()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Mode = FALSE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;On = FALSE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Switch(On);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(CHANNEL != 0) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llRegionSay(CHANNEL, (string)On);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llListen(CHANNEL, "", NULL_KEY, "");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(AUTOMATIC) llSetTimerEvent(60.0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;touch_start(integer total_number)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (PLAY_SOUND) llPlaySound(SOUND, SOUND_VOL);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;On = !On;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Switch(On);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;on_rez(integer start_param)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llResetScript();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;timer()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vector v = llGetSunDirection();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (v.z &lt; 0.0) Mode = ON_AT_NIGHT;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else Mode = !ON_AT_NIGHT;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (Mode != LastCheck)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Switch(Mode);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LastCheck = Mode;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;listen(integer channel, string name, key id, string message)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;On = (integer)message;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Switch(On);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</code></div></div>]]></description>
			<content:encoded><![CDATA[Ich richte grad mein Haus ein und da hat mich bei den Lampen gestört, dass da immer massenhaft Skripte drin waren. Also hab ich mir mal ein Lampen-Skript gemacht, das für alles geeignet ist und das bei mir jetzt in alle Lampen kommt. Vielleicht kanns ja noch jemand gebrauchen.<br />
Außerdem hat hier schon zu lange keiner mehr was geschrieben :-)<br />
<br />
Mal ne kurze Erläuterung:<br />
Mit dem Skript kann man eine oder mehrere Lampen steuern, per Klick und/oder automatisch bei Nacht oder Tag einschalten. Wer nur die Automatik Wünscht, löscht einfach das Event touch_start aus dem Skript raus. Per Linkset wird nur ein Skript benötigt.<br />
Die Prims der Lampe, die leuchten sollen, benennt ihr wie es bei PRIMNAME steht, also hier "light". Der gilt immer für das gesamte Linkset, also kann man auch mehrere Lampen verlinken und braucht dann nur das eine Skript.<br />
Der Channel ist nur dafür da, um nicht verlinkte Lampen simweit fernzusteuern, in jede Lampe muss dann das Skript rein. Mit unterschiedlichen Kanälen kann man so auch verschiedene Lampengruppen steuern. Wird das nicht benötigt, einfach nur Channel = 0 setzen.<br />
Wenn AUTOMATIC = TRUE ist dann wird die Lampe automatisch bei Nacht eingeschaltet (oder bei Tag wenn ON_AT_NIGHT = FALSE ist, warum auch immer man das brauchen sollte). Man kann die Lampe dann aber trotzdem per Hand abschalten, sie wird dann erst wieder nächste Nacht automatisch eingeschaltet.<br />
Es folgen die drei möglichen Prim-Eigenschaften Glow, Light und Fullbright, die kann jeder so einstellen wie er will. Die jeweils erste Konstante mit _ON am Ende gibt an, ob diese Eigenschaft verwendet werden soll oder nicht. (Wenn alle drei ausgeschaltet sind ist es aber keine Lampe mehr.)<br />
Und zum Schluss kann mans noch einen Sound ertönen lassen wenn man die Lampe anklickt...<br />
<br />
Edit: Sorry Zeile vergessen<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>// Konstanten<br />
<br />
// Allgemeines<br />
string&nbsp;&nbsp;PRIMNAME = "light";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Name der Prims die als Lampen fungieren<br />
integer CHANNEL = -99999;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Listenerkanal (0 wenn nicht gewünscht)<br />
<br />
// Nachtschaltung<br />
integer AUTOMATIC = TRUE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Soll automatisch eingeschaltet werden?<br />
integer ON_AT_NIGHT = TRUE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Lampe an bei Nacht (wenn FALSE dann an bei Tag)<br />
<br />
// Glühen<br />
integer GLOW_ON = TRUE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Glühen an oder nicht<br />
float GLOW_INTENSITY = 0.5;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Intensität des Glühens (0..1)<br />
integer GLOW_SIDE = ALL_SIDES;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Seite(n) fürs Glühen<br />
<br />
// Leuchten<br />
integer LIGHT_ON = TRUE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Licht an oder nicht<br />
vector LIGHT_COLOR = &lt;1.0, 1.0, 1.0&gt;;&nbsp;&nbsp;&nbsp;&nbsp;// Farbe für Licht<br />
float LIGHT_INTENSITY = 1.0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Intensität des Leuchtens (0..1)<br />
float LIGHT_RADIUS = 5.0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Lichtradius in m<br />
float LIGHT_FALLOFF = 0.75;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Abfall des Leuchtens<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
// Helligkeit<br />
integer BRIGHT_ON = TRUE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Helligkeit an oder nicht<br />
integer BRIGHT_SIDE = ALL_SIDES;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Seite(n) für die Helligkeit<br />
<br />
// Schalter-Sound<br />
integer PLAY_SOUND = TRUE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Sound an oder nicht<br />
float SOUND_VOL = 0.5;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Lautstärke (0..1)<br />
string&nbsp;&nbsp;SOUND = "bac3e333-9624-4b1a-ade2-d2b01d5960aa";&nbsp;&nbsp;&nbsp;&nbsp;// ein Klicken<br />
<br />
// Variablen<br />
<br />
integer Mode;<br />
integer On;<br />
integer LastCheck = FALSE;<br />
<br />
LightOn()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;list l = [];<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(LIGHT_ON) l += [PRIM_POINT_LIGHT, TRUE, LIGHT_COLOR, LIGHT_INTENSITY, LIGHT_RADIUS, LIGHT_FALLOFF];<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(GLOW_ON) l += [PRIM_GLOW, GLOW_SIDE, GLOW_INTENSITY];<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(BRIGHT_ON) l += [PRIM_FULLBRIGHT, TRUE];<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer x = llGetNumberOfPrims();<br />
&nbsp;&nbsp;&nbsp;&nbsp;for(i = 1; i &lt;= x; i++) if(llGetLinkName(i) == PRIMNAME) llSetLinkPrimitiveParamsFast(i, l);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(CHANNEL != 0) llRegionSay(CHANNEL, (string)TRUE);<br />
&nbsp;&nbsp;&nbsp;&nbsp;On = TRUE;<br />
}<br />
<br />
LightOff()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;list l = [];<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(LIGHT_ON) l += [PRIM_POINT_LIGHT, FALSE, LIGHT_COLOR, LIGHT_INTENSITY, LIGHT_RADIUS, LIGHT_FALLOFF];<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(GLOW_ON) l += [PRIM_GLOW, GLOW_SIDE, 0.0];<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(BRIGHT_ON) l += [PRIM_FULLBRIGHT, FALSE];<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;integer x = llGetNumberOfPrims();<br />
&nbsp;&nbsp;&nbsp;&nbsp;for(i = 1; i &lt;= x; i++) if(llGetLinkName(i) == PRIMNAME) llSetLinkPrimitiveParamsFast(i, l);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(CHANNEL != 0) llRegionSay(CHANNEL, (string)FALSE);<br />
&nbsp;&nbsp;&nbsp;&nbsp;On = FALSE;<br />
}<br />
<br />
Switch(integer on)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(on) LightOn(); else LightOff();<br />
}<br />
<br />
default {<br />
&nbsp;&nbsp;&nbsp;&nbsp;state_entry()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Mode = FALSE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;On = FALSE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Switch(On);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(CHANNEL != 0) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llRegionSay(CHANNEL, (string)On);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llListen(CHANNEL, "", NULL_KEY, "");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(AUTOMATIC) llSetTimerEvent(60.0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;touch_start(integer total_number)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (PLAY_SOUND) llPlaySound(SOUND, SOUND_VOL);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;On = !On;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Switch(On);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;on_rez(integer start_param)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llResetScript();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;timer()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vector v = llGetSunDirection();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (v.z &lt; 0.0) Mode = ON_AT_NIGHT;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else Mode = !ON_AT_NIGHT;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (Mode != LastCheck)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Switch(Mode);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LastCheck = Mode;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;listen(integer channel, string name, key id, string message)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;On = (integer)message;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Switch(On);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Scripts aus dem OSGrid Forum]]></title>
			<link>https://www.gridtalk.de/showthread.php?tid=252</link>
			<pubDate>Mon, 27 Dec 2010 01:34:19 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://www.gridtalk.de/member.php?action=profile&uid=2">Bogus Curry</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.gridtalk.de/showthread.php?tid=252</guid>
			<description><![CDATA[Hier ein langes Posting aus dem OSGrid Forum. Alles Scripts die man wohl in OS gebrauchen kann.<br />
<br />
<a href="http://forums.osgrid.org/viewtopic.php?f=5&amp;t=2233" target="_blank" rel="noopener" class="mycode_url">http://forums.osgrid.org/viewtopic.php?f=5&amp;t=2233</a>]]></description>
			<content:encoded><![CDATA[Hier ein langes Posting aus dem OSGrid Forum. Alles Scripts die man wohl in OS gebrauchen kann.<br />
<br />
<a href="http://forums.osgrid.org/viewtopic.php?f=5&amp;t=2233" target="_blank" rel="noopener" class="mycode_url">http://forums.osgrid.org/viewtopic.php?f=5&amp;t=2233</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Messageboard mit message per chat]]></title>
			<link>https://www.gridtalk.de/showthread.php?tid=217</link>
			<pubDate>Thu, 25 Nov 2010 15:53:46 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://www.gridtalk.de/member.php?action=profile&uid=2">Bogus Curry</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.gridtalk.de/showthread.php?tid=217</guid>
			<description><![CDATA[Sag es mit Worten ;D<br />
<br />
Schreibt im Chat <br />
<br />
/43 euremessage oder<br />
/43 !clear um eure message zu lÃ¶schen<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>// Grafitti board 0.0.2 for OpenSim<br />
// By Justin Clark-Casey (justincc)<br />
// http://justincc.wordpress.com<br />
<br />
<br />
// This script is available under the BSD License<br />
<br />
<br />
string text = "";<br />
<br />
<br />
integer LISTENING_CHANNEL = 43;<br />
<br />
<br />
// XXX Only putting this here as well to get around OpenSim's int -&gt; string casting oddness<br />
string LISTENING_CHANNEL_STRING = "43";<br />
<br />
<br />
// FIXME: Should be dynamic!<br />
integer CHARS_WIDTH = 40;<br />
<br />
<br />
// Add some additional graffiti<br />
addGraffiti(string message)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;while (llStringLength(message) &gt; CHARS_WIDTH)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text += "&#92;n&#92;n" + llGetSubString(message, 0, CHARS_WIDTH - 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message = llDeleteSubString(message, 0, CHARS_WIDTH - 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;text += "&#92;n&#92;n" + message;<br />
}<br />
<br />
<br />
// Clear the existing graffiti<br />
clearGraffiti()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;text = "";<br />
}<br />
<br />
<br />
// Actually fires the graffiti out to the dynamic texture module<br />
draw()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;//llSay(0, text);<br />
&nbsp;&nbsp;&nbsp;&nbsp;string drawList = "PenColour BLACK; MoveTo 40,220; FontSize 32; Text " + text + ";";<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;osSetDynamicTextureData("", "vector", drawList, "1024", 0);<br />
}<br />
<br />
<br />
default<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;state_entry()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetText(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Say /" + LISTENING_CHANNEL_STRING + " &lt;message&gt; to add text.&#92;n"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "&nbsp;&nbsp;Say /" + LISTENING_CHANNEL_STRING<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ " !clear to clear board",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;0.0, 1.0, 0.0&gt;, 1.0);<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llListen(LISTENING_CHANNEL, "", NULL_KEY, "");<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addGraffiti("Hypernauts, leave a message here");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;draw();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;listen(integer channel, string name, key id, string message)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (message == "!clear")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clearGraffiti();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addGraffiti(message);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;draw();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</code></div></div><br />
Gefunden im Reaktiongrid ;D]]></description>
			<content:encoded><![CDATA[Sag es mit Worten ;D<br />
<br />
Schreibt im Chat <br />
<br />
/43 euremessage oder<br />
/43 !clear um eure message zu lÃ¶schen<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>// Grafitti board 0.0.2 for OpenSim<br />
// By Justin Clark-Casey (justincc)<br />
// http://justincc.wordpress.com<br />
<br />
<br />
// This script is available under the BSD License<br />
<br />
<br />
string text = "";<br />
<br />
<br />
integer LISTENING_CHANNEL = 43;<br />
<br />
<br />
// XXX Only putting this here as well to get around OpenSim's int -&gt; string casting oddness<br />
string LISTENING_CHANNEL_STRING = "43";<br />
<br />
<br />
// FIXME: Should be dynamic!<br />
integer CHARS_WIDTH = 40;<br />
<br />
<br />
// Add some additional graffiti<br />
addGraffiti(string message)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;while (llStringLength(message) &gt; CHARS_WIDTH)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text += "&#92;n&#92;n" + llGetSubString(message, 0, CHARS_WIDTH - 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message = llDeleteSubString(message, 0, CHARS_WIDTH - 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;text += "&#92;n&#92;n" + message;<br />
}<br />
<br />
<br />
// Clear the existing graffiti<br />
clearGraffiti()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;text = "";<br />
}<br />
<br />
<br />
// Actually fires the graffiti out to the dynamic texture module<br />
draw()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;//llSay(0, text);<br />
&nbsp;&nbsp;&nbsp;&nbsp;string drawList = "PenColour BLACK; MoveTo 40,220; FontSize 32; Text " + text + ";";<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;osSetDynamicTextureData("", "vector", drawList, "1024", 0);<br />
}<br />
<br />
<br />
default<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;state_entry()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetText(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Say /" + LISTENING_CHANNEL_STRING + " &lt;message&gt; to add text.&#92;n"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "&nbsp;&nbsp;Say /" + LISTENING_CHANNEL_STRING<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ " !clear to clear board",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;0.0, 1.0, 0.0&gt;, 1.0);<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llListen(LISTENING_CHANNEL, "", NULL_KEY, "");<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addGraffiti("Hypernauts, leave a message here");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;draw();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;listen(integer channel, string name, key id, string message)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (message == "!clear")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clearGraffiti();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addGraffiti(message);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;draw();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</code></div></div><br />
Gefunden im Reaktiongrid ;D]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Teleport-Script innerhalb der Region]]></title>
			<link>https://www.gridtalk.de/showthread.php?tid=212</link>
			<pubDate>Sun, 21 Nov 2010 19:02:36 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://www.gridtalk.de/member.php?action=profile&uid=4">Klarabella Karamell</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.gridtalk.de/showthread.php?tid=212</guid>
			<description><![CDATA[endlich hat die Rennerei ein Ende, seufz.....<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>integer CHANNEL = 42; // dialog channel<br />
list MENU_MAIN = ["Plattform", "Villa Schepp","Grotte","Klamotten", "Haus"]; <br />
key lastAVkey = NULL_KEY;<br />
string fltText = "Teleport";<br />
vector dest ;<br />
default<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;state_entry()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llListen(CHANNEL, "", NULL_KEY, ""); // listen for dialog answers (from multiple users)<br />
 llSetSitText("Teleport");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetText(fltText, &lt;1,1,1&gt;, 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;touch_start(integer i)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; llDialog(llDetectedKey(0), "Ziele", MENU_MAIN, CHANNEL); // present dialog on click<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;listen(integer channel, string name, key id, string message)<br />
&nbsp;&nbsp;&nbsp;&nbsp; /// Menu selber ende<br />
&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; if (message == "Plattform") dest = &lt;116.309013,126.735489,498.082306&gt; ;<br />
&nbsp;&nbsp; if (message == "Grotte") dest =&nbsp;&nbsp;&lt;203.817749,33.219597,21.493137&gt;;<br />
 if (message == "Villa Schepp") dest = &lt;86.953094,207.898895,21.250000&gt;&nbsp;&nbsp;;<br />
 if (message == "Klamotten") dest = &lt;11.276321,129.932083,21.332373&gt; ;<br />
if (message == "Haus") dest = &lt;51.443775,38.852882,21.336037&gt;;<br />
 llSitTarget(dest-llGetPos(), &lt;0,0,0,1&gt;);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;changed(integer change)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key currentAVkey = llAvatarOnSitTarget();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (currentAVkey != NULL_KEY &amp;&amp; lastAVkey == NULL_KEY)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lastAVkey = currentAVkey;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!(llGetPermissions() &amp; PERMISSION_TRIGGER_ANIMATION))&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llRequestPermissions(currentAVkey,PERMISSION_TRIGGER_ANIMATION);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llUnSit(currentAVkey);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llStopAnimation("sit");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llResetScript();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</code></div></div>]]></description>
			<content:encoded><![CDATA[endlich hat die Rennerei ein Ende, seufz.....<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>integer CHANNEL = 42; // dialog channel<br />
list MENU_MAIN = ["Plattform", "Villa Schepp","Grotte","Klamotten", "Haus"]; <br />
key lastAVkey = NULL_KEY;<br />
string fltText = "Teleport";<br />
vector dest ;<br />
default<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;state_entry()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llListen(CHANNEL, "", NULL_KEY, ""); // listen for dialog answers (from multiple users)<br />
 llSetSitText("Teleport");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llSetText(fltText, &lt;1,1,1&gt;, 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;touch_start(integer i)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; llDialog(llDetectedKey(0), "Ziele", MENU_MAIN, CHANNEL); // present dialog on click<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;listen(integer channel, string name, key id, string message)<br />
&nbsp;&nbsp;&nbsp;&nbsp; /// Menu selber ende<br />
&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; if (message == "Plattform") dest = &lt;116.309013,126.735489,498.082306&gt; ;<br />
&nbsp;&nbsp; if (message == "Grotte") dest =&nbsp;&nbsp;&lt;203.817749,33.219597,21.493137&gt;;<br />
 if (message == "Villa Schepp") dest = &lt;86.953094,207.898895,21.250000&gt;&nbsp;&nbsp;;<br />
 if (message == "Klamotten") dest = &lt;11.276321,129.932083,21.332373&gt; ;<br />
if (message == "Haus") dest = &lt;51.443775,38.852882,21.336037&gt;;<br />
 llSitTarget(dest-llGetPos(), &lt;0,0,0,1&gt;);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;changed(integer change)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key currentAVkey = llAvatarOnSitTarget();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (currentAVkey != NULL_KEY &amp;&amp; lastAVkey == NULL_KEY)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lastAVkey = currentAVkey;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!(llGetPermissions() &amp; PERMISSION_TRIGGER_ANIMATION))&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llRequestPermissions(currentAVkey,PERMISSION_TRIGGER_ANIMATION);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llUnSit(currentAVkey);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llStopAnimation("sit");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;llResetScript();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</code></div></div>]]></content:encoded>
		</item>
	</channel>
</rss>