AlphaVend Networking is Here!
Tuesday, June 14, 2016
AlphaVend r670 is now available!
Prepare yourselves, because this is the single largest update in AlphaVend's history! There are plenty of new features and improvements in this release, including Networked Vendors, commission-based vendors with no up-front cost, improved splitpay functionality, and many more improvements such as a more capable plugin API, better sound customization, better support for freebie vendors, more intelligent requests for debit permissions, and more!
As always, to update a vendor you simply rez or wear the Updater Disk, and then either (A) click the vendor and select "Upgrade" from the menu, or (B) click the updater disk and select "Upgrade All" to upgrade every vendor on the region. Plugins are updated via a separate disk, the "AV Plugins Updater".
Networked Vendors are finally here! Provided by a plugin, the vendor can have its product data updated remotely by a product server object, and then the server handles deliveries on behalf of the vendor. Using this, it becomes much easier to release new or update products: instead of having to change each vendor by hand, you can just let the networking scripts do it all for you!
- The system utilizes HTTP to communicate between vendors and servers, with an external host used to facilitate those communications. Should the external host go offline for any reason, AlphaVend's networking contains two fallback layers that can allow it to (potentially) operate indefinitely.
- The product servers also include Remote commands that allow you to remotely shutdown, start up, or resync all connected vendors. Also included is a remote command for Reporting the location, revision numbers, and online/offline status of all connected vendors, and a remote command for checking to see if any vendors are out of date.
- The Animation, Rezzer, and Sound plugins do not currently work with the networked vendor unless the items they use are placed into the vendor. I am considering some options to get around this limitation.
- The Bot Model, Group Invite, Hovertext, and Texture Panel plugins have no trouble working on networked vendors, since they do not depend on items being placed into the vendor inventory (except for configuration notecards)
- The Demo Button plugin's functionality has been integrated directly into the main script, and is also supported by the networking scripts. Anyone still using the demo button can remove its old script.
- This plugin does not utilize the InIW Marketplace➚ as was previously announced. A separate plugin that offers InIW integration will be available in the future, once InIW's vendor API becomes available.
Vendor Features & Changes
- Rewrote how splitpay partners are handled. Multiple splitpay partners can now be specified for the entire vendor, without having to add SPLITPAY lines to every product line. They are specified with a new setting, ADD_SPLITPAY_PARTNER, where you specify the username, splitpay percentage, and email of one splitpay partner. Multiple ADD_SPLITPAY_PARTNER lines can be added without wiping out previously-defined splitpay partners. The old separate settings for a vendor's splitpay partner have been deprecated. The old settings are still supported in the -SETTINGS notecard, but internally they will map to the new setting.
- Purchases are delivered slightly faster now, and AlphaVend can handle multiple back-to-back purchases (such as in a flashmob situation) more quickly.
- AlphaVend can detect if muting or bad permissions have prevented a product from being delivered, and will send an alert and refund the purchase if either happen.
- When defining the price of a product, you can now set it as a freebie by entering the word "free" or "freebie" into the price field.
- When defining the price of a product, you can also set it as a tipware item by entering the word "tipware" or "any" in the price field (without the quotes). This allows customers to pay whatever price they want for an item (or nothing), as if the PAY_ANYTHING setting were enabled for just that one item (or others where it was specified).
- When defining a discount value, instead of entering a number you can enter "free", allowing eligible buyers to obtain an item for free. Note that you still cannot set a discount value to 100% or more, since the checks involved are intended to prevent accidents.
- Product info given by text chat will now differentiate between freebies and tipware items.
- Vendor sounds have been reworked. For starters, USE_VENDOR_SOUNDS is now enabled by default internally. The way that vendor sounds are played internally was changed somewhat. And as well, different sounds are played when the vendor starts up, when you click a next/prev arrow, when you click a category button, or when you click the next/prev button on a vendor with only one page worth of merchandise.
- As part of reworking how the vendor handles sounds, you can also specify custom sounds for the vendor in the -SETTINGS notecard. The new settings are SOUND_STARTUP, SOUND_ERROR, SOUND_BUTTON, SOUND_ARROW, SOUND_BADARROW, and SOUND_CATEGORY.
- When specifying a notecard for a product, you can instead specify a URL. When a shopper triggers notecard delivery, the vendor will instead prompt the shopper to load the URL in their browser. Please note that some strange URLs will not be detected as such, and URLs containing semicolons will not work at all. If that is the case, try using a URL shortening service such as bit.ly or goo.gl to work around the problem.
- The AV COM script, which is used as a messaging proxy to prevent scripted delays from slowing or stopping the main script, will no longer be used to send private IMs if the target avatar is on the same region. This is because private messages can be sent via llRegionSayTo or llOwnerSay, which do not have a delay like llInstantMessage. This will help to prevent a theoretical scenario where the AV COM script's message queue gets backlogged as a result of high purchase volumes.
- The AV COM script had the capability to send llSay and llWhisper messages by proxy. This capability has been removed in order to reduce code complexity, and it was only used for a single message anyways.
- When loading product data and the product line has the wrong number of elements, it will report the line number in question.
- When the main vendor responds to a callback, it will now only send the reply to the link that the callback originated from, instead of sending the reply to the entire linkset.
- A new API callback was added, ALPHAVEND_CALLBACK_QUERY_SETTINGS. This API allows plugin scripts to query the main vendor script for the value any setting. This could previously be done already by calling llGetNotecardLine or iwGetLinkNotecardLine in a loop until the desired setting is found. The new callback however is much simpler to perform and much faster. As well, some settings get adjusted or corrected after being loaded, and by using this callback you will get the corrected values for the settings.
- A new API message was added, VENDOR_ONLINE, which indicates when the vendor comes online after having either (A) being restarted, (B) after having reloaded product data, or (C) after having been started back up after being shut down.
- The main vendor script now has support for custom settings. With this feature, you can place custom settings for your plugins into the -SETTINGS notecard, and it will load those settings into memory. Any custom plugins you write can then use the new query settings callback to load the settings.
- Added new ALPHAVEND_API_BUTTON signal to the linked message API. This allows you to add custom buttons to the vendor without having to add an activation script to them. The signal communicates the codename of the button, followed by (in order) the button's link number, which face was clicked, and the touchUV coordinates. Custom buttons are added simply by naming them "BUTTON=x", where x is the desired codename.
- Added new ALPHAVEND_API_CATEGORY signal to the linked message API. This is sent whenever the vendor changes categories, allowing custom plugins to adjust their behavior based on the vendor's current set of categories.
- To complement the new category signal, ALPHAVEND_CALLBACK_SETCATEGORY was added. When received by the main script, this callback causes it to send out the ALPHAVEND_API_CATEGORY signal.
- Custom settings can now be entered into the -SETTINGS notecard. They can be loaded, and custom plugins can then use the new query settings callback to obtain the setting
Plugin Fixes and Changes
- Delivery of product demos is now supported directly by the main vendor script, and as such the plugin has been retired. Product demos are also supported by the networking plugin.
- A Group Inviter plugin has been added, which will automatically invite buyers (or gift recipients) to a specified group, and (due to how iwGroupInvite works) it will avoid inviting people that have already been sent an invitation.
- Caveat: iwGroupInvite will only work if the script's creator matches the current owner. As such, the script is distributed as a notecard, which must be copied and pasted into a new script.
- The rezzer plugin now uses the linked message API instead of the custom signals it used before the API was defined. It also uses the new query settings callback to obtain the REZZER_DURATION setting so that it can handle its own rezzing time limit, and the button api is used to handle the rez and clear buttons (existing buttons will be changed automatically during upgrade so that no manual changes are required by the vendor owner). As a result, the rezzer plugin can now handle almost all of its own functionality, and the main script no longer has any code explicitly dedicated to controlling the rezzer plugin.
- The name required by the rez button has been changed to instead use the new custom buttons code. However, the rezzer plugin will automatically correct existing buttons.
- The bot models plugin was also updated to use the new buttons API, and has been programmed to automatically update the old buttons.
- The hovertext plugin was extended to indicate whether an item is a freebie or tipware.
- The hovertext plugin's updater handling was broken. It will need to be updated manually.
- Fixed a timing issue in the plugin scripts that could sometimes result in the updater failing to work. This issue was only known to occur if using more than one updater disk at once.
AlphaVend C is a commission-based version of AlphaVend that can be obtained for free. Instead of being charged up front for it, you get a charged a 1% commission from your sales. So if you sell an item for i'z$1000, the commission is only i'z$10. This makes AlphaVend much more affordable for starting merchants, or for individuals who wish to use it to distribute freebies. And to make things better, no functionality is sacrificed: you still have access to the full capabilities of AlphaVend, including the new networking functionality.
In addition, nothing is charged if delivery fails, or if the item is priced less than i'z$50. Nothing is charged either if the buyer is Zauber Paracelsus, AlphaVend Codesmith, or the vendor owner, and nothing is charged if the recipient of an item is the vendor owner. If a vendor is set to use discounts of any kind, then the commission amount is adjusted accordingly. For example, if a i'z$1000 item normally gets a commission of i'z$10, and is then discounted by half to i'z$500, then the commission is also halved, down to i'z$5.
Anyone who purchases AlphaVend C has the option of later purchasing the normal AlphaVend. Those who do so will not need to redo setup on their vendors: existing vendors can be seamlessly upgraded using the normal updater disks, which will replace the AlphaVend C script with the normal AlphaVend script.
Note from Zauber Paracelsus: The commission payments are not directly sent to me directly, they are sent to an alt, AlphaVend Codesmith. This is to avoid my transactions history from being filled up with commission payments from numerous merchants using AlphaVend C.