Personal ATM Machine
Jump to navigation
Jump to search
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
I made this script to allow me to store my Lindens in another account, in order to stop me from spending them so carelessly. Others may find it useful.
// ATM Machine script, Jessikiti Nikitin 2010
//
// Brief instructions for use:
//
// Give this script to your alt, ensuring their balance is L$0 (or setting the balance in the variable below),
// put it in an object and then allow debit permissions when the object requests them.
//
// You can then manage your alt's balance using the object, without the alt having to be logged in.
// To deposit lindens, pay the object. To withdraw lindens, touch the object for a menu.
key managerKey = "00000000-0000-0000-0000-000000000000"; // change this to your main avatar's key
list dialogAmounts = ["50", "100", "250", "500", "1000", "5000", "10000", "50000", "All"];
integer balance = 0;
integer opChannel;
integer listenHandle;
presentDialog()
{
opChannel = llFloor((llFrand(1000000) * -1)-1000000); // creates random operation channel to
// prevent spying on withdrawal amounts
listenHandle = llListen(opChannel, "", managerKey, "");
llSetTimerEvent(60);
llDialog(managerKey, "Balance: L$"+(string)balance+"\n \nChoose amount to withdraw.", validAmounts(), opChannel);
}
list validAmounts()
{
// this function prevents the script offering money that isn't available,
// which would result in a silent failure
list va;
integer i;
for(;i<llGetListLength(dialogAmounts);++i)
{
if((integer)llList2String(dialogAmounts,i)<=balance)
{
va+=llList2String(dialogAmounts,i);
}
}
return va;
}
removeListens()
{
llListenRemove(listenHandle);
llSetTimerEvent(0);
}
default
{
on_rez(integer omitted){ llResetScript(); }
state_entry()
{
opChannel = llFloor((llFrand(1000000) * -1)-1000000);
llRequestPermissions(llGetOwner(),PERMISSION_DEBIT);
}
touch_start(integer number_detected)
{
integer n;
for(;n<number_detected;++n)
{
if(llDetectedKey(n)==managerKey)
{
if(balance==0)llDialog(managerKey, "Balance: L$0", [], opChannel);
else
{
presentDialog();
}
}
}
}
listen( integer channel, string name, key id, string message )
{
removeListens();
integer amountToGive = (integer)message;
if(message == "All")amountToGive = balance;
llGiveMoney(managerKey, amountToGive);
balance -= amountToGive;
llInstantMessage(managerKey, "New balance = L$"+(string)balance);
}
money(key id, integer amount)
{
if(id == managerKey) // only display balance if money came from you
{
balance += amount;
llInstantMessage(managerKey, "New balance = L$"+(string)balance);
}
else // remove this else block if you want to allow other people
// to put money into your safe
{
llGiveMoney(id, amount);
llInstantMessage(id, "You are not the owner of this safe.");
}
}
timer()
{
llInstantMessage(managerKey, "timed out");
removeListens();
}
}