logo

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

Mitteilung

Icon
Error

Einloggen


Beitrag melden
Geschrieben von: MartinRJ Fayray Offline Geschrieben Dienstag, 10. März 2015 01:56:57(UTC)
Mit folgendem Skript kann man eine Ostereier-Hunt veranstalten, bei der jeder Avatar nur ein Geschenk pro Tag erhält.

Das Server-Skript muss in ein Objekt in der selben Region wie die "Ostereier".

Und das Ostereier-Skript muss zusammen mit jeweils einem Preis (dieser muss kopierbar sein, sonst gibt es Fehlermeldungen ab dem zweiten Versuch) in das "Osterei".

Der Server 'merkt' sich einen Timestamp zusammen mit der Kurzform des Keys des jeweiligen Users in einer Liste, und entfernt den Eintrag nach 24 Stunden wieder.

Das "Ei" sendet den Avatar-Key (zusammen mit dem Channel des jeweiligen Eis) bei Berührung an den Server, dieser überprüft ob der Key bekannt ist, und gibt eine entsprechende Rückmeldung.
Wenn der Avatar-Key nicht gespeichert war (also in den letzten 24 Stunden nicht bereits einen Preis erhalten hat), sendet das Ei den Preis an den Avatar.
Andernfalls wird eine Fehlermeldung ausgegeben.

Server:
Code:

list PERSON_TIMESTAMP; //Stores (partial) uuid and timestamp.
integer iIndexPerson = 0;
integer iIndexTimestamp = 1;
integer iPersontimestamplength = 2;

integer iDay = 86400; //Seconds/day.
float fTimer = 1.0; //Timer.

integer iLengthFirstPartOfUUID = 8;
string sGetPartial(key kUUID)
{
    return llGetSubString((string)kUUID, 0, iLengthFirstPartOfUUID-1);
}

integer iCHANNEL = -239487;
integer iIndexChannel = 0;
integer iIndexUUID = 1;
string sMessageFound = "found";
string sMessageNotFound = "notfound";
default
{
    state_entry()
    {
        llSetTimerEvent(fTimer);
        llListen(iCHANNEL, "", "", "");
    }
    listen(integer channel, string name, key id, string message)
    {
        if (llList2Key(llGetObjectDetails(id, [OBJECT_OWNER]), 0) != llGetOwner())
        { //Only listens to objects of the same owner.
            return;
        }
        list lTemp = llCSV2List(message);
        if (llGetListLength(lTemp) != iPersontimestamplength)
        { //Invalid message.
            return;
        }
        string sReturn;
        key kPerson = (key)llList2String(lTemp, iIndexUUID);
        integer iChannelSender = (integer)llList2String(lTemp, iIndexChannel);
        if (llListFindList(PERSON_TIMESTAMP, [sGetPartial(kPerson)]) != -1)
        { //Found.
            sReturn = sMessageFound;
        }
        else
        { //Not found.
            sReturn = sMessageNotFound;
            PERSON_TIMESTAMP += [sGetPartial(kPerson), llGetUnixTime() + iDay];
        }
        llRegionSayTo(id, iChannelSender, sReturn); //Send message back.
    }
    timer()
    {
        if (llGetListLength(PERSON_TIMESTAMP) >= iPersontimestamplength)
        { //Clean up list.
            if (llList2Integer(PERSON_TIMESTAMP, iIndexTimestamp) < llGetUnixTime())
            {
                if (llGetListLength(PERSON_TIMESTAMP) == iPersontimestamplength)
                { //Only one entry left.
                    PERSON_TIMESTAMP = [];
                }
                else
                {
                    PERSON_TIMESTAMP = llList2List(PERSON_TIMESTAMP, iPersontimestamplength, -1);
                }
            }
        }
    }
    changed(integer change)
    {
        if (change & CHANGED_OWNER)
        {
            llResetScript();
        }
    }
}


Oster-Ei:
Code:

integer iLengthFirstPartOfUUID = 8;
string sGetPartial(key kUUID)
{
    return llGetSubString((string)kUUID, 0, iLengthFirstPartOfUUID-1);
}

integer iCHANNEL = -239487;
integer iIndexChannel = 0;
integer iIndexUUID = 1;
string sMessageFound = "found";
string sMessageNotFound = "notfound";

integer iLOCALCHANNEL;

integer turn_key_into_channel(key ktktc)
{
    integer itktc; string sinputtktc = (string) ktktc; integer iindextktc; integer ccountertktc; string stktc;
    for (iindextktc = 0; iindextktc < 36; iindextktc++){if (iindextktc != 8 && iindextktc != 13 && iindextktc != 18 && iindextktc != 23 && ccountertktc < 9 && (integer) llGetSubString(sinputtktc,iindextktc,iindextktc) != 0 && llStringLength(stktc) < 10)
    {
    stktc = stktc + (string) ((integer) llGetSubString(sinputtktc,iindextktc,iindextktc)); ccountertktc = ccountertktc+1;}
    }
    stktc = "1" + stktc; itktc = (integer) stktc; if (itktc < 1000000000) { itktc = 1000000000 + itktc; }
    return itktc;
}
key kCLICKED;
string sNiceMessage = "You already received an item today! Please come back tomorrow!"; //Leave this empty ("") if you don't want to send a message.
default
{
    state_entry()
    {
        iLOCALCHANNEL = turn_key_into_channel(llGetKey());
        llListen(iLOCALCHANNEL, "", "", "");
    }
    on_rez(integer start_param)
    {
        llResetScript();
    }
    changed(integer change)
    {
        if (change & CHANGED_OWNER)
        {
            llResetScript();
        }
    }
    touch_start(integer num_detected)
    {
        kCLICKED = llDetectedKey(0);
        list lMessage = ["",""];
        lMessage = llListReplaceList(lMessage, [iLOCALCHANNEL], iIndexChannel, iIndexChannel);
        lMessage = llListReplaceList(lMessage, [kCLICKED], iIndexUUID, iIndexUUID);
        llRegionSay(iCHANNEL, llList2CSV(lMessage));
    }
    listen(integer channel, string name, key id, string message)
    {
        if (llList2Key(llGetObjectDetails(id, [OBJECT_OWNER]), 0) != llGetOwner())
        { //Only listens to objects of the same owner.
            return;
        }
        if (message == sMessageFound)
        { //Say nice error message.
            llRegionSayTo(kCLICKED, PUBLIC_CHANNEL, sNiceMessage);
        }
        else if (message == sMessageNotFound)
        { //Give item.
            if (llGetInventoryNumber(INVENTORY_OBJECT) > 0)
            {
                llGiveInventory(kCLICKED, llGetInventoryName(INVENTORY_OBJECT, 0));
            }
        }
    }
}
Geben Sie den Meldetext hier ein.
Fett Kursiv Unterstrichen   Hervorheben Zitat Sprachauswahl für Syntax Highlighting Bild einfügen Link einfügen   Unsortierte Liste Sortierte Liste   Linksbündig Zentriert Rechtsbündig   Herausrücken Einrücken   Weitere BBCodes
Schriftfarbe: Schriftgröße:
Melden Abbruch

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

Datenschutzrichtlinie
Haftungsausschluss
Impressum
Datenschutzerklärung
AGB, ToS
Kontakt