logo

Willkommen Gast! Um alle Funktionen zu aktivieren müssen Sie sich Anmelden.Neue Registrierungen sind deaktiviert.

Mitteilung

Icon
Error

Einloggen


Optionen
Ansicht
Gehe zum aktuellsten Beitrag Gehe zum letzten Ungelesenen
Offline MartinRJ Fayray  
#1 Geschrieben : Mittwoch, 1. April 2015 08:08:01(UTC)
MartinRJ Fayray

Rang: Ehrenmitglied

Ansehen:

Mitglied seit: 05.09.2014(UTC)
Beiträge: 84
Germany
Wohnort: Tulln und Rostock

Dankte: 1 mal(e)
Mit folgendem Skript kann man die Farbe jeder Fläche in einem Linkset (oder einzelnen Prim) einzeln durch Eingabe eines Hex-Codes (z.B. "a0db8e") einstellen.
Man klickt dazu auf die Fläche die man verändern will, und gibt dann den Code in die Textbox ein, die sich öffnet.

Das funktioniert in diesem Beispiel nur für den Owner.

Code:

integer Ord(string chr)
{
    if (chr == "")
        return 0;
    chr = llGetSubString(chr, 0, 0);
    string hex = llEscapeURL(chr);
    if (llGetSubString(hex, 0, 0) != "%")
    {
        // Regular character - we can't take advantage of llEscapeURL in this case,
        // so we use llStringToBase64/llBase64ToInteger instead.
        return llBase64ToInteger("AAAA" + llStringToBase64(chr));
    }
    integer b = (integer)("0x" + llGetSubString(hex, 1, 2));
    if (b < 194 || b > 244)
        return b;
    if (b < 224)
        return ((b & 0x1F) << 6) | (integer)("0x" + llGetSubString(hex, 4, 5)) & 0x3F;
    integer cp;
    if (b < 240)
    {
        cp = (b & 0x0F) << 12;
        cp += ((integer)("0x" + llGetSubString(hex, 4, 5)) & 0x3F) << 6;
        cp += (integer)("0x" + llGetSubString(hex, 7, 8)) & 0x3F;
        return cp;
    }
    cp = (b & 0x07) << 18;
    cp += ((integer)("0x" + llGetSubString(hex, 4, 5)) & 0x3F) << 12;
    cp += ((integer)("0x" + llGetSubString(hex, 7, 8)) & 0x3F) << 6;
    cp += (integer)("0x" + llGetSubString(hex, 10, 11)) & 0x3F;
    return cp;
}

integer iValidRange1Start = 48;
integer iValidRange1End = 57;
integer iValidRange2Start = 97;
integer iValidRange2End = 102;
integer iValidLength = 6;
integer isValidColorstring(string sInput)
{ //Returns true if sInput is a valid color-string.
    integer iCounter;
    integer iOrd;
    if (sInput != llToLower(sInput))
    { //Only lowercase-characters are allowed.
        return FALSE;
    }
    if (llStringLength(sInput) != iValidLength)
    { //Invalid length.
        return FALSE;
    }
    for (iCounter = 0; iCounter < iValidLength; iCounter++)
    {
        iOrd = Ord(llGetSubString(sInput, iCounter, iCounter));
        if ((iOrd < iValidRange1Start || iOrd > iValidRange1End) && (iOrd < iValidRange2Start || iOrd > iValidRange2End))
        {
            return FALSE;
        }
    }
    return TRUE;
}

integer iComponentLength = 2;
string sHexPrefix = "0x";
float fColorMax = 255.0;
vector vColorFromHex(string sColor)
{ //Convert hex-string (e.g. "aaff00") to vector color.
        string sX; string sY; string sZ; integer iHelper; vector vColor;
        iHelper = 0;
        sX = llGetSubString(sColor, iHelper, iHelper + iComponentLength - 1);
        iHelper = iHelper + iComponentLength;
        sY = llGetSubString(sColor, iHelper, iHelper + iComponentLength - 1);
        iHelper = iHelper + iComponentLength;
        sZ = llGetSubString(sColor, iHelper, iHelper + iComponentLength - 1);
        
        vColor = <((integer)(sHexPrefix + sX)) / fColorMax, ((integer)(sHexPrefix + sY)) / fColorMax, ((integer)(sHexPrefix + sZ)) / fColorMax>;
        return vColor;
}

integer iListener;
integer iChannel = -938475;
float fTimer = 30.0; //Seconds.
string sMessageTextbox = "Please enter the hex-code to re-color this prim-face, e.g. aaff00";
string sMessageWrongColor = "Invalid color-code.";
integer iTOUCHFACE;
integer iTOUCHPRIM;
default
{
    touch_start(integer num_detected)
    {
        if (llDetectedKey(0) != llGetOwner())
        { //Only listen to owner.
            return;
        }
        iTOUCHFACE = llDetectedTouchFace(0); //Store face and prim.
        iTOUCHPRIM = llDetectedLinkNumber(0);
        iListener = llListen(iChannel, "", llDetectedKey(0), "");
        llSetTimerEvent(fTimer);
        llTextBox(llDetectedKey(0), sMessageTextbox, iChannel);
    }
    listen(integer channel, string name, key id, string message)
    {
        llSetTimerEvent(0);
        llListenRemove(iListener);
        //Delete timer and listener.
        if (isValidColorstring(message))
        {
            llSetLinkColor(iTOUCHPRIM, vColorFromHex(message), iTOUCHFACE);
        }
        else
        { //Invalid color-code.
            llOwnerSay(sMessageWrongColor);
        }
    }
    timer()
    {
        llSetTimerEvent(0);
        llListenRemove(iListener);
        //Delete timer and listener.
    }
}

Bearbeitet vom Benutzer Mittwoch, 1. April 2015 10:39:45(UTC)  | Grund: Nicht angegeben

It is the mark of an educated mind to be able to entertain a thought without accepting it.

Wanna join the discussion?! Login to your forum account.Neue Registrierungen sind deaktiviert.

Offline MartinRJ Fayray  
#2 Geschrieben : Freitag, 3. April 2015 10:03:00(UTC)
MartinRJ Fayray

Rang: Ehrenmitglied

Ansehen:

Mitglied seit: 05.09.2014(UTC)
Beiträge: 84
Germany
Wohnort: Tulln und Rostock

Dankte: 1 mal(e)
Man kann zur Überprüfung, ob ein Character ein gültiger Hex-Code-Character ist (a-f, 0-9) auch folgende einfachere Funktion verwenden:

Code:

integer iIsHexChar(string s)
{
    if (llStringLength(s) != 1)
    {
        return FALSE;
    }
    if (s != "0" && (float)("0x"+s) == 0)
    {
        return FALSE;
    }
    return TRUE;
}

Bearbeitet vom Benutzer Freitag, 3. April 2015 10:05:20(UTC)  | Grund: Nicht angegeben

It is the mark of an educated mind to be able to entertain a thought without accepting it.
Rss Feed  Atom Feed
Benutzer, die gerade dieses Thema lesen
OceanSpiders 2.0
Das Forum wechseln  
Du kannst keine neue Themen in diesem Forum eröffnen.
Du kannst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge nicht löschen.
Du darfst deine Beiträge nicht editieren.
Du kannst keine Umfragen in diesem Forum erstellen.
Du kannst nicht an Umfragen teilnehmen.

Powered by YAF.NET | YAF.NET © 2003-2018, Yet Another Forum.NET
Diese Seite wurde in 0.050 Sekunden generiert.

Datenschutzrichtlinie
Haftungsausschluss
Impressum
Datenschutzerklärung
AGB, ToS
Kontakt