02-18-2013, 02:55 AM
PHP Code:
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 =
["Unread",
"Read",
"Delete"];
integer nLastCardCount = 0;
integer nLastItemCount = 0;
key owner1;
string ownerName;
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 + " card";
if (nTotalCard > 1) cPost += "s";
cPost += " Recu";
// unreaded string
string cUnreaded = (string)nNotReaded + " Non Lu";
llSetText("MailBox of : " + (string)ownerName + "\n"+"Drag your notecard has the inside\n" + cPost + "\n" + cUnreaded, <.95, .75, 0>, 1);
}
default
{
on_rez(integer n)
{
llSetText(" ",<0,0,0>,0.0);
llResetScript();
}
state_entry()
{
owner1 = llGetOwner();
ownerName = llKey2Name(owner1);
// 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, "Drag a note card to leave a message");
//---- Change MY OWNER above to suit your likes and needs. //
// if owner
key id = llDetectedKey(0);
if (id == llGetOwner())
{
// Show a dialog
llDialog(id, "What do you want to do ?", 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 " + 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 + " ajouter a la MailBox");
}
}
}
nLastItemCount = llGetInventoryNumber(INVENTORY_ALL);
nLastCardCount = llGetInventoryNumber(INVENTORY_NOTECARD);
// refresh the text
TxtRefresh();
}
}