Beiträge: 603
Themen: 52
Thanks Received: 82 in 40 posts
Thanks Given: 192
Registriert seit: Jul 2010
06.08.2010, 20:48
(Dieser Beitrag wurde zuletzt bearbeitet: 10.08.2010, 11:07 von Bogus Curry.)
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 bekommt
lg
Ezry
Edit: Ich hab mal die Überschrit ein wenig griffiger gemacht ;D //Bogus
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 .
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
Beiträge: 7.029
Themen: 775
Thanks Received: 1.362 in 671 posts
Thanks Given: 3.520
Registriert seit: Jul 2010
Hallo ;D
Bitte bei Scripts den BBC "code" benutzen nicht "quote", habs mal geändert ;D
Signatur
Have a nice Day ;D
>> BogusMusikRausch alle 14 Tage an einem Donnerstag, um 20 Uhr in Uwes KeulenBar
Tschöö
Bogus | MagicPlace.de | M: @gse@norden.social
Beiträge: 603
Themen: 52
Thanks Received: 82 in 40 posts
Thanks Given: 192
Registriert seit: Jul 2010
hiu
Thx,fuer den Script den teste ich spaeter mal 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 saved
und manchmal kommt ja auch mich jemand besuchen und so kann man mir dann die Meinung in einer NC in den Briefkasten wuerfeln
lg
Ezry
Beiträge: 603
Themen: 52
Thanks Received: 82 in 40 posts
Thanks Given: 192
Registriert seit: Jul 2010
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 Scripts
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. ohne Relog hoert das dann nicht auf. Vieleicht kann sich das ja mal einer genauer ansehen und den fehler finden
lg
Ezry
Beiträge: 2
Themen: 0
Thanks Received: 0 in 0 posts
Thanks Given: 0
Registriert seit: Jul 2010
Moin zusammen
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
Beiträge: 2.173
Themen: 142
Thanks Received: 588 in 202 posts
Thanks Given: 651
Registriert seit: Jul 2010
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
|