Moi j'ai cree celui-ci , il fonctionne avec des objets liés
//Ascenceur.txt
//
integer CHANNEL = 50; //Canal de Dialogue
list MENU_MAIN = ["Rdc","1er","2nd","3ieme","4ieme"]; //Menu Principal
float BOTTOM = 695.210; //Hauteur de départ
float FLOOR_1 = 5.600; //Hauteur moyenne d'un etage
float SPEED = 5; //vitesse d'ascencion
float target;
default
{
state_entry()
{
llMessageLinked(LINK_ALL_CHILDREN,0,"",NULL_KEY);
llListen(CHANNEL, "", NULL_KEY, "");
llSitTarget(<0,0,0.5>, llEuler2Rot(<0,0,-90>) );
// llSitTarget(<0,-0.5,0.5>, llEuler2Rot(<0,0,-90>) );
llSetText("S'asseoir pour monter",<0,0,0>,1.0);
target = BOTTOM;
}
listen(integer channel, string name, key id, string message)
{
integer idx = llListFindList(MENU_MAIN, [message]);
if( idx !=-1 )
{
llSay(0,"Etage " + message + "." );
target = BOTTOM + (idx*FLOOR_1);
state moving;
}
}
changed(integer Change)
{
llDialog(llAvatarOnSitTarget(), "Etage ?", MENU_MAIN, CHANNEL);
}
}
state moving
{
state_entry()
{
llSetTimerEvent(0.1);
}
timer()
{
vector pos = llGetPos();
pos.x = 25.769;
pos.y = 133.807;
if( pos.z!=target )
{
if( pos.z>target )
{
pos.z = pos.z - SPEED;
}
else
{
pos.z = pos.z + SPEED;
}
}
if( llFabs(pos.z - target) < SPEED )
{
pos.z = target;
llSetTimerEvent(0);
llSetPos(pos);
llSay(0,"Arrive a destination " );
llUnSit(llAvatarOnSitTarget());
state default;
}
llSetPos(pos);
}
}
Bouton d'appel du Rdc :
//Appel_Ascenseur.txt
default
{
state_entry()
{
llSetText("",<0,0,0>,1.0);
}
touch_start(integer total_number)
{
llShout(50, "Rdc");
}
}
Johnjean writer
|