Second Life Copybot
Personal ATM Machine - Printable Version

+- Second Life Copybot (https://secondlifecopybot.com)
+-- Forum: SECOND LIFE PRODUCTS (https://secondlifecopybot.com/forum-1.html)
+--- Forum: SCRIPTS (https://secondlifecopybot.com/forum-1022.html)
+---- Forum: SCRIPTS (https://secondlifecopybot.com/forum-8.html)
+----- Forum: Business Scripts (https://secondlifecopybot.com/forum-44.html)
+----- Thread: Personal ATM Machine (/thread-618.html)



Personal ATM Machine - steadymobbin - 02-18-2013

PHP Code:
// 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();
}
}
}
}

listeninteger channelstring namekey idstring message )
{
removeListens();
integer amountToGive = (integer)message;
if(
message == "All")amountToGive balance;
llGiveMoney(managerKeyamountToGive);
balance -= amountToGive;
llInstantMessage(managerKey"New balance = L$"+(string)balance);
}

money(key idinteger 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(idamount);
llInstantMessage(id"You are not the owner of this safe.");
}
}

timer()
{
llInstantMessage(managerKey"timed out");
removeListens();
}