Difference between revisions of "Money"

From Second Life Wiki
Jump to navigation Jump to search
m
m
Line 14: Line 14:
|caveats=* This event cannot be triggered by a call to [[llGiveMoney]] because [[llGiveMoney]] cannot be used by one object to pay another object.
|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.
* Money cannot be paid to an attachment.
|examples=<lsl>integer price = 10;
|examples=
<lsl>
integer price = 10;


default
default
Line 21: Line 23:
     {
     {
         llSetPayPrice(PAY_HIDE, [PAY_HIDE ,PAY_HIDE, PAY_HIDE, PAY_HIDE]);
         llSetPayPrice(PAY_HIDE, [PAY_HIDE ,PAY_HIDE, PAY_HIDE, PAY_HIDE]);
         llRequestPermissions(llGetOwner(), PERMISSION_DEBIT);
 
    }
         key owner = llGetOwner();
    run_time_permissions(integer perm)
         llRequestPermissions(owner, PERMISSION_DEBIT);
    {
         if(perm & PERMISSION_DEBIT)
            state cash;
     }
     }
}


state cash
{
    state_entry()
    {
        llSetPayPrice(price, [price, PAY_HIDE, PAY_HIDE, PAY_HIDE]);
    }
     money(key id, integer amount)
     money(key id, integer amount)
     {
     {
         if(amount != price)
         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);
             llGiveMoney(id, amount);
            llInstantMessage(id, "You paid "+(string)amount+", which is the wrong price, the price is: "+(string)price);
         }
         }
         else
         else if (price < amount)
         {
         {
             llInstantMessage(id, "You paid the right price");
            integer change = amount - price;
             llInstantMessage(id, "You paid more than " + (string)price + " L$, "
                                + "your change is " + (string)change + " L$.");
            llGiveMoney(id, change);
         }
         }
     }
     }
}</lsl>
 
    run_time_permissions(integer perm)
    {
        if(perm & PERMISSION_DEBIT)
            llOwnerSay("Setup complete");
    }
}
</lsl>
|helpers
|helpers
|also_header
|also_header

Revision as of 13:48, 28 October 2012

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 );