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