Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Ein Script fuer Mailbox mit NC funktion
#1
Hiu

Ich koennte jetzt im Netz suchen und wuerde sicher auch finden, aber hier ist es mir dann lieber, gibt es ein schon getestetes Script fuer OS, das es moeglich macht Briefe zu hinterlassen fuer eine Person in Form einer Notecard, also wahlweise fuer den Eigner des Briefkastens, oder halt um Namentlich einem anderen zuzuordnen, der per touchbefehl erkannt wird und die richtige NC bekommtWink

lg
Ezry

Edit: Ich hab mal die Überschrit ein wenig griffiger gemacht ;D //Bogus
Nichts im Leben ist ein Muss!!!!!!!!!!!..............Alles ein Kann!!!

http://angels-world.nl:8002:Angels-World
Zitieren
#2
Hallo Ezry Smile
ja es gibt ein Briefkasten Skript , das auch in OS funktioniert.
Es ist zwar nur für eine Person (den Owner) aber ansonsten funktioniert es gut.
Jeder kann eine Notecard darin ablegen und der Owner hat beim Anklicken ein Auswahl Menue.
Ungelesen Nachrichten, bereits gelesene Nachrichten oder löschen .
Code:
// --------------------------------------//
// This script transform a prim to a Mail Box.
// Folks can drop notecard to the box.
// Read/unread information is displayed as hovering text.
// You can copy/modify this script, it's totally free.
// --------------------------------------//
// Modified by dakar Muliaina, converted to The king's English
// and a few other enhancements.
//-------------------------------------------//

list lMail = [];
// column 1 = notecard name, column 2 = read by user
integer     MAIL_UNREADED = 0;
integer     MAIL_READED = 1;
integer     DIALOG_CHANNEL = 49383;
list        DIALOG_CHOICE =
                ["Ungelesene",
                 "Gelesene",
                 "Loeschen"];
integer nLastCardCount = 0;
integer nLastItemCount = 0;

TxtRefresh()
{
    // show the unreadable notecard
    integer nTotalCard = 0;
    integer nNotReaded = 0;
    integer nCount = 0;
    for (nCount = 0; nCount < llGetListLength(lMail); nCount += 2)
    {
        if (llList2Integer(lMail, nCount + 1) == MAIL_UNREADED)
            nNotReaded += 1;
        nTotalCard += 1;
    }

    // total string
    string cPost = (string)nTotalCard + " Brief(e)";
    if (nTotalCard > 1) cPost += "s";
    cPost += " eingeworfen";

       // unreaded string
    string cUnreaded = (string)nNotReaded + " ungelesen";
    llSetText("Briefkasten!\n" + cPost + "\n" + cUnreaded, <.95, .75, 0>, 1);
}

default
{
    state_entry()
    {
       // Allowing dropping of object
       llAllowInventoryDrop(TRUE);
       llListen(DIALOG_CHANNEL, "", NULL_KEY, "");
       nLastCardCount = llGetInventoryNumber(INVENTORY_ALL);
       nLastItemCount = llGetInventoryNumber(INVENTORY_NOTECARD);

       // Auto complete list
       integer nCardCount = llGetInventoryNumber(INVENTORY_NOTECARD);
       integer n_CurObj = 0;
       string c_Name = "NotEmpty";
       while (c_Name != "")
       {
            c_Name = llGetInventoryName(INVENTORY_NOTECARD, n_CurObj);
            n_CurObj += 1;
            if (c_Name != "")
            {
                lMail += [c_Name];
                lMail += MAIL_UNREADED;
            }
        }
        TxtRefresh();
    }

    touch_start(integer total_number)
    {
        llSay(0, "Drop a notecard to be sent to MY OWNER.\n ziehe eine Notecard
auf mich um sie meinem Besitzer zu hinterlassen.");
//---- Change MY OWNER above to suit your likes and needs.   //
        // if owner
        key id = llDetectedKey(0);
        if (id == llGetOwner())
        {
            // Show a dialog
            llDialog(id, "Welche Briefe soll ich oeffnen?", DIALOG_CHOICE,
              DIALOG_CHANNEL);
        }
    }

    listen(integer channel, string name, key id, string message)
    {
        if (llGetOwner() == id && llListFindList(DIALOG_CHOICE,
           [message]) != -1)
        {
            integer i;
            string cName;
            list lRemove;
            integer nStatus;
            for (i = 0; i < llGetListLength(lMail); i += 2)
            {
                cName = llList2String(lMail, i);
                nStatus = llList2Integer(lMail, i + 1);
                if (message == llList2String(DIALOG_CHOICE, 0)
                   && nStatus == MAIL_UNREADED)
                {
                    // open un-readed
                    llGiveInventory(id, cName);
                    // mark for readed
                    lMail = llListReplaceList(lMail, [MAIL_READED],
                        i + 1, i + 1);
                }
                if (message == llList2String(DIALOG_CHOICE, 1)
                   && nStatus == MAIL_READED)
                {
                    // open readed
                    llGiveInventory(id, cName);
                }
                if (message == llList2String(DIALOG_CHOICE, 2)
                   && nStatus == MAIL_READED)
                {
                    // delete readed
                    llSay(0, cName);
                    llRemoveInventory(cName);
                    lRemove += i;
                }
            }
            // remove from the list
            if (llGetListLength(lRemove) > 0)
            {
                integer k;
                for (k = 0; k < llGetListLength(lRemove); k++)
                {
                    i = llList2Integer(lRemove, k);
                    lMail = llDeleteSubList(lMail, i, i+1);
                }
            }
            TxtRefresh();
        }
    }

    changed(integer change)
    {
        // dont accept other than a notecard
        integer nItemCount = llGetInventoryNumber(INVENTORY_ALL);
        if (nItemCount < 2)
        {
            // clear the list
            lMail = [];
        }

        if (nItemCount != nLastItemCount)
        {
            // delete other item type than notecard
            string cName = "NotEmpty";
            integer nCurObj = 0;
            integer nObjType = INVENTORY_NONE;
            list lRemove = [];
            while (cName != "")
            {
                cName = llGetInventoryName(INVENTORY_ALL, nCurObj);
                nCurObj += 1;
                nObjType = llGetInventoryType(cName);
                if (nObjType != INVENTORY_NOTECARD)
                {
                    // add for deletion, its not a notecard
                    lRemove += cName;
                }
            }

            // delete other object than notecard
            integer nD = 0;
            for (nD = 0; nD < llGetListLength(lRemove); nD += 1)
            {
                // dont remove this script !
                cName = llList2String(lRemove, nD);
                if (cName != llGetScriptName() && cName != "")
                {
                    llSay(0, "Sorry but " + cName + " is not a notecard.");
                    llRemoveInventory(cName);
                }
            }

            // search for a new notecard
            integer n_CurObj = 0;
            string c_Name = "NotEmpty";
            while (c_Name != "")
            {
                c_Name = llGetInventoryName(INVENTORY_NOTECARD, n_CurObj);
                llSay(0, c_Name);
                n_CurObj += 1;
                // search for this card
                if (llListFindList(lMail, [c_Name]) == -1 && c_Name != "")
                {
                    // ok its a new card
                    lMail += [c_Name];
                    lMail += MAIL_UNREADED;
                    llSay(0, c_Name + " added to the mailbox.");
                }
            }
        }
        nLastItemCount = llGetInventoryNumber(INVENTORY_ALL);
        nLastCardCount = llGetInventoryNumber(INVENTORY_NOTECARD);
        // refresh the text
        TxtRefresh();
    }
}

viel Spass beim testen

greets

Genie
Zitieren
#3
Hallo ;D

Bitte bei Scripts den BBC "code" benutzen nicht "quote", habs mal geändert ;D
Signatur
Have a nice Day ;D

>> BogusMusikRausch am 28.03.24 um 20 Uhr in Uwes KeulenBar

Tschöö

Bogus | PinguinsReisen.de | M: @gse@norden.social
Zitieren
#4
hiu

Thx,fuer den Script den teste ich spaeter malWink denn ne andere Moeglichkeit haben wir ja derzeit nicht in OS, um jemand was zu schreiben,da sonst immer die Meldung kommt user´s not logged in, Message is not savedWink

und manchmal kommt ja auch mich jemand besuchen und so kann man mir dann die Meinung in einer NC in den Briefkasten wuerfelnWink

lg
Ezry
Nichts im Leben ist ein Muss!!!!!!!!!!!..............Alles ein Kann!!!

http://angels-world.nl:8002:Angels-World
Zitieren
#5
Huhu

Habe den Script getestet, wer ein Briefkasten baut, sollte diesen vorher ohne Script als Kopie im Inventar haben, da das Script irgendwo hakt Kein Plan wieso, kann auch nichts finden, bin ja auch nur laie bei ScriptsWink
Jedenfalls anschliessend wenn man das Object,das man fuers Script vorgesehen hat gerezzt hat, kann man es einsetzen, es funktioniert dann auch. Ihr solltet es aber tunlichst sein lassen das teil samt script ins Inventar packen zu wollen, denn dort taucht es nie auf, es verschwindet im Nirvana, nichtmal im Trash ist es dann zu finden, und ohne neustart hoert die Sanduhr, oder kreis bei vista und win7 nicht auf zu drehen, weil er es versucht wegzuraeumen.Wink ohne Relog hoert das dann nicht auf. Vieleicht kann sich das ja mal einer genauer ansehen und den fehler findenWink

lg
Ezry
Nichts im Leben ist ein Muss!!!!!!!!!!!..............Alles ein Kann!!!

http://angels-world.nl:8002:Angels-World
Zitieren
#6
Moin zusammen Smile

Ich habe hier noch ein ganz einfaches Skript, dass es möglich macht, eine Notecard zu hinterlassen. Dem Besitzer wird per Hovertext angezeigt, ob und wie viele Nachrichten im Kasten sind, durch touch auf selbigen "nimmt" man die NC heraus ...

Code:
string owner;
key g_quary_owner;
integer count = 0;
default
{
    state_entry()
    {
        g_quary_owner = llRequestAgentData( llGetOwner(), DATA_NAME);
        
    }

    changed(integer mask)
    {
        if(mask & (CHANGED_ALLOWED_DROP | CHANGED_INVENTORY))
        {
            count = llGetInventoryNumber(INVENTORY_ALL) - 1;
            llSetText(owner +"'s Postbox \n " + count + " messages \n \n Drop Inventory with message in here" ,<1,1,1>,1.0);
        }
    }
    touch_start(integer egal)
    {
        if (llDetectedKey(0) == llGetOwner())
        {
             integer number = llGetInventoryNumber(INVENTORY_ALL);
             integer x;
             for (x = 0; x < number; x++)
             {
                 string name = llGetInventoryName(INVENTORY_ALL,x);
                 if (name != llGetScriptName())
                 {
                    llGiveInventory(llGetOwner(),name);
                 }
             }
             llSleep(2.5);
             number = llGetInventoryNumber(INVENTORY_ALL);
             for (x = 1; x < (number+1); x++)
             {
                 string name = llGetInventoryName(INVENTORY_ALL,number-x);
                 if (name != llGetScriptName())
                 {
                    llRemoveInventory(name);
                 }
             }
             llResetScript();
        }
    }
    dataserver(key queryid, string data)
    {
        if(queryid == g_quary_owner)
        {
            owner = data;
            count = llGetInventoryNumber(INVENTORY_ALL) - 1;
            llSetText(owner +"'s Postbox \n " + count + " messages \n \n Drop Inventory with message in here" ,<1,1,1>,1.0);
            llAllowInventoryDrop(TRUE); // erlaubt das Hineinlegen ins Prim
        }
    }
}

Funktioniert einwandfrei, hab's grad noch mal probiert ... Viel Spaß damit Smile
Zitieren
#7
Hab das Script mal zum Anlass genommen, endlich meine "Briefkästen" auf Freebie-Heaven aufzustellen.
Mal gucken, ob mir nu einer schreibt ;D
I have to leave said the leaf and left to the left


hg.osgrid.org:80:Klarakunterbunt
Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
Question Tür script gesucht, Tür soll bei Eintritt ein paar meter vorher öffnen Kalkofe 9 596 11.10.2023, 05:37
Letzter Beitrag: Christoph Balhaus
  Rufknopf Script für Aufzug gesucht Xenos Yifu 4 1.961 03.04.2022, 19:09
Letzter Beitrag: Mareta Dagostino
  Geber/ Rezz Script Xenos Yifu 10 4.696 28.11.2020, 14:28
Letzter Beitrag: Kubwa
  Suche Script Gruppe Titoss 4 6.715 27.11.2020, 14:52
Letzter Beitrag: Dorena Verne
  Follow me Script brenner23 3 7.566 29.11.2018, 23:05
Letzter Beitrag: Manfred Aabye

Gehe zu:


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