Simple Pay Door
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
This is a very simple pay door. With this, you have to pay a door to get access into something. You can set the amount of money, how long it takes to close after payment. Override coming soon.
<lsl>// Pay Door that rules // Made by: Giygas Static // 2011/01/30
/// START USER SETTINGS
integer time = 1; // How much time until the door closes again integer price = 20; // Price of Admission in L integer DEBUG = 1; // 0 for RETAIL, 1 for TESTING
/// END USER SETTINGS
integer door1chan = 696736; //channel used to communicate to the door to override and open as such string name = "NULL"; //Name of Person who eventually gives string own = "NULL"; //Name of Owner that is defined later integer difference = 0; //Temp spot for difference if someone over pays. vector mypos; // door position (objects move a tiny amount integer DOOR_OPEN = 1; integer DOOR_CLOSE = 2; integer DIRECTION = -1; // direction door opens in. Either 1 (outwards) or -1
door(integer what) {
rotation rot; rotation delta; llSetTimerEvent(0); // kill any running timers if ( what == DOOR_OPEN ) { //llTriggerSound("Door open", 0.8); rot = llGetRot(); delta = llEuler2Rot(<0, 0, -DIRECTION * PI_BY_TWO>); rot = delta * rot; // rotate by -45 degree llSetRot(rot); } else if ( what == DOOR_CLOSE) { rot = llGetRot(); delta = llEuler2Rot(<0, 0, DIRECTION * PI_BY_TWO>); // rotate by 45 degree rot = delta * rot; llSetRot(rot);
//llTriggerSound("Door close", 0.8); }
}
default {
state_entry() { llSetTimerEvent(5); } timer() { llRequestPermissions(llGetOwner(), PERMISSION_DEBIT); } run_time_permissions(integer permissions) { //Only wait for payment if the owner agreed to pay out money if (permissions & PERMISSION_DEBIT) { state ready; } } on_rez(integer start_par) { llResetScript(); }
}
state ready {
state_entry() { if (DEBUG == 1) { llOwnerSay("WARNING! Debug is on, you will not recieve money if someone clicks your door without paying!"); } llOwnerSay("Ready."); own = llKey2Name(llGetOwner()); }
touch_start(integer total_num){ name = llKey2Name(llDetectedKey(0)); llSay(0, "Hello " + name + " to access " + own + "'s House you need to pay " + (string)price + "L. Thank you."); if (DEBUG == 1) { door(DOOR_OPEN); state on; } }
on_rez(integer start_par) { llResetScript(); }
money(key giver, integer amt) { name = llKey2Name(giver); if( amt == price ) { llSay(0, "Paid, Access Granted for " + (string)time + " Seconds: " + name); door(DOOR_OPEN); state on; } if( amt < price ) { llSay(0, "ACCESS DENIED: you need to pay " + (string)price + "L.\n You Tried to pay " + (string)amt + "L."); llGiveMoney(giver, amt); } if( amt > price ) { difference = amt - price; llSay(0, "Access granted, You paid too much, here's the difference from" + (string)price + "L, which is " + (string)difference + "L." ); llGiveMoney(giver, difference); door(DOOR_OPEN); state on; } }
}
state on {
state_entry() { llSetTimerEvent(time); } timer() { door(DOOR_CLOSE); llSetPos(mypos); // workaround for tiny movements during rotation state ready; } on_rez(integer start_par) { llResetScript(); }
} </lsl>