Daemonika Nightfire
Forumsgott/göttin
huhu,
anlaesslich der Nachfrage nach einer Spardose in SL im anderen Thread habe ich mich auch mal an so etwas versucht.
Wie im anderen Thread schon erwaehnt wurde, ist fuer so etwas ein zweiter Account notwendig, andernfalls macht es absolut keinen Sinn, so ein Script zu nutzen.
Bei meiner Variante handelt es sich um eine Piggy-Bank getarnt als Donation-Box, ganz klassisch mit einem Hovertext fuer die aktuellen Spenden.
Ziemlich am Anfang findet ihr eine Liste mit Avatar-UUID'S welche lediglich durch ein Komma getrennt sind. Um Probleme zu vermeiden habe ich die Keys und die entsprechenden Abfragen explizit als string formatiert, weil verschiedene Befehle Keys auf unterschiedliche Weise mal mit und mal ohne Gaensefuesschen in eine Liste eintragen oder abfragen.
Ausschliesslich die eingetragenen Keys und der Besitzer koennen das Menue verwenden. Es ist nicht notwendig, den Besitzer des Objects ebenfalls in die Liste einzutragen, das macht das Script schon voll automatisch.
Ganz wichtig, fuer dieses Script ist die erlaubniss fuer die Permission Debit zwingend erforderlich, sonst funktioniert das Auszahlen nicht.
Desweiteren ist es erforderlich das der entsprechende ALT (Alternativ Account), der als Bank fungiert der Besitzer des Scriptes bzw. des ganzen Objects ist. Das script verfuegt ueber ein klassisches Menue, womit auch nur der Besitzer die Moeglichkeit zum resetten hat.
Warum nur der Besitzer? Ganz einfach, weil nur der Besitzer dazu in der Lage ist, erneut die Permission Debit zu bestaetigen.
Wenn du dazu noch die Click-Action des Objects auf "bezahlen" stellst, wird so schnell niemand merken, das die Box auch noch ein Menue hat. Allerdings kommst du dann selbst nur noch per Rechtsklick an das Menue.
Eventuelle Fragen bezueglich bestimmter Funktionen, oder Verbesserungsvorschlaege koennen gerne hier diskutiert werden.
Nun fehlt nur noch deine Version Archon.
LG
Dae
anlaesslich der Nachfrage nach einer Spardose in SL im anderen Thread habe ich mich auch mal an so etwas versucht.
Wie im anderen Thread schon erwaehnt wurde, ist fuer so etwas ein zweiter Account notwendig, andernfalls macht es absolut keinen Sinn, so ein Script zu nutzen.
Bei meiner Variante handelt es sich um eine Piggy-Bank getarnt als Donation-Box, ganz klassisch mit einem Hovertext fuer die aktuellen Spenden.
Ziemlich am Anfang findet ihr eine Liste mit Avatar-UUID'S welche lediglich durch ein Komma getrennt sind. Um Probleme zu vermeiden habe ich die Keys und die entsprechenden Abfragen explizit als string formatiert, weil verschiedene Befehle Keys auf unterschiedliche Weise mal mit und mal ohne Gaensefuesschen in eine Liste eintragen oder abfragen.
Ausschliesslich die eingetragenen Keys und der Besitzer koennen das Menue verwenden. Es ist nicht notwendig, den Besitzer des Objects ebenfalls in die Liste einzutragen, das macht das Script schon voll automatisch.
Ganz wichtig, fuer dieses Script ist die erlaubniss fuer die Permission Debit zwingend erforderlich, sonst funktioniert das Auszahlen nicht.
Desweiteren ist es erforderlich das der entsprechende ALT (Alternativ Account), der als Bank fungiert der Besitzer des Scriptes bzw. des ganzen Objects ist. Das script verfuegt ueber ein klassisches Menue, womit auch nur der Besitzer die Moeglichkeit zum resetten hat.
Warum nur der Besitzer? Ganz einfach, weil nur der Besitzer dazu in der Lage ist, erneut die Permission Debit zu bestaetigen.
Wenn du dazu noch die Click-Action des Objects auf "bezahlen" stellst, wird so schnell niemand merken, das die Box auch noch ein Menue hat. Allerdings kommst du dann selbst nur noch per Rechtsklick an das Menue.
Code:
// *DS* Donation-Box & Piggy-Bank by Daemonika Nightfire
// German
// Es ist erlaubt dieses Script fuer private Zwecke zu nutzen.
// Es ist verboten, dieses Script mit eingeschraenkten Rechten kommerziell zu verbreiten.
// English
// It is allowed to use this script for private purposes.
// It is forbidden to distribute this script with restricted rights commercially.
key Owner;
list Member = ["61ee201a-81cf-4322-b9a8-a5eb8da777c2", "00000000-0000-0000-0000-000000000000"];
key CurrentUser;
string Name = "Dein Wunschname";
Hovertext()
{
llSetText("Donation-Box for " + Name + "\ntotal: " + (string)Total +"L$", <1.0,1.0,1.0>, 1.0);
}
integer Total = 0;
integer PayEvent = FALSE;
integer menu_handler;
integer menu_channel;
Menu(key agent, string text, list button)
{
llListenRemove(menu_handler);
menu_channel = (integer)(llFrand(99999999) * -1);
menu_handler = llListen(menu_channel,"","","");
llDialog(agent, text, button, menu_channel); //llOwnerSay((string)menu_channel);
llSetTimerEvent(60.0);
}
ListenRemove()
{
llListenRemove(menu_handler);
PayEvent = FALSE;
llSetTimerEvent(0.0);
}
default
{
state_entry()
{
Owner = llGetOwner();
llRequestPermissions(Owner, PERMISSION_DEBIT);
Total = (integer)llGetObjectDesc();
Member = llListInsertList(Member, [(string)Owner], 0); //llOwnerSay("\n" + llDumpList2String(Member, "\n"));
llSetPayPrice(0, [5, 10, 20, 50]);
}
run_time_permissions (integer perm)
{
if(perm & PERMISSION_DEBIT)
{
Hovertext();
llOwnerSay("Donation-Box ready...");
}
else
{
llOwnerSay("Sorry, it will not work without permission... resetting...");
llResetScript();
}
}
touch_start(integer num_detected)
{
key Agent = llDetectedKey(0);
if(~llListFindList(Member, llCSV2List(Agent)))
{
CurrentUser = Agent;// llOwnerSay(llGetUsername(CurrentUser));
if(CurrentUser == Owner)
{
Menu(CurrentUser, "Text", ["Payout","Reset","Close"]);
}
else if(CurrentUser != Owner)
{
Menu(CurrentUser, "Text", ["Payout","Close"]);
}
}
else
{
llSay(0,"Sorry, you are not allowed to use the menu.");
}
}
listen(integer chan, string name, key id, string message)
{
if(id == CurrentUser)
{
if(chan == menu_channel)
{
if(message == "Payout")
{
PayEvent = TRUE;
Menu(CurrentUser, "\n\nPossible Values are:\n100%, 50%, 20%,\n10%, 1%, Close",
[(string)(Total/10),(string)(Total/100),"Close",(string)Total,(string)(Total/2),(string)(Total/5)]);
}
else if(message == "Reset")
{
if(id == Owner)
{
llResetScript();
}
}
else if(message == "Close")
{
ListenRemove();
}
else
{
if(PayEvent == TRUE)
{
integer Amount = (integer)message;
if(Amount < 1)
{
llRegionSayTo(CurrentUser, 0, "Sorry, impossible to payout 0L$");
jump leave;
}
llGiveMoney(CurrentUser, Amount);
Total -= Amount;
llSetObjectDesc((string)Total);
Hovertext();
}
@leave; //llOwnerSay("leave");
ListenRemove();
}
}
}
}
money(key id, integer payment)
{
Total += payment;
llSetObjectDesc((string)Total);
Hovertext();
llRegionSayTo(id, 0, "Thank you for your donation.");
}
timer()
{
ListenRemove();
}
on_rez(integer Dae)
{
llResetScript();
}
}
Eventuelle Fragen bezueglich bestimmter Funktionen, oder Verbesserungsvorschlaege koennen gerne hier diskutiert werden.
Nun fehlt nur noch deine Version Archon.
LG
Dae