Money

From Second Life Wiki
Revision as of 13:48, 28 October 2012 by Kireji Haiku (talk | contribs)
Jump to navigation Jump to search
Emblem-important-red.png Security Warning!

Always (ALWAYS!) check the amount paid in your money() event. Preconfigured payment amounts from llSetPayPrice() are only a suggestion to the client. The client can still send L$0 or any positive integer. Never trust the client software to be secure.

Description

Event: money( key id, integer amount ){ ; }

Triggered when money is paid to the prim in the amount by id.

• key id who paid
• integer amount the amount paid

Specification

When money is paid to the prim, the money is given to the object's owner.
If the object is owned by or deeded to a group it is divvied up amongst the group members immediately (which is why groups can't grant PERMISSION_DEBIT). Only members of a role that has the "Accounting/Pay group liabilities and receive group dividends" attribute will receive money.
Don't forget to turn on the pay-behavior of the prims/objects involved.
The pay buttons should be configured in most applications where money is being transfered (llSetPayPrice), it makes paying money to the object easier.

Caveats

  • This event cannot be triggered by a call to llGiveMoney because llGiveMoney cannot be used by one object to pay another object.
  • Money cannot be paid to an attachment.


Examples

<lsl> integer price = 10;

default {

   state_entry()
   {
       llSetPayPrice(PAY_HIDE, [PAY_HIDE ,PAY_HIDE, PAY_HIDE, PAY_HIDE]);
       key owner = llGetOwner();
       llRequestPermissions(owner, PERMISSION_DEBIT);
   }
   money(key id, integer amount)
   {
       if (amount == price)
       {
           llInstantMessage(id, "You paid " + (string)price + " L$.");
           return;
       }
       key owner = llGetOwner();
       key permKey = llGetPermissionsKey();
       integer perm = llGetPermissions();
       if (permKey != owner)
           return;
       if (!(perm & PERMISSION_DEBIT))
           return;
       if (amount < price)
       {
           llInstantMessage(id, "That's not enough money.");
           llGiveMoney(id, amount);
       }
       else if (price < amount)
       {
           integer change = amount - price;
           llInstantMessage(id, "You paid more than " + (string)price + " L$, "
                               + "your change is " + (string)change + " L$.");
           llGiveMoney(id, change);
       }
   }
   run_time_permissions(integer perm)
   {
       if(perm & PERMISSION_DEBIT)
           llOwnerSay("Setup complete");
   }

} </lsl>

See Also

Functions

•  llGiveMoney Give money to another avatar
•  llSetPayPrice Configure the pay buttons

Deep Notes

Signature

event void money( key id, integer amount );