Difference between revisions of "LlSetPayPrice"

From Second Life Wiki
Jump to navigation Jump to search
(Fixed for accuracy)
m (Replaced old <LSL> block with <source lang="lsl2">)
(5 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{Issues/VWR-3048}}{{Issues/VWR-8744}}{{LSL_Function/warning|Security|Always (''ALWAYS!'') check the amount paid in your [[money]]() event. This UI element isn't modal, and has had bugs exploited in the past.
Do not use this function as the only limiting method for payment.
''Never'' trust the client software to be secure. Always validate the value paid is a value expected.}}
{{LSL_Function
{{LSL_Function
|inject-2={{Issues/VWR-3048}}{{Issues/VWR-8744}}
|func_id=302|func_sleep=0.0|func_energy=10.0
|func_id=302|func_sleep=0.0|func_energy=10.0
|func=llSetPayPrice|sort=SetPayPrice
|func=llSetPayPrice|sort=SetPayPrice
|p1_type=integer|p1_name=price|p1_desc=PAY_* constant or positive value
|p1_type=integer|p1_name=price|p1_desc=PAY_* constant or positive value
|p2_type=list|p2_name=quick_pay_buttons|p2_desc=Four PAY_* constants and/or positive integer values
|p2_type=list|p2_name=quick_pay_buttons|p2_desc=Four PAY_* constants and/or positive integer values
|func_desc=Sets the default amount for the pay text field and pay buttons of the appearing dialog when someone chooses to pay this object.
|func_desc=Suggest default amounts for the pay text field and pay buttons of the appearing dialog when someone chooses to pay this object.
|caveats=*This function should not be trusted to limit the values of money payable to the object; ''always'' verify the amount paid is the amount expected.
|caveats=*This function should not be trusted to limit the values of money payable to the object; ''always'' verify the amount paid is the amount expected.
*This function only works when called from the root prim of an object. Its effect applies to all the prims in the object. Calling it from a child prim has no effect.
* Use only one call to this function in all the scripts on an object to prevent confusion about which values are used.  You still need to check in the money event that the amount is as expected.
*This function only works when called from the root prim of an object. Its effect applies to all the prims in the object. Calling it from a child prim has no effect
* Payment to a prim can be blocked by the llSetPayPrice() setting in the prim, which persists even if the script with llSetPayPrice() is removed.
*Note that the pay option will only be shown in prims having a running script with a [[money]] event (or in all the prims of the object if the root has a running script with a money event).
*Note that the pay option will only be shown in prims having a running script with a [[money]] event (or in all the prims of the object if the root has a running script with a money event).
*The effect seems to persist even if the script is recompiled with out the [[llSetPayPrice]] function, even if the script is replaced with another one which includes a [[money]] event, but not [[llSetPayPrice]].
*The effect seems to persist even if the script is recompiled with out the [[llSetPayPrice]] function, even if the script is replaced with another one which includes a [[money]] event, but not [[llSetPayPrice]].
*Money cannot be paid to an attachment; "Pay" will go directly to the wearer instead.
|examples=This will give the user a dialog box without the '''price''' field and only one button with a value of 150.
|examples=This will give the user a dialog box without the '''price''' field and only one button with a value of 150.
<lsl>llSetPayPrice(PAY_HIDE, [150,PAY_HIDE,PAY_HIDE,PAY_HIDE])</lsl>
<source lang="lsl2">llSetPayPrice(PAY_HIDE, [150,PAY_HIDE,PAY_HIDE,PAY_HIDE])</source>


<lsl>integer price = 10;
<source lang="lsl2">integer price = 10;


default
default
Line 50: Line 51:
         }
         }
     }
     }
}</lsl>
}</source>
|spec
|spec
|constants=
|constants=

Revision as of 14:20, 22 January 2015

Summary

Function: llSetPayPrice( integer price, list quick_pay_buttons );

Suggest default amounts for the pay text field and pay buttons of the appearing dialog when someone chooses to pay this object.

• integer price PAY_* constant or positive value
• list quick_pay_buttons Four PAY_* constants and/or positive integer values

Constant Alt Description
PAY_HIDE -1
0
Hides this quick pay button.
PAY_DEFAULT -2 Use the default value for this quick pay button.
Button Order
1
2
3
4
Defaults
$1 $5
$10 $20

Caveats

  • This function should not be trusted to limit the values of money payable to the object; always verify the amount paid is the amount expected.
  • Use only one call to this function in all the scripts on an object to prevent confusion about which values are used. You still need to check in the money event that the amount is as expected.
  • This function only works when called from the root prim of an object. Its effect applies to all the prims in the object. Calling it from a child prim has no effect.
  • Payment to a prim can be blocked by the llSetPayPrice() setting in the prim, which persists even if the script with llSetPayPrice() is removed.
  • Note that the pay option will only be shown in prims having a running script with a money event (or in all the prims of the object if the root has a running script with a money event).
  • The effect seems to persist even if the script is recompiled with out the llSetPayPrice function, even if the script is replaced with another one which includes a money event, but not llSetPayPrice.
  • Money cannot be paid to an attachment; "Pay" will go directly to the wearer instead.

Important Issues

~ All Issues ~ Search JIRA for related Bugs
   llSetPayPrice doesn't work on Child Prims, default box used instead.

Examples

This will give the user a dialog box without the price field and only one button with a value of 150.

llSetPayPrice(PAY_HIDE, [150,PAY_HIDE,PAY_HIDE,PAY_HIDE])
integer price = 10;

default
{
    state_entry()
    {
        llSetPayPrice(PAY_HIDE, [PAY_HIDE ,PAY_HIDE, PAY_HIDE, PAY_HIDE]);
        llRequestPermissions(llGetOwner(), PERMISSION_DEBIT);
    }
    run_time_permissions(integer perm)
    {
        if(perm & PERMISSION_DEBIT)
            state cash;
    }
}

state cash
{
    state_entry()
    {
        llSetPayPrice(price, [price ,PAY_HIDE, PAY_HIDE, PAY_HIDE]);
    }
    money(key id, integer amount)
    {
        if(amount != price)
        {
            llGiveMoney(id, amount);
            llInstantMessage(id, "You paid "+(string)amount+", which is the wrong price, the price is: "+(string)price);
        }
        else
        {
            //insert your give code here.
            llInstantMessage(id, "You paid the right price");
        }
    }
}

See Also

Events

•  money

Functions

•  llGiveMoney

Deep Notes

All Issues

~ Search JIRA for related Issues
   llSetPayPrice doesn't work on Child Prims, default box used instead.
   llSetPayPrice causes "When Left Clicked: Pay Object" to break

Tests

•  llSetPayPrice Test

Signature

function void llSetPayPrice( integer price, list quick_pay_buttons );