[script] online?

Répondre
Partager Rechercher
J'ai un (petit) script qui réagit pas comme je veux mais je vois pas pourquoi. une idée peut être ?

Principe : on clique sur l'objet. Si le propriétaire de l'objet est en ligne, on écrit au dessus de l'objet "machin is online". sinon "machin is offline" :

string proprio;
string proprionom;

default
{

touch(integer num_detected)
{
proprio = llGetOwner();
proprionom = llKey2Name(proprio);
if (llRequestAgentData(proprio, DATA_ONLINE)) {
llSetText(proprionom +" is online", <0,1,0>, 1);
}
else {
llSetText(proprionom +" is offline", <1,0,0>, 1);
}
llSleep(10);
llSetText("", <0,0,0>, 0);
llResetScript();
}
}

lorsque le propriétaire de l'objet clique, ça marche bien ("machin is online")
mais lorsque un autre clique (et que le proprio est offline), ça marche mal ("is online") !

Elle est ou la connerie ????
Bonsoir,
je te donne un script qui marche mais qui est un peu lourd, j'essaierai de le retoucher pour qu'il corresponde à ton touch


Code:
integer changeText = TRUE;
     
     string showTextOnline = " est en ligne";
     
     string showTextOffline = " n'est pas en ligne";
     
     
     vector textColor = <1,1,1>;
     
     //This is the transparency of the text displayed above the object. 1 = solid, 0.2 = most
     //transparent
     float textAlpha = 1;
     
     //changeColor - set to TRUE if you want to change the object's color to show the
     //owner's online status. Set to FALSE otherwise.
     integer changeColor = TRUE;
     
    
     vector colorOnline = <1,1,1>;
     vector colorOffline = <0,0,0>;
     
     key owner;
     string ownerName;
     key request;
     
     
     //init() - runs on state_entry and on_rez
     init()
     {
     	//If changeText == FALSE then we don't want to show any text
     	if (changeText == FALSE) {
     		//Clears any text showing to make sure none is showing.
     		llSetText("",<0,0,0>,1);
     	}
     	//To start with set the timer event to trigger in 1 second to update the
     	//item straight away
     	llSetTimerEvent(1);
     	llSleep(1); // sleep to make sure that the timer event triggers
     	//This resets the timer so that it runs timer event every 10 seconds now.
     	llSetTimerEvent(10);
     	//Get the key of the owner
     	owner = llGetOwner();
     	//Get the owner's name
     	ownerName = llKey2Name(owner);
     }
     
     default
     {
     	state_entry()
     	{
     		init();
     	}
     	on_rez(integer times)
     	{
     		init();
     	}
     	timer()
     	{
     		request =  llRequestAgentData(owner, DATA_ONLINE);
     	}
     	{
     		if (requested == request) {
     			//If the user is online data will have the value of 1
     			if (data == "1") {
     				if (changeText == TRUE) {
     					llSetText(ownerName + showTextOnline,textColor,textAlpha);
     				}
     				if (changeColor == TRUE) {
     					llSetColor(colorOnline,ALL_SIDES);
     				}
     			} else
				{
     				if (changeText == TRUE) {
     					llSetText(ownerName + showTextOffline,textColor,textAlpha);
     				}
     				if (changeColor == TRUE) {
     					llSetColor(colorOffline,ALL_SIDES);
     				}
     			}
     		}
     	}
     }
Merci pour ta réponse.
Entre ton script et la doc SL, j'ai réussi a débugger. Voici le code qui marche :

//affiche si le propriétaire de l'objet est offline ou online

key proprio;
string proprionom;
key requete;

default
{
state_entry()
{
proprio = llGetOwner();
proprionom = llKey2Name(proprio);
}

touch(integer num_detected)
{
requete = llRequestAgentData(proprio, DATA_ONLINE);
}

dataserver(key queryid, string data)
{
if (data == "1")
{
llSetText(proprionom +" is online", <0,1,0>, 1);
}
else
{
llSetText(proprionom +" is offline", <1,0,0>, 1);
}
llSleep(10);
llSetText("", <0,0,0>, 0);
}

}
Sur certaines parcelles, l'option no script peut-être activée. Ce qui coupera tous les scripts présents (ceux portés et ceux contenus dans les objets). Tu visualises toutes les options activées en haut de la fenêtre de jeu, à gauche des coordonnées de la carte. Je n'en connais que 3 : no script / no push / no fly
c'est vrai que sur les sandbox officielles on dirait que c'est décoché

ce qui est bizarre c'est que lorsque je dépose une tasse de thé (un objet que j'ai trouvé chez yandi) il y a un script pour émettre de la fumée qui fonctionne

j'essaie de copier ce script sur un nouveau cube que je viens de créer mais le cube n'émet pas de fumée
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés