• Bitte schaltet eure Ad Blocker aus. SLinfo kann nur betrieben werden, wenn es durch Werbung Einnahmen erzielt. Vielen Dank!!
  • Wir freuen uns, wenn du dich in unserem Forum anmeldest. Bitte beachte, dass die Freigabe per Hand durchgeführt wird (Schutz vor Spammer). Damit kann die Freigabe bis zu 24 Stunden dauern.
  • Wir verwenden Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und die Zugriffe auf unsere Website zu analysieren. Sie geben Einwilligung zu unseren Cookies, wenn Sie unsere Webseite weiterhin nutzen.

Geschenke Sploder (Public Domain)

Daemonika Nightfire

Forumsgott/göttin
huhu,

anlaesslich des 10ten Gebutstages von SLinfo.de bin ich darauf angesprochen worden, ob ich einen Geschenke Sploder habe. Natuerlich hatte ich so etwas nicht vorraetig und habe mich einfach mal daran gesetzt.

Warum ich das Ding Sploder nenne?
Weil die Funktionsweise die gleiche ist wie der klassische Sploder, nur das man hier nichts einzahlen kann und auch kein Geld bekommt.

Der Sploder verfuegt ueber die Moeglichkeit unterschiedliche Geschenke zu verteilen.
Entweder 1. 2. 3. und Trostpreis, oder nur einen Preis fuer alle, oder nur einen Preis fuer den Gewinner.

Die Funktionsweise ist recht einfach.
Sobald der Sploder eingeschaltet ist, laeuft ein Timer im Sekundentakt und ein Countdown zaehlt im Hovertext die Zeit runter.
Sobald der Countdown auf 0:00:00 steht, stoppt der Sploder und mischt die Liste aller Avatar-Keys die sich eingetragen haben. In dem Moment faengt der Sploder auch an die Preise zu verteilen. Zum Eintragen in die Liste muss man den Sploder lediglich anklicken, allerdings kann der Owner nicht mitspielen.

Wichtiger Hinweis
Fuer den ersten, zweiten und dritten Preis ist es lediglich erforderlich, das die Objecte fuer den Owner transfer sind, damit das Script diese weiter geben kann.
Wenn die Objecte dabei aus dem Inhalt verschwinden ist nicht weiter tragisch, da sie fuer nachfolgende Spieler nicht mehr abgerufen werden.

Der Trostpreis allerdings muss fuer den Owner schon copy & transfer sein, da es sonst zu Fehlermeldungen kommt, weil das Object nicht mehr vorhanden ist, wenn es nicht copy ist. Welche Permission fuer den Next-Owner fuer das Geschenk eingestellt ist, spielt keine Rolle.

Nun aber mal das Script:
*DS* Gift Sploder
Code:
integer Timer = 90; // Zeit in Minuten

// Kopiere die Namen der Objecte direkt aus dem Inhalt des Sploders und trage sie hier ein.
string ErsterPreis  = "";
string ZweiterPreis = "";
string DritterPreis = "";
string TrostPreis   = ""; // Trage nur hier ein Object ein, wenn alle das gleiche bekommen sollen.

SendGift(key avi)
{
    if(TrostPreis != "")
    {
        llGiveInventory(avi, TrostPreis);
    }
}

key Owner;
string SploderName;
integer Schalter = FALSE;

integer Menue;
integer Channel = -111111;

list Spieler = [];
integer Anzahl = 0;

integer Countdown;
string Zeit;
string Stunden;
string Minuten;
string Sekunden;
Clock()
{
    integer zh = ((Countdown % 86400) / 3600);
    integer zm = (((Countdown % 86400) % 3600) / 60);
    integer zs = (((Countdown % 86400) % 3600) % 60);
    
    Stunden = (string)zh + ":";
    if(zh < 10)
    {
        Stunden = (string)zh + ":";
    }
    
    Minuten = (string)zm + ":";
    if(zm < 10)
    {
        Minuten = "0" + (string)zm + ":";
    }
    
    Sekunden = (string)zs;
    if(zs < 10)
    {
        Sekunden = "0" + (string)zs;
    }
    
    Zeit = Stunden + Minuten + Sekunden;
}

default
{
    state_entry()
    {
        Owner = llGetOwner();
        Timer = Timer*60;
        
        Menue = llListen(Channel,"",Owner,"");
        SploderName = llGetObjectName();
        llSetText(SploderName, <1,1,1>, 1.0);
        llLinkParticleSystem(LINK_THIS,[]);
        llTargetOmega(<0,0,0>, 0.0, PI);
        llSetTimerEvent(0.0);
    }

    touch_start(integer total_number)
    {
        key User = llDetectedKey(0);
        if(User == Owner)
        {
            if(Schalter == FALSE)
            {
                integer Inhalt = llGetInventoryNumber(INVENTORY_OBJECT);
                if(Inhalt > 0 && ErsterPreis != "" || TrostPreis != "")
                {
                    Schalter = TRUE;
                    Spieler = [];
                    Anzahl = 0;
                    Countdown = Timer;
                    
                    Clock();
                    llSetText(SploderName + "\nSpieler: 0\nCountdown: " + Zeit, <1,1,1>, 1.0);
                    llTargetOmega(<0,0,1>, 0.25, PI);
                    llSetTimerEvent(1.0);
                }
                else
                {
                    llOwnerSay("Im Sploder befindet sich kein Objekt, oder es ist nichts bei den Preisen eingetragen.");
                }
            }
            else if(Schalter == TRUE)
            {
                llDialog(Owner, "\nMoechtest du den Sploder wirklich stoppen?", ["JA","NEIN"], Channel);
            }
        }
        else if(User != Owner)
        {
            if(Schalter == TRUE)
            {
                integer Gruppe = llSameGroup(User);
                if(Gruppe)
                {
                    if(!~llListFindList(Spieler, [User]))
                    {
                        Spieler += User;
                        llRegionSayTo(User, 0, "Glueckwunsch, du wurdest erfolgreich zur Liste hinzugefuegt.");
                        
                        Anzahl = llGetListLength(Spieler);
                        Clock();
                        llSetText(SploderName + "\nSpieler: " + (string)Anzahl + "\nCountdown: " + Zeit, <1,1,1>, 1.0);
                    }
                    else
                    {
                        llRegionSayTo(User, 0, "Du stehst bereits auf der Liste.");
                    }
                }
                else if(!Gruppe)
                {
                    llRegionSayTo(User, 0, "Bitte trage die SLinfo.de Gruppe.");
                }
            }
        }
    }
    
    listen(integer channel, string name, key id, string message)
    {
        if(id == Owner)
        {
            if(message == "JA")
            {
                Schalter = FALSE;
                
                llSetText(SploderName, <1,1,1>, 1.0);
                llTargetOmega(<0,0,0>, 0.0, PI);
                llSetTimerEvent(0.0);
            }
        }
    }
    
    timer()
    {
        Countdown--;
        Clock();
        llSetText(SploderName + "\nSpieler: " + (string)Anzahl + "\nCountdown: " + Zeit, <1,1,1>, 1.0);
        
        if(Countdown == 0)
        {
            llSetTimerEvent(0.0);
            list Mischen = llListRandomize(Spieler, 1);
            
            llLinkParticleSystem(LINK_THIS,[7,5.0, 0,0x100 | 0x001 | 0x002, 9,0x02,
            1,<1.0,1.0,1.0>, 3,<1.0,1.0,1.0>, 5,<0.25,0.25,0>, 6,<1.00,1.00,0>, 8,<0.00,0.00,-0.10>, 
            13,0.1, 15,1, 16,0.5, 17,0.30, 18,0.60, 22,0, 23,0, 21,<1,1,1>,
            12,"0fe8512e-f440-490d-6f9d-f72428223a87", 2,1.0, 4,0.0]);
            
            integer i = 0;
            do
            {
                key Avatar = llList2Key(Mischen, i);
                string Name = llKey2Name(Avatar);
                if(Name == "")
                {
                    Name = "\nsecondlife:///app/agent/" + (string)Avatar + "/about";
                }
                llSetText(SploderName + "\nSpieler: " + (string)Anzahl + "\nGeschenk Nr. " + (string)(i+1), <1,1,1>, 1.0);
                
                if(i > 2)
                {
                    SendGift(Avatar);
                }
                else if(i == 0)
                {
                    if(ErsterPreis != "")
                    {
                        llGiveInventory(Avatar, ErsterPreis);
                        llShout(0, "Der erste Preis, " + ErsterPreis + " geht an " + Name);
                    }
                    else
                    {
                        SendGift(Avatar);
                    }
                }
                else if(i == 1)
                {
                    if(ZweiterPreis != "")
                    {
                        llGiveInventory(Avatar, ZweiterPreis);
                        llShout(0, "Der zweite Preis, " + ZweiterPreis + " geht an " + Name);
                    }
                    else
                    {
                        SendGift(Avatar);
                    }
                }
                else if(i == 2)
                {
                    if(DritterPreis != "")
                    {
                        llGiveInventory(Avatar, DritterPreis);
                        llShout(0, "Der dritte Preis, " + DritterPreis + " geht an " + Name);
                    }
                    else
                    {
                        SendGift(Avatar);
                    }
                }
            }
            while(++i < Anzahl);
            
            llSetText(SploderName + "\nSpieler: " + (string)Anzahl + "\nFertig", <1,1,1>, 1.0);
            
            Schalter = FALSE;
            llLinkParticleSystem(LINK_THIS,[]);
            llTargetOmega(<0,0,0>, 0.0, PI);
        }
    }
    
    on_rez(integer Dae)
    {
        llResetScript();
    }
}

Dieser Sploder darf frei verwendet, jedoch nicht gegen Entgelt und mit eingeschraenkten Rechten verkauft werden.

Der Grund warum ich das Script oeffentlich mache ist, weil ich damit beweisen will, wie klein ein so aufwendiges Script sein kann, wenn man auf den ganzen Nonsens wie Notecard und Menues verzichtet, weil man direkt im Script schreiben kann.

Konstruktive Verbesserungsvorschlaege & Kritik duerfen hier im Thread natuerlich besprochen werden.

LG
Dae
 
Zuletzt bearbeitet:

Users who are viewing this thread

Zurück
Oben Unten