Personal ATM Machine
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.
<lsl> // 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) // 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, ""); llSetColor(<1,0.4,0.4>, ALL_SIDES); llSetTimerEvent(60); llDialog(managerKey, "Balance: L$"+(string)balance+"\n \nChoose amaount 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); llSetColor(<1,1,1>, ALL_SIDES);
}
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(); }
} </lsl>