News:

SMF - Just Installed!

 

Come ottimizzare gli HUD

Aperto da Absynth, Agosto 23, 2010, 09:04:29 PM

Discussione precedente - Discussione successiva

Absynth


Utilizzando tasti dell'hud SENZA SCRIPT con una descrizione ad hoc!

Se un oggetto linkato ha nel root uno script con evento touch, quell'evento parte se viene toccato il prim root o ogni altro child (a meno che il child non abbia dentro uno script con evento touch, nel caso parte quello)

Quindi, se faccio un hud con 3 tasti e linko tutto, il mio oggetto avrà 4 prim (il root + altri tre). Se ora metto uno script nel root con un evento touch, qualsiasi prim tocco mi aziona lo stesso evento touch.

Adesso diamo alla descrizione dei 3 tasti un valore univoco: "B1", "B2", "B3"

in root mettiamo questo script

string button(){
    integer n = llDetectedLinkNumber(0);
    key uuid = llGetLinkKey(n);
    list params = llGetObjectDetails(uuid, [OBJECT_DESC]);
    return llList2String(params, 0);
}

default
{
    touch_start(integer total_number)
    {
        llOwnerSay(button());
    }
}


se tocchiamo i 3 tasti, lo script ci dirà "B1", "B2" o "B3" a seconda del tasto che abbiamo cliccato, cioè lo script capisce cosa abbiamo cliccato anche senza script nei tasti.

in base al nome che gli arriva basta fargli fare quello che vogliamo.


La procedura è la seguente:

Ci serve il numero di link del prim che abbiamo toccato
* integer n = llDetectedLinkNumber(0);
Ora ci serve l'UUID di quel prim, e lo possiamo rilevare tramite il suo numero di link
* key uuid = llGetLinkKey(n);
Adesso prendiamo la descrizione del prim corrispondente a quell'uuid
* list params = llGetObjectDetails(uuid, [OBJECT_DESC]);
è una lista, quindi estraiamo il valore al listindex 0
* llList2String(params, 0);


Quanto detto sopra (spiegato per completezza di informazione e spunti di studio) può essere ulteriormente ottimizzato utilizzando le nuove costanti per llGetLinkPrimitiveParams, ossia [PRIM_DESC] o [PRIM_NAME]
http://wiki.secondlife.com/wiki/LlGetLinkPrimitiveParams

La descrizione di un linked prim potrà essere prelevata semplicemente con
llGetLinkPrimitiveParams(llDetectedLinkNumber(0), [PRIM_DESC]);