add script asset
							parent
							
								
									94ea6f2bb5
								
							
						
					
					
						commit
						de7fb882e0
					
				|  | @ -0,0 +1,121 @@ | |||
| /* | ||||
|     Script für Smarte Tür | ||||
|     (c) Kubwa | ||||
|      | ||||
|     Das Script kann in Türen gelegt werden die rotieren oder sliden. | ||||
|     Die Türen können dann mit dem Haus verlinkt werden (z.b. ein primige Mesh Türen) | ||||
|     Haben zwei Türen den selben Namen öffnen und schließen sie zeitgleich. | ||||
|     Die Tür wird über die Objektbeschreibung gesteuert, dort wird eine komma separierte Befehlsliste eingetragen. | ||||
| 
 | ||||
|     Folgende Einstellungen sind möglich: | ||||
|     Modus, Achse, Bewegung, Status | ||||
| 
 | ||||
|     Modus:      Der Modus in dem die Tür funktioniert. | ||||
|                 S = Sliding | ||||
|                 R = Rotieren (Alles andere als S ist automatisch rotieren) | ||||
| 
 | ||||
|     Achse:      Die Achse auf der die Bewegung ausgeführt wird. | ||||
|                 X, Y, Z | ||||
| 
 | ||||
|     Bewegung:   Die Stärke der Bewegung. | ||||
|                 Bei Sliding ist es der Multiplikator der Bewegung. 0.5 bedeutet die Tür beregt sich 50% ihrer Länge nach auf der Achse. | ||||
|                 Bei Rotieren sind hier die zu rotierenden ° anzugeben. | ||||
| 
 | ||||
|     Status:     Für interne Scriptverwedung. | ||||
|                 Das Script merkt sich auf diese Weise den Status der Tür. | ||||
|                 Wenn der Scriptspeicher verloren geht kann die Tür so ihre Arbeit wieder aufnehmen. | ||||
| 
 | ||||
|     Beispiel: Slindende Tür, die sich auf der X-Achse bewegt und 85% ihrer Länge gleitet: "S, X, 0.85, 0" (Ohne Anführungszeichen) | ||||
| */ | ||||
| 
 | ||||
| integer Open = FALSE; | ||||
| 
 | ||||
| SetDoor() | ||||
| { | ||||
|     SetDoorParameter(3, (string)Open); | ||||
|     float Pos = 1; | ||||
|     if (!Open) {Pos = -1;} | ||||
|     if (GetDoorParameter(0) == "s") | ||||
|     { | ||||
|         vector Size = llGetScale(); | ||||
|         vector Axis = <0, 0, 0>; | ||||
|         if (GetDoorParameter(1) == "x") | ||||
|          {Axis.x = -Size.x * (float)GetDoorParameter(2) * Pos;} | ||||
|         if (GetDoorParameter(1) == "y") | ||||
|          {Axis.y = -Size.y * (float)GetDoorParameter(2) * Pos;} | ||||
|         if (GetDoorParameter(1) == "z") | ||||
|          {Axis.z = -Size.z * (float)GetDoorParameter(2) * Pos;} | ||||
|         llSetLinkPrimitiveParamsFast(LINK_THIS, [PRIM_POSITION, llGetLocalPos() + (Axis * llGetLocalRot())]); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         vector Axis = <0, 0, 0>; | ||||
|         if (GetDoorParameter(1) == "x") | ||||
|          {Axis.x = (float)GetDoorParameter(2) * Pos;} | ||||
|         if (GetDoorParameter(1) == "y") | ||||
|          {Axis.y = (float)GetDoorParameter(2) * Pos;} | ||||
|         if (GetDoorParameter(1) == "z") | ||||
|          {Axis.z = (float)GetDoorParameter(2) * Pos;} | ||||
|         llSetLocalRot(llGetLocalRot() * llEuler2Rot(Axis * DEG_TO_RAD)); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| string GetDoorParameter(integer ParamIndex) | ||||
|  {return llToLower(llList2String(llCSV2List(llGetObjectDesc()), ParamIndex));} | ||||
| 
 | ||||
| SetDoorParameter(integer ParamIndex, string Data) | ||||
| { | ||||
|     list Param = llCSV2List(llGetObjectDesc()); | ||||
|     Param = llListReplaceList(Param, [Data], ParamIndex, ParamIndex); | ||||
|     llSetObjectDesc(llList2CSV(Param)); | ||||
| } | ||||
| 
 | ||||
| default | ||||
| { | ||||
|     on_rez(integer Dummy) | ||||
|      {llResetScript();} | ||||
|     state_entry() | ||||
|      {Open = (integer)GetDoorParameter(3);} | ||||
|     touch_start(integer Dummy) | ||||
|     { | ||||
|         Open = !Open; | ||||
|         if (Open) | ||||
|          {llSetTimerEvent(30);} | ||||
|         else | ||||
|          {llSetTimerEvent(0);} | ||||
|         llMessageLinked(LINK_SET, -503205, llGetObjectName(), (string)Open); | ||||
|         SetDoor(); | ||||
|     } | ||||
|     collision_start(integer Dummy) | ||||
|     { | ||||
|         if (!Open) | ||||
|         { | ||||
|             Open = TRUE; | ||||
|             llSetTimerEvent(30); | ||||
|             llMessageLinked(LINK_SET, -503205, llGetObjectName(), (string)Open); | ||||
|             SetDoor(); | ||||
|         } | ||||
|     } | ||||
|     timer() | ||||
|     { | ||||
|         Open = FALSE; | ||||
|         llSetTimerEvent(0); | ||||
|         llMessageLinked(LINK_SET, -503205, llGetObjectName(), (string)Open); | ||||
|         SetDoor(); | ||||
|     } | ||||
|     link_message(integer Sender, integer Num, string Str, key ID) | ||||
|     { | ||||
|         if (Num == -503205 && | ||||
|             Str == llGetObjectName() && | ||||
|             Sender != llGetLinkNumber()) | ||||
|         { | ||||
|             if (Open != (integer)ID) | ||||
|             { | ||||
|                 Open = (integer)ID; | ||||
|                 if (!Open) | ||||
|                  {llSetTimerEvent(0);} | ||||
|                 SetDoor(); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	 Chris
						Chris