Random Object Vendor

From Second Life Wiki
Revision as of 00:09, 22 January 2015 by Lady Sumoku (talk | contribs) (Replaced old <LSL> block with <source lang="lsl2">)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

This script is a simple object vendor that gives out random items when you pay the fixed price. Just drop it in a prim, add items, and change the prices list variable to whatever price you want to sell the items. It will give out the item in a folder named like the container prim.

//  Random object vendor by CodeBastard Redgrave
//  Drop items in the prim containing this script
//  Pay the set price amount and it will give you a random object

//  Pieces stolen from:
//      Give inventory to whoever touches the prim, written by Sasun Steinbeck


integer price = 10;


list inventory_list()
{
    string thisScript = llGetScriptName();
    integer numberOfItems = llGetInventoryNumber(INVENTORY_ALL);

    list listToBeReturned;
    string itemName;

    integer index;
    do
    {
        itemName = llGetInventoryName(INVENTORY_ALL, index);
        if (itemName != thisScript)
            listToBeReturned += [itemName];
    }
    while (++index < numberOfItems);

    return
        listToBeReturned;
}

default
{
    on_rez(integer start_param)
    {
        llResetScript();
    }

    changed(integer change)
    {
        if (change & (CHANGED_OWNER | CHANGED_INVENTORY))
            llResetScript();
    }

    state_entry()
    {
        key owner = llGetOwner();

        llRequestPermissions(owner, PERMISSION_DEBIT);
        llSetPayPrice(PAY_HIDE, [price, PAY_HIDE, PAY_HIDE, PAY_HIDE]);
    }

    money(key id, integer amount)
    {
        if (amount == price)
        {
            list listOfItems = inventory_list();

            integer numberOfItems = llGetListLength(listOfItems);
            integer randomIndex = (integer)llFrand(numberOfItems);

            if (numberOfItems)
            {
                string nameOfThisPrim = llGetObjectName();
                llGiveInventoryList(id, nameOfThisPrim, [llList2String(listOfItems, randomIndex)]);
                llInstantMessage(id, "Your item is in a folder named '" + nameOfThisPrim + "'. Thank you!");
            }
            else
            {
                llInstantMessage(id, "No items to offer.");
                llGiveMoney(id, amount);
            }
        }
        else
        {
            llInstantMessage(id, "Sorry that is the wrong amount for this item.");
            llGiveMoney(id, amount);
        }
    }
}