This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

Linknummer Erkennung anhand des Primnamens
#1
Linknummer Erkennung anhand des Primnamens

Wenn man von einem Script aus mehrere Links bearbeiten will, so erfolgt dies üblicherweise über die Linknummern.

Diese Hilfsroutine ermittelt die aktuelle Linknummer eines Links anhand dessen bekannten Linknamen.
Sie durchsucht dazu das gesamte Linkset bis zum ersten Auftreten dieses Namens, und meldet Treffer als Linknummern zurück.
Wird kein Treffer erzielt, wird 0 zurück geliefert, was keine aktuelle Linknummer darstellt.


Anwendungsbeispiel:
Der Auspuff eines Motorrades soll Rauchen, der Scheinwerfer Licht an/aus schalten.
Ein zentrales Hauptscript soll diese Aktion aus dem Rootprim heraus mitsteuern.

Dies erfordert die genaue Kenntnis der Linknummer die angesprochen werden soll.
Letztere ändert sich ggf. wenn links hinzukommen oder abgteilt werden.

Manchmal ändern sich die Linknummern in Opensim auch selbstständig, oder werden sogar bei manueller Abfrage falsch angezeigt.
Dies ist ein BUG, der aber richtig nerven kann. Das hat mich dazu gebracht diese Routine zu schreiben, die den Fehler umgeht.

Code:
// Linkermittlung by Tron 31.07.2022
// Ermittelt die aktuelle Linknummer eines Links anhand dessen bekannten Linknamen

string  linkname1 = "prim2";    // Name des gesuchten Prims
integer link1;                  // Rückgemeldete Linknummer zu obigen Namen


// Ermitteln der aktuellen Linknummer in allen verknüpften Prims des Linksets, anhand des Linknamens.
// Rücklieferung der Linknummer wenn der Linkname gefunden wird, ansonsten Rückgabe von 0 wenn kein Treffer erzielt wurde.
integer getlink(string linkname)
{
    integer linknummer = llGetNumberOfPrims();
    do
    {
        if (linkname == llGetLinkName(linknummer)) { return (linknummer);}
        linknummer--;
    }
    while (linknummer > 0);
    return (0);
}


default
{
    state_entry()
    {
        link1 = getlink(linkname1);             // Nach dem Linknamen suchen
        if(link1 > 0) llSay(0, "das Prim mit dem Namen "+ linkname1 + " hat aktuell die Linknummer " +(string)link1);
        else llSay(0, "das Prim mit dem Namen "+ linkname1 + " wurde nicht gefunden. Prüfe bitte auch auf Gross/Kleinschreibung und Leerzeichen im Linknamen");
    }
   
   
    touch_start(integer touched)  { llResetScript(); }
}
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste