07.08.2010, 11:25
(Dieser Beitrag wurde zuletzt bearbeitet: 10.08.2010, 02:20 von Bogus Curry.)
Hallo Ezry
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 .
viel Spass beim testen
greets
Genie
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