Welcome to the Second Life Forums Archive

These forums are CLOSED. Please visit the new forums HERE

Discussion: Hiro's Super Vendor Software

Hiro Pendragon
bye bye f0rums!
Join date: 22 Jan 2004
Posts: 5,905
02-17-2005 00:44
Okay, I'm open-sourcing my vendor software. I'm involved with enough products that I do not have time to make any more updates. Time and time again I have proven this vendor to be easy to use and low-lag. It also allows for changes to the prices of items without having to reset the script or update all the items, which notecard vendors do.

I made this vendor script back when vendors were 500-1000L a piece for a decent one. Since then you have had multiple choices of good, free vendors. I'm very happy about that. Now, you can play with the script even more. I'll be updating the vendors to 1.3 in the world with the modable scripts. :)

If you have mods for this vendor, I would be happy to have you post them in reply to this thread!

Enjoy!

(This will take several posts to get everything through, so wait until the moderator gets all of them approved.)


----

FAQ
Hiro's Super Vendor Program v1.2
====================
by: Hiro Pendragon

If you like / use this kit please RATE me positively, and feel free to
tip me L$.
I put a lot of hard work into this!

=======
Instructions
=======

OVERVIEW:

Hiro's Super Vendor Program is designed to be the easiest vendor to use.
This notecard does step-by-step for dummies to advanced users on how
to set up your vendor.
If you have questions / need help / have feedback PLEASE consult this
Notecard first.
If your question has not been answered, then you are very welcomed to
send an IM to Hiro Pendragon.

!!!! RESELLING WARNING !!!!
This package should allow anyone to make just about any vendor they
need. It is designed to be
free and if you are caught selling it I will negatively rate you and
file an abuse report with the Lindens.

Version info: (Thank you for all who gave feedback!!!)
1.0 - creation
1.1.1 - bug fix / documentation update
1.2
- Holo-vendor now using a HOLOprim object to ensure objects rez correctly
- All vendors now have more helpful verbiage in the floating text when
you are setting up your vendor
- Vendors now ask the owner for money permission on creation (say yes!)
- tips & tricks section of documentation added
- Creator's notes section of documentation added
- Documentation update

INDEX:
A. Setting Up
- Default Vendor turn-key Setup
- Custom Vendor Kit Setup (advanced)
B. Commands Index
C. Permissions Help
D. Selling Items of a Non-Object Type
E. More tips & tricks
F. Color Quick Reference
G. Creator's notes

---------------
A. Setting Up
---------------
You can use one of the three default vendors provided, or you can
integrate the scripts into your own custom vendor.

----------------------------------------
-- Default Vendor Turn-key Setup: --
----------------------------------------

(demo objects / pictures have been placed in the vendors so you can
see how it should work)

1. Choose one of the three default vendors (regular with buttons,
1-prim, or holographic).
When you rez it, it will ask for permission to take money from you.
Select "Yes" or your vendor will not be able to give change if a
customer overpays or underpays.

2. Delete all the demo items, demo pictures, and demo hologram-items
in the vendor.

3. Put your own items for sale in the vendor. Each needs a unique name.

4. For regular or 1-prim vendor, put preview-pictures of each item for
sale in the vendor. They should be named the same as your items, with
"PIC" at the end. For example, if your item is "jeans" the picture
should be "jeansPIC".

4. - For Holo vendor only:
To ensure prims are rezzed in a correct place, you will need to attach
each item for sale to the "HOLOprim - transparent" object,
located in the Holo vendor kit.
You do this in 3 steps:
4a. Rez the transparent HOLOprim, and move / rotate / align your
product however you want it to rez in your vendor.
If you align it upside down relative to the HOLOprim, it will rez
upside down. If you are not clear on this, the best
thing to do is experiment. If you have trouble working with the
HOLOprim as invisible, I recommend making the texture
semi-transparent / no texture while you work with it. You need to make
sure it's transparent when you are done.
DO NOT change the rotation of the HOLOprim.
DO NOT use the HOLOprim on the actual object for sale
DO NOT set the HOLO items for sale with a price - that would just be silly.
4b. Rename the HOLOprim - to the name of the item for sale and "HOLO"
added to the end of each object. For instance, if your item is named
"car" you will rename it "carHOLO".
4c. Select JUST your item for sale. THEN select the transparent
HOLOprim. Hit Control-L or Tools -> Link. You MUST make
sure that you select the HOLOprim last so that it becomes the new
primary prim, else your object may not rez in the
appropriate direction / alignment.
4d. You now should have a copy of your item for sale, linked with the
HOLOprim as the primary prim, named the same
as the item for sale, but ending in HOLO.

5. Say "HiroVendor:setname:NEWNAMEHERE" - where NEWNAMEHERE is a name
you would like to have your vendor respond to your voice commands.
Each vendor you use should be named differently.

6. Say, "NEWNAMEHERE:updateitems" - where NEWNAMEHERE is the name you
just chose.

7. Set the prices of your items using the "NEWNAMEHERE:setprice"
command. (see section B - Commands Index)

8. Place your vendor wherever you like, frame it, integrate it with a
nice looking box ... whatever.

You're selling!

Check out Section B - "Commands Index" in this notecard to see all the
neat features you can use!

---------------------------------
-- Custom Vendor Kit Setup: --
---------------------------------
Since the scripts are copyable, you can just follow these instructions
and integrate my software with your own design. This might be handy if
you want a different sized screen, different looking buttons ...
whatever.

WARNING: Please do not mix the different vendor scripts together, or
put more than one in a single object. This will wind up causing messed
up results.

1. Script placement:

For regular vendor with buttons:
1a. Place the main script, "Hiro's Super Vendor Program" in the main
prim of your vendor.
1b. Place the HP_vendor_button_forward script on the prim you want to
cycle forward through the list of items
1c. Place the HP_vendor_button_backward script on the prim you want to
cycle backward through the list. (back not required).

For 1-prim vendor without buttons:
1a. Place the main script, "Hiro's Super Vendor Program - 1 prim" in
the main prim of your vendor.

For 3-prim Holographic Projector vendor:
1a. Place the main script, "Hiro's Super Vendor Program -
Holo-projector" in the main prim of your vendor.

2. Sale item placement
- Each item for sale is required to have a unique name. Place each
item for sale in the main prim of your vendor.

3. Item picture placement
- If you have textures / pictures for the items to be displayed, place
them on the display prim
- each texture / picture must have the same name of the item, followed
by "PIC". For example, an object "jeans" for sale would need its
picture named "jeansPIC".

4. Linking
- AFTER you place all your scripts and items and picture, then you
want to link all your items together.
The primary prim should be the one with your main script and objects
for sale. Use shift-click to select
more than one object. The prim you select LAST before you link will be
your main primary prim.

5. Setting Up Your Main Script
Overview - all commands are colon (:) deliniated, and will start with
the name of your vendor. By default, the name is "HiroVendor". The
first thing you will do is change this.
- say,
HiroVendor:setname:NEWNAMEHERE
where NEWNAMEHERE is the name for your vendor.
This will change all of your commands to start with this name. Use
this especially if you have more than one vendor, else you may wind up
messing up one vendor when trying to command another one.
- say,
VENDORNAME:updateitems
where VENDORNAME is the name you chose.
This will scan your vendor for objects in its folder, and
automatically add them for sale.
- set all your prices at once by inputting them as a list of integers
using the changeprice command and the "all" option. For example, if
your vendor was named "Clothing Vendor" and you had 3 items for sale,
and the items should be priced 50, 30, and 100 L... you would say:
Clothing Vendor:setprice:all:50,30,100
- set one price at a time by inputting just one number, and the value
of which item you want to change instead of "all". For instance, using
the previous example, if I wanted to change the price of the second
item from 30 to 60, I would say:
Clothing Vendor:setprice:2:60

---------------------
B. Commands Index
---------------------
All commands start with the vendor's name that you have given it
(HiroVendor by default) and a colon ":".

Forget the vendor's name?
Type: "GetHiroVendorName" and the name will be said!

1. setname
- sets the name of the vendor
syntax- (Old vendor name):setname:(new vendor name)

2. updateitems
- refreshes the list of items for sale. The script will scan the
contents and automatically put them for sale.
You will need to set the prices after.

3. listitems
- shows all items for sale, their number, and their price

4. setprice
- sets the price of items. There are two options: all or single.
- "all" lets you input a list of prices for all items for sale. for
example, if you have 3 items, 1-3, and prices should be: 10,40,700,
you would say:
VENDORNAME:setprice:all:10,40,700
- single mode lets you change just one value. In the above example, if
you want to change the second item to a price of 50, you would say:
VENDORNAME:setprice:2:50

5. listsales
- up to 30 sales can be stored. Should you exceed the limit, the
oldest will be deleted as new sales arrive.
- if you input a value, the last X sales will be shown, for example, where X=10:
VENDORNAME:listsales:10
- if you enter "-1" it will disable sales tracking. if sales tracking
is off, it will enable tracking

6. clearsales
- recommended if you have a lot of scripts in the area of the vendor

7. setcolor
- To change the text color, input the three values for Red, Green, and
Blue separated by commas. If red is set to -1, the text will not be
displayed. Examples:
to have clear text:
VENDORNAME:setcolor:-1,0,0
to have white text:
VENDORNAME:setcolor:1,1,1
(See E. for color quick reference.)

8. resetscript
- Only use this if you really need to! All your prices and sales info
will be lost!

9. listsales
- plain, shows all sales stored on the vendor
- if you input a number, it will show that many of the most recent
sales, starting with most recent
example, to show the last 10 sales:
VENDORNAME:listsales:10

10. getfreemem
- Shows free memory in the heap size, so you don't go overboard

11. share
- This option can turn on a percentage profits to keep track of, in
case you want to share your profits with someone. It is currently
arduous to automate this payment, so you will still need to do so
yourself, however the vendor will track exactly how much you may owe.
The command has three subcommands, "show", "set", and "reset"
- "show" displays the current sum.
Example- VENDORNAME:share:show
- "set" lets you input a percentage, 0-100. Do NOT use a percent sign.
Example- VENDORNAME:share:50
- "clear" puts the sum of money owed to zero.
Example- VENDORNAME:share:reset

12. GetHiroVendorName
- said WITHOUT the preceeding vendor name, returns the name of the
vendor, in case you forget.

---------------------
C. Permissions Help
---------------------
Some quick tips on how to do permissions:

-Anything you sell must have at least one of the three permissions set
for "Next owner can". They include: copy, modify, and transfer.

-Whatever you select will wind up as the new permissions of your buyers.

-If you wish to deselect a permission that is the last one selected,
you must first select another permission, and THEN deselect the first.

-If a prim/content of an object does not have copy permission, then
the whole item cannot have copy permission

-Sometimes if you set permissions in your inventory, it will for some
reason not change them properly. This is a known SL bug that the
Lindens have declared. It is best to set permissions on objects while
they are rezzed.

-----------------------------------------
D. Selling Items of a Non-Object Type
-----------------------------------------

Only items of type OBJECT will be considered for sale. If you have a
non-OBJECT type, you should place it in a OBJECT (usually a simple
box), and place that object in the vendor instead. The object should
be named what you want the item to be sold as.

This is also a good idea if you wish to sell multiple things as one
package. (For instance, selling a set of items that make up an AV, or
selling a set of sounds, scripts, textures, etc, or including a
business notecard of yours in everything you sell.)

Non-objects include:
- clothing
- body parts
- sounds
- textures
- scripts
- landmarks
- notecards

---------------------------
E. More tips & tricks
---------------------------

All vendors:
- Check the command list for options.
- Customize them - all of the prims in the turn-key vendors are
modifyable so you can change them to your
needs, integrate them with a cool looking vendor. You are empowered to
make your own!
- If you're really having problems getting started, take a look at how
the turn-key vendors are set up.

Holo-vendor:
- Make your HOLO items semi-transparent and phantom for that holographic look
- Make your HOLO items temporary on rez to not take up ANY more prims on the parcel
- Make mini-models of large items and use them for your HOLOs
- Align your HOLOprim lower than the item for sale, and it will make
the item appear to rez higher
- Use the X-Y-Z axis on the HOLOprim to align it properly centered on
your objects
- Known limitation - there appears to be a bug in SL that there is a
lag on when number of prims are tallied in a sim.
As a result, if you scroll through the holo-vendor quickly in a sim close
to its prim allocation limit, you may get an "out of prims" error
message. This bug has been reported to the Lindens and being investigated.
I recommend you set your HOLO objects to temporary on rez to circumvent this issue!

---------------------------
F. Color Quick Reference
---------------------------
-1 = transparent (for this vendor software)
1,1,1 = white
0,0,0 = black
1,0,0 = red
0,1,0 = green
0,0,1 = blue
1,1,0 = yellow
1,0,1 = magenta
0,1,1 = cyan
0.5,0.5,0.5 = grey (different shades of gray whenever R,G,B values are equal)

---------------------------
G. Creator's Notes
---------------------------
Hi, I'm Hiro Pendragon, RL software designer, SL bladecrafter /
builder / scriptor.

Why did I make this?
Well, I needed a nice hologram rezzing vendor for my blades since they
are higher-prim and I did
not own a lot of land for lots of prims. So, I started looking around
and saw that there were
a number of vendors, many laggy / buggy / without features I wanted,
and most too expensive
(500-1000L PER vendor). I decided to take matters into my own hands,
script my own vendor
kits that everyone could use. They would be easy to use, low-lag, with
nice features.

I decided that I would charge a SMALL sum for the kit while I
developed it - 400L - for a copyable
set - and decided it would need to be free, so that all people in
Second Life could make their own
vendors and not have to be ripped off for a good vendor. It seems such
an obvious thing to need
- something on par with the Second Life interface itself.
So as Emeril would say, BAM! It's now free.

My primary concerns in building this kits were:
- 0 bugs
- Ease of use
- Low-lag so that they don't bog down a store / mall
- Base features that most people would consider sufficient
- Customizability with the actual prims

FAQ -

Q: Can you add the feature (insert feature here)?
A: It's open source. You can now mod it yourself.

Q: Can you give me help with the vendor?
A: If it's a quick question, sure. Otherwise, it's freeware and I take
zero responsibility for any modifications others make to my original scripts.

Q: Why is the holo-vendor trickier than the other vendors?
A: So that it looks right. If you don't use the HOLO object with the
HOLOprim, it won't rez centered. This way,
it also gives great flexibility to the vendor-owner without adding lag
to the script. A few extra minutes
to use the holo-vendor means much greater usability.

---------
UPGRADES IDEAS:

-> XMLRPC
-> IM notification of sale
-> setdescription function
-> admin on/off button that toggles listen state
-> cycle through items automatically
_____________________
Hiro Pendragon
------------------
http://www.involve3d.com - Involve - Metaverse / Emerging Media Studio

Visit my SL blog: http://secondtense.blogspot.com
Nada Epoch
The Librarian
Join date: 4 Nov 2002
Posts: 1,423
02-17-2005 08:01
please refrain from posting until hiro has all of his posts finished. :D Cool thanks guys.

This message will be deleted once he is done ;)
_____________________
i've got nothing. ;)
Hiro Pendragon
bye bye f0rums!
Join date: 22 Jan 2004
Posts: 5,905
left / right arrows
02-17-2005 08:04
Scripts for the left and right arrows, pretty standard, really. I'll let you figure out which one goes where ;)

CODE
default
{
touch_start(integer total_number)
{
llMessageLinked(0,-1,"backward","");
}
}


CODE
default
{
touch_start(integer total_number)
{
llMessageLinked(0,-1,"forward","");
}
}
_____________________
Hiro Pendragon
------------------
http://www.involve3d.com - Involve - Metaverse / Emerging Media Studio

Visit my SL blog: http://secondtense.blogspot.com
Hiro Pendragon
bye bye f0rums!
Join date: 22 Jan 2004
Posts: 5,905
Basic vendor / 1 prim
02-17-2005 08:07
Here's the script for my regular vendor / 1-prim vendor:

CODE
// Header:
// (c) 2004 Original Super Vendor Script by the player Hiro Pendragon for Second Life (tm).
// This code is meant to be open source and free and is NOT to be resold in unmodified or modified form.
// Any modifications made to this script should be listed here in the header.
// This header is NOT to be modified in any way other than adding additional comments.
// Violation of these rules is considered consent to immediately turn over all rights and profits
// made using this script to the original player of Hiro Pendragon.
//
// Hiro Pendragon guarantees NO assistance or technical support with this script.
//
// Dev notes:
// Yeah, I know the original script doesn't have procedues pulled out into seperate functions
// as they could be. This evolved as a quick script for my own use, and because the size was
// relatively small, I decided to not spend the time going through and pulling out functions.
// Good luck, I hope you folks using this code can help innovate Second Life! -Hiro Pendragon
//
//
// End of Header //

key ownerkey; // used to check command authorization

string vendorname = "HiroVendor";
// this string proceeds all commands, so you can use multiple vendors in one area and
// specificy which one you want to talk to by using different names for each

list currentitemlist; // stores the list of items for sale
list currentpricelist; // stores the list of prices
list recentsales; // list of sales information

integer defaultprice=9999999;
// init to 10 million to prevent accidental setup and people purchasing stuff for 0L


integer numberitems = 0; // number of items set to the currentitemlist
integer selected = 1;
// which item in the list is selected in the vendor, from 1 to numberitems

integer recordsales = 1; // 1 = records the sales, 0 = record sale mode off

integer percentshare = 0; // stores the percentage shared 0-100
integer owed = 0; // stores the amount of L$ owed a partner

integer storelisten = 0; // used for listens

// constants
float r=1.0;
float g=1.0;
float b=1.0;



updatetext()
// called at any time after updateitems is called, updates the floating text on the vendor
{
if(r==-1)
llSetText("",<0,0,0>,100); // if r set to -1, hide text
else //
llSetText(llList2String(currentitemlist,(selected - 1))+
"\n$"+llList2String(currentpricelist,(selected - 1))+"L"
+"\nItem "+(string)selected+" of "+(string)numberitems,
<r,g,b>, 1.5);

}


listsaleitems()
// outputs to channel 0 all items for sale & prices
{
integer c = llGetListLength(currentitemlist);
llSay(0,"There are currently "+(string)c+" items for sale in
vendor "+vendorname+".");
integer d;
for(d = 0;d<c;++d)
{
llSay(0,"Item "+((string)(d+1))+":"+llList2String(currentitemlist,d)+
", price: "+llList2String(currentpricelist,d));
}

}

Init()
{
ownerkey = llGetOwner();
llSay(0,llGetScriptName()+" has been placed in object:
"+llGetObjectName()+".");
llSay(0, "The 'Instructions for Hiro's Super Vendor' notecard
will walk you through the process of getting your vendor ready for
sales!");
llRequestPermissions(ownerkey,PERMISSION_DEBIT);
llSetText("Hiro Pendragon's\nSuper Vendor Software\nType the
following to start:\nHiroVendor:updateitems",<1,1,1>,100);

}

////////////// DEFAULT / INIT STATE ////////////

default
// If a vendor has not been initialized, do init and go into listenmode
{

state_entry()
{
Init();
state listenmode;
}

on_rez(integer param)
{
Init();
state listenmode;
}

}

///////// STATE LISTENMODE - MAIN STATE ///////

state listenmode
{
// DEV NOTES: If you'd like, move the listens to a channel other than 0.
state_entry()
{
llListenRemove(storelisten); // removes listen as precaution
storelisten = llListen(0,"",ownerkey,""); // listen only to owner
}

on_rez(integer param)
{
Init();
llListenRemove(storelisten); // removes listen as precaution
storelisten = llListen(0,"",ownerkey,""); // listen only to owner

}

listen(integer channel, string name, key id, string msg)
{
list command = llParseString2List(msg,[":"],[]); // input parsed into a list by ":"

if(llList2String(command,0)==vendorname)
// ALL COMMANDS MUST START WITH THE VENDORNAME
{
string whichcommand=llList2String(command,1); // grab first word in the command

// COMMAND setname
if(whichcommand=="setname")
{
string newname=llList2String(command,2);
if(newname!="") // do not allow a null name
{
llSay(0,"Vendor '"+vendorname+"' has been renamed:'"+newname+"'.");
vendorname=newname;

}
else
{
llSay(0,"Sorry, you must enter a name for your vendor. Please try again.");
}
// ! NOTE: The name should not include a ":". Someone could probably error trap for this. -Hiro
}

// COMMAND updateitems
else if(whichcommand=="updateitems")
// this section scans through items in the object and puts them in a list
{
integer numitems=0;
numitems += llGetInventoryNumber(INVENTORY_OBJECT);
// all items in the vendor's contents are put for sale

llSay(0,(string)numitems+" items found in this vendor:");
numberitems = numitems;
list itemlist; // temporary list to work on
integer c;
integer listlength=llGetListLength(currentitemlist);
if (listlength > 20)
// I made 20 an arbitrary recommended maximum just for ease of use
{
llSay(0,"Warning! Items for sale exceeds recommended maximum.");
}
currentpricelist = llDeleteSubList(currentpricelist,0,(listlength - 1));
// clear the current list

for(c=0;c<numitems;++c)
// put all objects on the sale list and initialize prices to 10mil
{
itemlist += llGetInventoryName(INVENTORY_OBJECT,c);
llSay(0,((string)(c+1))+":"+llList2String(itemlist,c));
currentpricelist=currentpricelist+(string)defaultprice;
}

currentitemlist=itemlist; // main list is updated
selected = 1; // sets the vendor to the first item
updatetext();
llSay(0,"You now need to update all of the prices.");
// reminder to the user

}

else if(whichcommand=="listitems")
{
listsaleitems();
}

else if(whichcommand=="setprice")
// setprice has 2 modes - set all, or set one
{
if(llList2String(command,2)=="all")
// if "all" entered, accept a list of new prices
{
list newpricelist=llParseString2List(llList2String(command,3),[","],[]);
// takes the user comma-deliniated input
integer newlength = llGetListLength(newpricelist);
integer oldlength = llGetListLength(currentpricelist);
if(newlength!=oldlength)
// error - wrong number of prices entered
{
llSay(0,"Error! The list of prices you entered ("+((string)newlength)
+") does not have the same number as already exists! ("
+((string)oldlength)+")");
}
else
{
integer c;
integer valid = 1;
for(c=0;c<newlength;++c)
{
integer newprice = (integer)llList2String(newpricelist,c);
if(newprice<0)
// error trap - all prices must be non-negative
{
valid=valid - 1;
}
}
if(valid<1)
{
llSay(0,"Error! "+((string)(1 - valid))+"prices were less than 0.");
}
else
// else all values are > 0, go ahead and change prices
{
llSay(0,"Prices being updated.");
currentpricelist = newpricelist;
updatetext();

}
}
} // end setprice "all" routine


else if(llList2String(command,2)!="")
// set price of just one item
{
integer whichitem = (integer)llList2String(command,2);
if(whichitem>llGetListLength(currentpricelist))
// get the index of the item to change price on, make sure it's < numberitems
{
llSay(0,"Error! Item index is greater than the actual number of items!");
}
else
{
whichitem--;
// since users will input 1 to numberitems, this adjusts to reference the list

integer newprice = (integer)llList2String(command,3);
if(newprice<0)
// error trap for negative prices
{
llSay(0,"Error! Must enter a non-negative price!");
}
else
// else price is valid, need to cut and paste this one into the list
{
integer pricelistlength = llGetListLength(currentpricelist);
integer c;
list newpricelist;
for(c=0;c<pricelistlength;++c)
// creates the new price list and replaces
{
if(c==whichitem)
{
newpricelist = newpricelist + (string)newprice;
}
else
{
newpricelist = newpricelist + llList2String(currentpricelist,c);
}
}
llSay(0,"Prices being updated.");
currentpricelist = newpricelist;
updatetext();
}
}

}
} //end setprice


else if(whichcommand == "setcolor")
// setcolor inputs RGB values for the floating text. values > 1 are 1, values < 0 are 0 in SL
// NOTES: There's no reason input could be changed to 0-255 by simply dividing the float
// by 255 before setting the value of the colors
{
list colors = llParseString2List(llList2String(command,2),[","],[]);
r = (float)(llList2String(colors,0));
g = (float)(llList2String(colors,1));
b = (float)(llList2String(colors,2));
updatetext();
}

else if(whichcommand == "resetscript")
// This was used because the script was no-mod and it gave users a way to reset the script.
// This command can be omitted if distributing with mod permission
{
llResetScript();
}


// Command listsales - lists sales / toggles sales tracker
else if(whichcommand == "listsales")
{
integer howmany = (integer)llList2String(command,2);
integer c;
integer leng = llGetListLength(recentsales);
if (howmany == -1)
// if user input is -1, toggle sales tracking
{
if(recordsales ==1) // if on, turn off
{
llSay(0,"Disabling sales tracking for vendor: "+vendorname);
recordsales = 0;
recentsales = llDeleteSubList(recentsales,0,(llGetListLength( recentsales ) - 1));
}
else // else off, turn on
{
llSay(0,"Re-enabling sales tracking for vendor: "+vendorname);
recordsales = 1;
}
}

else if(recordsales == 1)
// else, if sales tracker mode is on, do list
{
if ((howmany < 1)||(howmany > leng))
howmany = leng;
// default is to show the whole list

llSay(0,"Listing "+(string)howmany+" items that have sold recently:");
for(c=1;c<=howmany;c++)
{
llSay(0,llList2String(recentsales,(leng - c)));
}
}
} // end command listsales


else if(whichcommand == "clearsales")
{
recentsales = llDeleteSubList(recentsales,0,(llGetListLength( recentsales ) - 1));
llSay(0,"Clearing sales list.");
}

else if(whichcommand == "getfreemem")
// get the free memory in the sim... just a handy feature for busy sims
{
llSay(0,(string)llGetFreeMemory());
}

// command share - toggles / changes share settings
// Dev notes: If I had time, I would have added a command that would have allowed a user
// to touch the vendor and grab their key, then alter payment to directly pay shares,
// and also allow multiple sales. -Hiro
else if(whichcommand == "share")
{
string whattodo = llList2String(command,2);
if(whattodo == "set")
// the "set" switch indicates the percentage of share tracking should be set
{
integer newpercent = (integer)llList2String(command,3);
if((newpercent<0)||(newpercent>100))
llSay(0,"Error! Sharing percentage must be 0-100%");
else
{
percentshare = newpercent;
llSay(0,"New percentage shared is "+(string)percentshare);
}
}
else if(whattodo == "show")
// the "show" switch shows the total money owed in the share
{
if(owed>0)
llSay(0,"You currently owe "+(string)owed+"L to whom you are sharing.");
}
else if(whattodo == "clear")
// Dev notes: Yeah, it's ghetto. You have to manually pay your partner and clear by hand.
// I've been too busy to fix it, but now you all can do it yourself! *chuckles* -Hiro
{
llSay(0,"Setting amount owed from "+(string)owed+"L to 0L.");
owed = 0;
}
}

} // end share


else // else the command does not start with the vendorname string
if(llList2String(command,0)=="GetHiroVendorName")
// useful command if you've forgotten the name of your vendor
{
llSay(0,"My name is: "+vendorname);
}
} // end listen


link_message( integer sender_num, integer num, string str, key id)
// link message receives back/forward options from the buttons.
// REMARK out this whole section if you're using a 1-prim vendor.
{
// llSay(0,"changing");
if(str=="forward")
{
selected++;
if (selected > numberitems)
selected = selected - numberitems;
llSetTexture(llList2String(currentitemlist, (selected - 1) )+"PIC",ALL_SIDES);
updatetext();

}
if(str=="backward")
{
selected = selected - 1;
if (selected < 1)
selected = selected + numberitems;
llSetTexture(llList2String(currentitemlist, (selected - 1) )+"PIC",ALL_SIDES);
updatetext();
}

} // End link message

touch( integer n)
// touch script optional for vendor with arrows, but required for 1-prim vendor
{
// llSay(0,"changing");
selected++;
if (selected > numberitems)
selected = selected - numberitems;
llSetTexture(llList2String(currentitemlist, (selected - 1) )+"PIC",ALL_SIDES);
updatetext();

}


money( key giver, integer amount )
// Thanks Kaleb Underthor for your shared money function that I borrowed -Hiro
{
integer price = (integer)llList2String(currentpricelist, (selected - 1) );
string object = llList2String(currentitemlist, (selected - 1) );
if ( amount < price )
// if underpayment, return money
{
llSay( 0, "This item costs L$" + (string) price );
llSay( 0, "You only paid "+(string)amount);
llGiveMoney( giver, amount );

}
else
{
llSay( 0, "Enjoy your " + object );
llGiveInventory( giver, object );
if(llGetListLength(recentsales)>=30)
llDeleteSubList(recentsales,0,0);
// sales list limited to 30 so that mall sims don't run out of memory!

if(recordsales==1) // if sales tracking on, record the sales
recentsales = recentsales + (llGetDate()+":"+object+":"+(string)price);
//fixing the error here

if (amount > price)
// if overpayment, give change
{
llGiveMoney(giver, amount - price);
}

if(percentshare > 0) // if share mode on, then add share moneys
{
owed += ((price * percentshare)/100);
}

//
}
} // end money routine
}
_____________________
Hiro Pendragon
------------------
http://www.involve3d.com - Involve - Metaverse / Emerging Media Studio

Visit my SL blog: http://secondtense.blogspot.com
Hiro Pendragon
bye bye f0rums!
Join date: 22 Jan 2004
Posts: 5,905
Holo-vendor Scripts
02-17-2005 08:16
First, the code for the HOLOprim - this makes your holograms derez on command and spin.

CODE

// Header:
// (c) 2004 Original Super Vendor Script by the player Hiro Pendragon for Second Life (tm).
// This code is meant to be open source and free and is NOT to be resold in unmodified or modified form.
// Any modifications made to this script should be listed here in the header.
// This header is NOT to be modified in any way other than adding additional comments.
// Violation of these rules is considered consent to immediately turn over all rights and profits
// made using this script to the original player of Hiro Pendragon.
//
// Hiro Pendragon guarantees NO assistance or technical support with this script.
//
// Dev notes:
// Yeah, I know the original script doesn't have procedues pulled out into seperate functions
// as they could be. This evolved as a quick script for my own use, and because the size was
// relatively small, I decided to not spend the time going through and pulling out functions.
// Good luck, I hope you folks using this code can help innovate Second Life! -Hiro Pendragon
//
//
// End of Header //


integer thekey;
integer listencontrol;

default
{
state_entry()
{
llSetStatus(STATUS_PHANTOM, TRUE);
llSetStatus(PRIM_TEMP_ON_REZ, TRUE);
llTargetOmega(<0,0,1>,(PI/8),1.0); // SPIN - REMARK out to disable
}

on_rez(integer param)
{
llSetStatus(STATUS_PHANTOM, TRUE);
llSetStatus(PRIM_TEMP_ON_REZ, TRUE);
thekey = param; // receives it's random PIN on rez as the parameter
llTargetOmega(<0,0,1>,(PI/8),1.0); // SPIN - REMARK out to disable
listencontrol = llListen(126944,"","",("change:"+(string)thekey) );

}

listen( integer channel, string name, key id, string msg)
{
llListenRemove(listencontrol);
llDie();

}
}



And the holo-vendor, which I have left out all the comments from the regular vendor.
I've also added color so you can see what sections relate to the holograms. Please assume all comments posted in the regular vendor script are still valid, including the copyright / freeware notes.

CODE

// Header:
// (c) 2004 Original Super Vendor Script by the player Hiro Pendragon for Second Life (tm).
// This code is meant to be open source and free and is NOT to be resold in unmodified or modified form.
// Any modifications made to this script should be listed here in the header.
// This header is NOT to be modified in any way other than adding additional comments.
// Violation of these rules is considered consent to immediately turn over all rights and profits
// made using this script to the original player of Hiro Pendragon.
//
// Hiro Pendragon guarantees NO assistance or technical support with this script.
//
// Dev notes:
// Yeah, I know the original script doesn't have procedues pulled out into seperate functions
// as they could be. This evolved as a quick script for my own use, and because the size was
// relatively small, I decided to not spend the time going through and pulling out functions.
// Good luck, I hope you folks using this code can help innovate Second Life! -Hiro Pendragon
//
//
// End of Header //


key ownerkey;

string vendorname = "HiroVendor";

list currentitemlist;
list currentpricelist;
integer defaultprice=9999999;
list recentsales;

integer numberitems = 0;
integer selected = 1;

integer recordsales = 1;

integer percentshare = 0;
integer owed = 0;

integer randme = 0;

integer storelisten = 0;

float r=1.0;
float g=1.0;
float b=1.0;

updatetext()
{
if(r==-1)
llSetText("",<0,0,0>,100);
else
llSetText(llList2String(currentitemlist,(selected - 1))+
"\n$"+llList2String(currentpricelist,(selected - 1))+"L"
+"\nItem "+(string)selected+" of "+(string)numberitems, <r,g,b>, 1.5);
}

/////// Holographic rez procedure ////////////////
doRezNow()
{
llSay(126944,("change:"+(string)randme));
llRezObject((llList2String(currentitemlist,(selected - 1))+"HOLO";),
(llGetPos()+<0,0,1>;),<0,0,0>,llGetRot(),randme);
// sends "randme" as the parameter on rez as the PIN for the hologram

// DEV NOTES: Someone could probably change this so that randme becomes
// the channel that replaces "126944" - would actually take down lag in the sim
// where there are multiple hologram vendors in range of one another - Hiro

updatetext();
}
///////////////////////////////////////////////////////

listsaleitems()
{
integer c = llGetListLength(currentitemlist);
llSay(0,"There are currently "+(string)c+" items for sale in vendor "+vendorname+".");
integer d;
for(d = 0;d<c;++d)
{
llSay(0,"Item "+((string)(d+1))+":"+llList2String(currentitemlist,d)+
", price: "+llList2String(currentpricelist,d));
}

}
Init()
{
ownerkey = llGetOwner();
llSay(0,llGetScriptName()+" has been placed in object: "+llGetObjectName()+".");
llSay(0, "The 'Instructions for Hiro's Super Vendor' notecard will walk you through the process of getting your vendor ready for sales!");
randme = 1000+(integer)llFrand(2100000000); // random PIN
llRequestPermissions(ownerkey,PERMISSION_DEBIT);
llSetText("Hiro Pendragon's\nSuper Vendor Software\nType the following to start:\nHiroVendor:updateitems",<1,1,1>,100);

}

default
{

state_entry()
{
Init();
state listenmode;
}
on_rez(integer param)
{
Init();
state listenmode;
}

}

state listenmode
{
state_entry()
{
llListenRemove(storelisten);
storelisten = llListen(0,"",ownerkey,"");
}

on_rez(integer param)
{
Init();
llListenRemove(storelisten);
storelisten = llListen(0,"",ownerkey,"");

}
listen(integer channel, string name, key id, string msg)
{
list command = llParseString2List(msg,[":"],[]);
if(llList2String(command,0)==vendorname)
// ALL COMMANDS MUST START WITH THE VENDORNAME
{
string whichcommand=llList2String(command,1);
if(whichcommand=="setname")
{
string newname=llList2String(command,2);
if(newname!="")
{
llSay(0,"Vendor '"+vendorname+"' has been renamed: '"+newname+"'.");
vendorname=newname;

}
else
{
llSay(0,"Sorry, you must enter a name for your vendor. Please try again.");
}
}
else if(whichcommand=="updateitems")
// this section scans through items in the object and puts them in a list
{
integer numitems=0;
numitems += llGetInventoryNumber(INVENTORY_OBJECT);
list itemlist;
integer c;
integer listlength=llGetListLength(currentitemlist);
currentpricelist = llDeleteSubList(currentpricelist,0,(listlength - 1));
integer tempnum = numitems;
for(c=0;c<tempnum;++c)
{
/////////////// HOLO EDIT /////////////////
string thisitem = llGetInventoryName(INVENTORY_OBJECT,c);
integer whereisHOLO = llSubStringIndex(thisitem,"HOLO";);
// Here you'll note that we check for "HOLO" at the end of an item,
// and do NOT add them to the list of items for sale
llSay(0,(string)c+":"+thisitem+":"+(string)whereisHOLO+":"+(string)llStringLength(thisitem));

if((whereisHOLO!=-1)&&;((whereisHOLO+4)==llStringLength(thisitem)))
{
numitems = numitems - 1;
}
else
////////////////////////////////////////////
{
itemlist += thisitem;
currentpricelist=currentpricelist+(string)defaultprice;
}
}
llSay(0,(string)numitems+" items found in this vendor:");
for(c=0;c<numitems;++c)
{
llSay(0,((string)(c+1))+":"+llList2String(itemlist,c));
}
numberitems = numitems;
if (numitems > 20)
{
llSay(0,"Warning! Items for sale exceeds recommended maximum.");
}

currentitemlist=itemlist;
selected = 1;
updatetext();
llSay(0,"You now need to update all of the prices.");

}
else if(whichcommand=="listitems")
{
listsaleitems();
}
else if(whichcommand=="setprice")
{
if(llList2String(command,2)=="all")
// if "all" entered, accept a list of new prices
{
list newpricelist=llParseString2List(llList2String(command,3),[","],[]);
// takes the user comma-deliniated input
integer newlength = llGetListLength(newpricelist);
integer oldlength = llGetListLength(currentpricelist);
if(newlength!=oldlength)
{
llSay(0,"Error! The list of prices you entered ("+((string)newlength)
+") does not have the same number as already exists! ("
+((string)oldlength)+")");
}
else
{
integer c;
integer valid = 1;
for(c=0;c<newlength;++c)
{
integer newprice = (integer)llList2String(newpricelist,c);
if(newprice<0)
{
valid=valid - 1;
}
}
if(valid<1)
{
llSay(0,"Error! "+((string)(1 - valid))+" prices were less than 0.");
}
else
// else all values are > 0, go ahead and change prices
{
llSay(0,"Prices being updated.");
currentpricelist = newpricelist;
updatetext();

}
}
}
else if(llList2String(command,2)!="")
{
integer whichitem = (integer)llList2String(command,2);
if(whichitem>llGetListLength(currentpricelist))
{
llSay(0,"Error! Item index is greater than the actual number of items!");
}
else
{
whichitem--;
integer newprice = (integer)llList2String(command,3);
if(newprice<0)
{
llSay(0,"Error! Must enter a non-negative price!");
}
else
// else price is valid, need to cut and paste this one into the list
{
integer pricelistlength = llGetListLength(currentpricelist);
integer c;
list newpricelist;
for(c=0;c<pricelistlength;++c)
{
if(c==whichitem)
{
newpricelist = newpricelist + (string)newprice;
}
else
{
newpricelist = newpricelist + llList2String(currentpricelist,c);
}
}
llSay(0,"Prices being updated.");
currentpricelist = newpricelist;
updatetext();
}
}

}
} //end changeprice
else if(whichcommand == "setcolor")
{
list colors = llParseString2List(llList2String(command,2),[","],[]);
r = (float)(llList2String(colors,0));
g = (float)(llList2String(colors,1));
b = (float)(llList2String(colors,2));
updatetext();
}
else if(whichcommand == "resetscript")
{
llResetScript();
}
else if(whichcommand == "listsales")
{
integer howmany = (integer)llList2String(command,2);
integer c;
integer leng = llGetListLength(recentsales);
if (howmany == -1)
{
if(recordsales ==1)
{
llSay(0,"Disabling sales tracking for vendor: "+vendorname);
recordsales = 0;
recentsales = llDeleteSubList(recentsales,0,(llGetListLength( recentsales ) - 1));
}
else
{
llSay(0,"Re-enabling sales tracking for vendor: "+vendorname);
recordsales = 1;
}
}
else if(recordsales == 1)
{
if ((howmany < 1)||(howmany > leng))
howmany = leng;
llSay(0,"Listing "+(string)howmany+" items that have sold recently:");
for(c=1;c<=howmany;c++)
{
llSay(0,llList2String(recentsales,(leng - c)));
}
}
}
else if(whichcommand == "clearsales")
{
recentsales = llDeleteSubList(recentsales,0,(llGetListLength( recentsales ) - 1));
llSay(0,"Clearing sales list.");
}
else if(whichcommand == "getfreemem")
{
llSay(0,(string)llGetFreeMemory());
}
else if(whichcommand == "share")
{
string whattodo = llList2String(command,2);
if(whattodo == "set")
{
integer newpercent = (integer)llList2String(command,3);
if((newpercent<0)||(newpercent>100))
llSay(0,"Error! Sharing percentage must be 0-100%");
else
{
percentshare = newpercent;
llSay(0,"New percentage shared is "+(string)percentshare);
}
}
else if(whattodo == "show")
{
if(owed>0)
llSay(0,"You currently owe "+(string)owed+"L to whom you are sharing.");
}
else if(whattodo == "clear")
{
llSay(0,"Setting amount owed from "+(string)owed+"L to 0L.");
owed = 0;
}
}

}
else
if(llList2String(command,0)=="GetHiroVendorName")
{
llSay(0,"My name is: "+vendorname);
}
} // end listen

link_message( integer sender_num, integer num, string str, key id)
{
// llSay(0,"changing");
if(str=="forward")
{
selected++;
if (selected > numberitems)
selected = selected - numberitems;
doRezNow();
// NOTE: To make this a hybrid vendor that shows the picture, too, add back in the
// picture routine from the regular vendor!

}
if(str=="backward")
{
selected = selected - 1;
if (selected < 1)
selected = selected + numberitems;
doRezNow();
// NOTE: To make this a hybrid vendor that shows the picture, too, add back in the
// picture routine from the regular vendor!
}

}

money( key giver, integer amount )
// Thanks Kaleb Underthor for your shared money function
{
integer price = (integer)llList2String(currentpricelist,( selected - 1));
string object = llList2String(currentitemlist,( selected - 1));
if ( amount < price )
{
llSay( 0, "This item costs L$" + (string)price );
llSay( 0, "You only paid "+(string)amount);
llGiveMoney( giver, amount );
}
else
{
llSay( 0, "Enjoy your " + object );
llGiveInventory( giver, object );
if(llGetListLength(recentsales)>=30)
llDeleteSubList(recentsales,0,0);
if(recordsales==1)
recentsales = recentsales + (llGetDate()+":"+object+":"+ (string)price );
//fixing the error here

if (amount > price)
{
llGiveMoney(giver, amount - price);
}

if(percentshare > 0)
{
owed += ((price * percentshare)/100);
}

//
}
} // end money routine
}


Alternatively, if you wish to do a hybrid vendor that rezzes the object in front of the screen, rather than above the main prim, replace the doRezNow() procedure with the following:
CODE

/////// Holographic rez procedure ////////////////
doRezNow()
{
llSay(126944,("change:"+(string)randme));
rotation tempRot = llGetRot();
vector tempVec = llRot2Fwd(tempRot);
llRezObject(llList2String(currentitemlist,(selected - 1)),
(llGetPos()+ tempVec),<0,0,0>,tempRot,randme);

// llSay(0,(string)tempVec.x + (string)tempVec.y + (string)tempVec.z);

// llSetTexture(llList2String(currentitemlist,( selected - 1))+"PIC",ALL_SIDES);

updatetext();
}
///////////////////////////////////////////////////////

_____________________
Hiro Pendragon
------------------
http://www.involve3d.com - Involve - Metaverse / Emerging Media Studio

Visit my SL blog: http://secondtense.blogspot.com
Forseti Svarog
ESC
Join date: 2 Nov 2004
Posts: 1,730
original thread:
02-17-2005 09:35
ne - /15/4f/36175/1.html

very cool of you to post this Hiro
Hiro Pendragon
bye bye f0rums!
Join date: 22 Jan 2004
Posts: 5,905
02-18-2005 18:43
Updated a couple DEV notes, and also added the replacement rez procedure for the hybrid vendor. The difference is that in the regular holo-vendor, it rezzes the hologram 1m above the script's prim, whereas in the hybrid vendor, it rezzes it 1 unit vector from the face of the screen.

I'm sorry I forgot to post that the first time.
_____________________
Hiro Pendragon
------------------
http://www.involve3d.com - Involve - Metaverse / Emerging Media Studio

Visit my SL blog: http://secondtense.blogspot.com
DNA Prototype
Mad Scientist
Join date: 8 Aug 2004
Posts: 179
02-19-2005 08:25
Thanks Alot Hiro. Cool move bro!

DNA
_____________________
DNA DEMENTED CIRCUITRY LIGHTING AND DJ SUPPY
SL's finest speakers, DJ gear, lasers, killer club lighting & effects.
Annah Zamboni
Banannah Annah
Join date: 2 Jun 2004
Posts: 1,022
02-19-2005 22:25
Im getting a syntax error on line 137 of the reg script:
if(llList2String(command,0)==vendorname)

any ideas?
gene Poole
"Foolish humans!"
Join date: 16 Jun 2004
Posts: 324
Idea for admin mode...
02-22-2005 13:14
Maybe when admin'ing the vendor, you could "sit" on it. And the sit wouldn't actually be a sit, but a custom anim that makes your av do a "hmmm..." look or something in-place. That could eliminate the need for listening on channel zero for admin commands (yes, let the channel-zero/lag religious flamewar commence!), plus, you wouldn't need to name your vendor object to uniquely identify it for commands -- the one being administered is the one you're sitting on. ;)
Kirei Kitty
Registered User
Join date: 25 Jan 2005
Posts: 2
02-23-2005 15:51
From: Annah Zamboni
Im getting a syntax error on line 137 of the reg script:
if(llList2String(command,0)==vendorname)

any ideas?



You need to add a semicolon on the end of the line before the one you mentioned.
This makes that section of code....


list command=llParseString2List(msg,[":"],[]); // input parsed into a list by ":"

if(llList2String(command,0)==vendorname)
// ALL COMMANDS MUST START WITH THE VENDORNAME


Hope it helps
Kirei Kitty
FireDancer Steptoe
Registered User
Join date: 14 Dec 2004
Posts: 11
Fabulous!
02-27-2005 22:13
This vendor works wonderfully!! Thank you very much!!!


FireDancer :)
Hiro Pendragon
bye bye f0rums!
Join date: 22 Jan 2004
Posts: 5,905
03-02-2005 22:01
From: Kirei Kitty
You need to add a semicolon on the end of the line before the one you mentioned.
This makes that section of code....


list command=llParseString2List(msg,[":"],[]); // input parsed into a list by ":"

if(llList2String(command,0)==vendorname)
// ALL COMMANDS MUST START WITH THE VENDORNAME


Hope it helps
Kirei Kitty

Thanks, my bad. I updated the original post.

gene,

Great idea! You should consider submitting that mod to my vendor mod contest - details in Special Events.

ALSO!

I'm announcing that I'll be adding an API to my vendor kit that will let you drop it in and instantly be able to use a particular online Second Life shop... details to come soon!
_____________________
Hiro Pendragon
------------------
http://www.involve3d.com - Involve - Metaverse / Emerging Media Studio

Visit my SL blog: http://secondtense.blogspot.com
Hiro Pendragon
bye bye f0rums!
Join date: 22 Jan 2004
Posts: 5,905
04-11-2005 15:08
I just found out that the formatting was coming out weird... even though on edit the stuff looks right... it's a problem with the forum and I think handling parenthesis or something

whatever. I went back and fixed what should be fixed. /sigh... I really just need to update this in world.
_____________________
Hiro Pendragon
------------------
http://www.involve3d.com - Involve - Metaverse / Emerging Media Studio

Visit my SL blog: http://secondtense.blogspot.com
Kelley Arai
Registered User
Join date: 26 Aug 2007
Posts: 6
08-31-2007 15:04
I get a syntax error right infront of this:

/////// Holographic rez procedure ////////////////
doRezNow()
{
llSay(126944,("change:"+(string)randme));
llRezObject((llList2String(currentitemlist,(select ed - 1))+"HOLO";),
(llGetPos()+<0,0,1>;),<0,0,0>,llGetRot(),randme);
// sends "randme" as the parameter on rez as the PIN for the hologram

// DEV NOTES: Someone could probably change this so that randme becomes
// the channel that replaces "126944" - would actually take down lag in the sim
// where there are multiple hologram vendors in range of one another - Hiro

updatetext();
}
///////////////////////////////////////////////////////
Max Pitre
Registered User
Join date: 19 Jul 2006
Posts: 370
08-31-2007 16:49
From: Kelley Arai
I get a syntax error right infront of this:


You do realize this thread was last replied to over two years ago?
Kelley Arai
Registered User
Join date: 26 Aug 2007
Posts: 6
08-31-2007 17:10
You do realize i dont care?
Jillian Callahan
Rotary-winged Neko Girl
Join date: 24 Jun 2004
Posts: 3,766
08-31-2007 17:27
Take out the vB codes. is probably what's getting you the error.
Blackbird Clawtooth
Registered User
Join date: 4 Nov 2007
Posts: 1
11-19-2007 22:40
I know this thread is old, but its been the only script I've been able to find that does a simple job of creating a billboard vendor. I've got it all working, swapping the images and everything. The only problem left is that when I go to pay (myself), it list fastpay amounts and the user has to manually punch in a $ amount. How do I get it to make a pay button with the exact cost of each item?
Void Singer
Int vSelf = Sing(void);
Join date: 24 Sep 2005
Posts: 6,973
11-19-2007 23:34
From: Blackbird Clawtooth
I know this thread is old, but its been the only script I've been able to find that does a simple job of creating a billboard vendor. I've got it all working, swapping the images and everything. The only problem left is that when I go to pay (myself), it list fastpay amounts and the user has to manually punch in a $ amount. How do I get it to make a pay button with the exact cost of each item?

llSetPayPrice( PAY_HIDE, [ItemCost, PAY_HIDE, PAY_HIDE, PAY_HIDE] );
_____________________
|
| . "Cat-Like Typing Detected"
| . This post may contain errors in logic, spelling, and
| . grammar known to the SL populace to cause confusion
|
| - Please Use PHP tags when posting scripts/code, Thanks.
| - Can't See PHP or URL Tags Correctly? Check Out This Link...
| -
Nichiren Dinzeo
Registered User
Join date: 14 Feb 2007
Posts: 203
07-17-2008 06:43
Would love to use this but having problems.

I followed instructions and everything appears to have worked but when I touch the vendor it does nothing and there is no BUY option when I right click. Any ideas? thx
Ordinal Malaprop
really very ordinary
Join date: 9 Sep 2005
Posts: 4,607
07-17-2008 12:29
I would suggest reading the _dates_ on these posts.
_____________________
http://ordinalmalaprop.com/forum/ - visit Ordinal's Scripting Colloquium for scripting discussion with actual working BBCode!

http://ordinalmalaprop.com/engine/ - An Engine Fit For My Proceeding, my Aethernet Journal

http://www.flickr.com/groups/slgriefbuild/ - Second Life Griefbuild Digest, pictures of horrible ad griefing and land spam, and the naming of names
Nichiren Dinzeo
Registered User
Join date: 14 Feb 2007
Posts: 203
07-17-2008 13:48
From: Ordinal Malaprop
I would suggest reading the _dates_ on these posts.


? I know the dates are old..but does that mean the script does not work ?
Ordinal Malaprop
really very ordinary
Join date: 9 Sep 2005
Posts: 4,607
07-17-2008 14:06
.
_____________________
http://ordinalmalaprop.com/forum/ - visit Ordinal's Scripting Colloquium for scripting discussion with actual working BBCode!

http://ordinalmalaprop.com/engine/ - An Engine Fit For My Proceeding, my Aethernet Journal

http://www.flickr.com/groups/slgriefbuild/ - Second Life Griefbuild Digest, pictures of horrible ad griefing and land spam, and the naming of names
Viktoria Dovgal
Join date: 29 Jul 2007
Posts: 3,593
07-17-2008 14:26
From: Nichiren Dinzeo
Would love to use this but having problems.

I followed instructions and everything appears to have worked but when I touch the vendor it does nothing and there is no BUY option when I right click. Any ideas? thx

It will be a Pay option instead, that's how scripted vendors work.

You can get built examples of the vendor for free in world at Hiro Pendragon's shop.
_____________________
1 2