khan
GUI Shop based on Economics. Supports NPC

Supported Games

Beta Branch updated 11/14/2021 - PST 3:32PM

GUIShop Update 2.3.0

 * This beta update 2.3.0 / Major HotFix Update!
 * Fixed item leak when taking items from players ( credits baz )
 * Fixed Reloading issues where ram usage would keep being taken up from Image Library calls. ( credits baz )
 * No longer uses //requires ( due to issues with it )
 * Updated Currency Systems
 * Created Whole new Item Creation methods
 * Created Whole new Item Give methods
 * Updated/re-wrote Get and Take Methods to include new feature support/fix old feature support checks
 * Fixed issues with buying commands when inventory was full
 * Fixed issues with buying items when command strings were not null but empty
 * Fixed Custom Item names not being applied to items bought correctly
 * Fixed special character translation fails for Dutch & Catalan ( Thanks Rustoholics )
 * Updated German Language translation partially ( not finished ).
 * Updated permission name error response to catch other plugins that improperly code..
 * Preparations for the new HumanNPC plugin in development finished
 * Preparations for the Nomad Shop Plugin NPC done
 * Added Requested Hooks
 * Added Condition Level Support - Condition levels that default to 0 are not supported.
 * Added Allow Or Not Allow selling of used Items
 * All items that are broken are no longer counted for selling in guishop! 
 * All items are preset to max default condition values. - 
 ( changing these to 0 will result in items being bought as broken items )

 * Updated Updater Command please run it in-game and make sure you have the guishop.admin perm! 
 * /update
 * Updater command ( now only checks for any item condition set to 0 and 
 * will auto add the correct value for it if it supports conditions )
 * Added a /resetconditions command
 * ( for those that need to reset only item config conditions back to defaults. )
  • GUIShop will now recommend using the StackModifier plugin in conjunction with it.
  • So that stacking does not become a problem.

Notes

  • To Disable All Global shops (NPC only) (/shop command) Set the config option to a blank string!
  • "Set Default Global Shop to open": "",

Important All item commands! Require the open and close brackets [ "command1" ], At the beginning and end of the commands.

Important All Shop items must have a shortname either legit or made up so that Images are cached properly.

Example

"Command": "spawn minicopter \"$player.x $player.y $player.z\"", <Single Command Wrong>

"Command": [ "spawn minicopter \"$player.x $player.y $player.z\"" ],  <Single Command Correct>

"Command": [ "spawn minicopter \"$player.x $player.y $player.z\"3" ],  <Command & Amount>

"Command": [ "spawn minicopter \"$player.x $player.y $player.z\"",  "inventory.giveto $player.id supply.signal" ],  <Multi Commands>

**1.8.0 ** The config has changed!( Delete old data files, lang files, disable or delete config, and gen new config )

Please back up your configuration files.

  • Anything 1.7.0 or 1.6.0 and back Config Not Compatabile with 1.8

How To Video

How to Video

TODO

  • Add Vending Machine Support
  • Marker Support is in the works
  • Surprise Plugin Support Coming
  • Limit quantities purchasable per item (Feature Request)
  • Deeper NPC Integrations
  • More console commands for admins
  • BluePrint support
  • Buy/Sell permission support
  • More buy/sell shop option support
  • Better UI
  • DM me on discord if you want anything fixed/added/etc :) Khan#8615

2.0.10 Update

  • Fixed Specific issue with Resource stacks with buy all button
  • Fixed Background image being parented too late inside the code.
  • Added guishop.reset admin/rcon only command
  • Added Config Default Shop Color Options
  • Added Missing Config Text Options
  • Added Missing Config URL Options
  • Fixed Config Reset Issues with custom command items.
  • Fixed/updated almost all the UI Code to be more flexible for upcoming features.
  • Economics Currency Fix when too much money was set into a players balance.
  • Fixed Screen flicker of buttons/duplication of text issues
  • Tweaked Image Cache..
  • Updated Personal UI Permission to guishop.color (freed up VIP for feature update.)
  • Fixed Buy/Sell All button currency glitch
  • Added Config Option for SpawnDistance of vehicles.
  • New config option to adjust default NPC distance check for /shop E

Trello Progress Tree

Permissions

  • guishop.blockbypass -- ByPasses if a player is allowed to access shop in a building restricted area or is raid blocked.(Extra ByPass Restriction)
  • guishop.use -- Only players that have perm may use the shop (Default Group)
  • guishop.admin -- Only players with the perm may use the clear data command (Default Admin)
  • guishop.color -- Only players that have perm get access to use the Custom Color UI Features
  • guishop.vip -- Is no longer used at the moment being re-worked for feature update..
  • guishop.button -- Is required to use/see the hot bar guishop button.

Chat Commands

  • /cleardata -- Clears All Server Wide Player Saved Data For UI
  • /shop -- Opens the shop GUI
  • /update -- Runs the Config Updater Command to repair the Image URL links. (Requires Admin permission to use follow update notes! )

Console Commands

  • shop.buy
  • shop.sell
  • shop.show (Note, not sure if this was affected?)
  • guishop.reset ("F5" Console command: This will reset your GUIShop Config to defaults)

Usage

Please use JSONLint - The JSON Validator. to make sure your configuration is formatted correctly.

In ** Shop - Shop List** // This is where game items and commands are stored

All the items are now automatically generated for you! (all shops included) Rust Item List with short names.

    "Shop - Shop List": {
    "Khans Kit": {
      "DisplayName": "Khans Kit", 
      "Shortname": "",
      "EnableBuy": true, // This allows people to Buy the item in shop
      "EnableSell": false, // This stops people selling the item in shop
      "Image": "Link",
      "SellPrice": 1.0,
      "BuyPrice": 1.0,
      "BuyCooldown": 0,
      "SellCooldown": 0,
      "BuyQuantity": [
        1, 10, 25, 50
      ],
      "SellQuantity": [
        1, 10, 25, 50
      ],
      "KitName": "KitName", // Should work with kits
      "Command": null,
      "SkinId": 0
    },
    "Spawn Car": {
      "DisplayName": "Spawn Car",
      "Shortname": "",
      "EnableBuy": true,
      "EnableSell": false,
      "Image": "Link",
      "SellPrice": 1.0,
      "BuyPrice": 1.0,
      "BuyCooldown": 0,
      "SellCooldown": 0,
      "BuyQuantity": [
        1, 10, 25, 50
      ],
      "SellQuantity": [
        1, 10, 25, 50
      ],
      "KitName": null,
      "Command": [ "spawn sedan \"$player.x $player.y $player.z\"" ],  // All Commands must use back slashes \ not /.
      "SkinId": 0
    },
    "Calls 1 Heli": {
      "DisplayName": "Calls 1 Heli",
      "Shortname": "",
      "EnableBuy": true,
      "EnableSell": false,
      "Image": "Link",
      "SellPrice": 1.0,
      "BuyPrice": 1.0,
      "BuyCooldown": 0,
      "SellCooldown": 0,
      "BuyQuantity": [
        1, 10, 25, 50
      ],
      "SellQuantity": [
        1, 10, 25, 50
      ],
      "KitName": null,
      "Command": [ "callheli pos \"$player.x $player.y $player.z\ 1"" ],  // Calls heli with Heli Control Plugin by Shady 
      "SkinId": 0
    }

NEW: Commands Example Commands

  "Shop - Shop List":
    "Wolf Hat": {  // Custom names examples
      "DisplayName": "Wolf Hat", // Custom names examples
      "Shortname": "hat.wolf",
      "EnableBuy": true,
      "EnableSell": true,
      "Image": "Link",
      "SellPrice": 1.0,
      "BuyPrice": 1.0,
      "BuyCooldown": 0,
      "SellCooldown": 0,
      "BuyQuantity": [
        1, 10, 25, 50
      ],
      "SellQuantity": [
        1, 10, 25, 50
      ],
      "KitName": null,
      "Command": null,
      "SkinId": 0
    }

    "Spawn Horse Test": {
      "DisplayName": "Spawn Horse Test",
      "Shortname": "",
      "EnableBuy": true,
      "EnableSell": true,
      "Image": "Link",
      "SellPrice": 1.0,
      "BuyPrice": 1.0,
      "BuyCooldown": 0,
      "SellCooldown": 0,
      "BuyQuantity": [
        1, 10, 25, 50
      ],
      "SellQuantity": [
        1, 10, 25, 50
      ],
      "KitName": null,
      "Command": [ "entity.spawn horse $player.id" ],
      "SkinId": 0
    }

You can't sell a command, well, you can technically but it doesn't do anything.Like zone commands you can put $player.id, $player.name, $player.x, $player.y, $player.zYou can make warps with this by placing for example:"cmd": ["teleport.topos $player.id 45 20 1022"],(45 20 1022 being a specific location for your warp)

Shop - Shop List // This is specific to shop Tabs that display in-game.

You can add or remove any items you want inside the Shop Categories.You can have multiple Shop Categories with the same items, vice versa.You can choose in any Shop Categorie what you want people to be able to "buy" or "sell".
You can set custom cooldowns for buying any item or command.You can set any amount you want for each item (Using Economics, ServerRewards or Custom)Currency per shop options [ "Currency": "economics", ] [ "Currency": "serverrewards", ] [ "Currency": "custom", ]Permission per shop if a shop doesn't have a permission set it will be globally available.If a shop has a permission set that shop will no longer show for players that do not have that permission.

  "Shop - Shop Categories": { // Shop - Shop Categories
        "misc": {
      "DisplayName": "misc",
      "Description": "You currently have {0} coins to spend in the misc shop",
      "Permission": "guishop.misc",  <Sets a permission to the shop make sure you do guishop.name>
      "Currency": "",   <options are "custom" "economics" "serverrewards" >
      "CustomCurrencyNames": "",
      "CustomCurrencyIDs": -0,
      "CustomCurrencySkinIDs": 0,
      "EnabledCategory": true,
      "EnableNPC": false,
      "NPCId": null,
      "Items": [
      "Fogger-3000", // Example A. Remove This if you only want them to sell the item.
      "Whatever you wanna name it", // Example  Custom Names
      "NameKit" // Whatever you named it above
      ]
    },

At the very top of each shop list, you will see;
      "npc": false,
      "npcID": null
    },
If you have HumanNPC set the shop list you want to true   ID
      "npc": true,
      "npcID": 400753551
    },

in NPC USERID:you must use /npc_list to get the List of the NPC IDs and place the id of the NPC that you want to be in this market config reload the plugin.You may use null as ID if you wish to remove the NPC from it.

Default Configuration

{
  "Carefully Edit This": {
    "WipeTime": "2021-10-07 21:53:11Z",
    "LastWipe": "2021-10-05 15:18:10Z",
    "Sets time before shops can be used after the server wipes": 300.0
  },
  "Enable Discord Buy Transaction Logging": false,
  "Enable Discord Sell Transaction Logging": false,
  "Discord Webhook URL": "",
  "Discord Embed Color": "#483D8B",
  "Discord Author Image": "https://assets.umod.org/images/icons/plugin/5f80fe12851f5.png",
  "Discord Embed Icon": "GUIShop",
  "Set Default Global Shop to open": "Commands",
  "Sets shop command": "shop",
  "Sets Vehicle Spawn Distance": 15.0,
  "Switches to Economics as default curency": true,
  "Switches to ServerRewards as default curency": false,
  "Switches to Custom as default curency": false,
  "Custom Currency Item ID": -932201673,
  "Custom Currency Skin ID": 0,
  "Custom Currency Name": "",
  "Enable Shop Buy All Button": true,
  "Enable Shop Sell All Button": true,
  "Sets the buy/Sell button amounts   how many buttons": [
    1,
    10,
    100,
    1000
  ],
  "Player UI display": false,
  "Block Monuments": false,
  "If true = Images, If False = Text Labels": false,
  "NPC Distance Check": 1.5,
  "Enable NPC Auto Open": false,
  "Enable GUIShop NPC Msg's": false,
  "GUI Shop - Welcome MSG": "WELCOME TO GUISHOP ◝(⁰▿⁰)◜",
  "Shop - Buy Price Label": "Buy Price",
  "Shop - Amount1 Label1": "Amount",
  "Shop - Sell $ Label": "Sell $",
  "Shop - Amount2 Label2": "Amount",
  "Shop - Back Button Text": "<<",
  "Shop - Forward Button Text": ">>",
  "Shop - Close Label": "CLOSE",
  "Shop - GUIShop Welcome Url": "https://i.imgur.com/RcLdEly.png",
  "Shop - GUIShop Background Image Url": "https://i.imgur.com/Jej3cwR.png",
  "Shop - Sets any shop items to this image if image link does not exist.": "https://imgur.com/BPM9UR4.png",
  "Shop - Shop Buy Icon Url": "https://imgur.com/oeVUwCy.png",
  "Shop - Shop Amount Left Url": "https://imgur.com/EKtvylU.png",
  "Shop - Shop Amount Right Url": "https://imgur.com/EKtvylU.png",
  "Shop - Shop Sell Icon Url": "https://imgur.com/jV3hEHy.png",
  "Shop - Shop Back Arrow Url": "https://imgur.com/zNKprM1.png",
  "Shop - Shop Forward Arrow Url": "https://imgur.com/qx9syT5.png",
  "Shop - Close Image Url": "https://imgur.com/IK5yVrW.png",
  "Shop GUI Button": {
    "Image": "https://i.imgur.com/hc0qPet.png",
    "Background color (RGBA format)": "1 0.96 0.88 0.15",
    "GUI Button Position": {
      "Anchors Min": "0.5 0.0",
      "Anchors Max": "0.5 0.0",
      "Offsets Min": "-265 18",
      "Offsets Max": "-205 78"
    }
  },
  "GUIShop Configurable UI colors (First 8 Colors!)": [
    "#A569BD",
    "#2ECC71",
    "#E67E22",
    "#3498DB",
    "#E74C3C",
    "#F1C40F",
    "#F4F6F7",
    "#00FFFF"
  ],
  "Set Default Shop Buy Color": "#FFFFFF",
  "Set Default Shop Sell Color": "#FFFFFF",
  "Set Default Shop Text Color": "#FFFFFF",
  "Was Saved Don't Touch!": true,
  "Shop - Shop Categories": {
    "Commands": {
      "DisplayName": "Commands",
      "Description": "You currently have {0} coins to spend in the commands shop",
      "Permission": "",
      "Currency": "",
      "CustomCurrencyNames": "",
      "CustomCurrencyIDs": 0,
      "CustomCurrencySkinIDs": 0,
      "EnabledCategory": true,
      "EnableNPC": false,
      "NPCId": null,
      "Items": [
        "Minicopter",
        "Sedan",
        "Airdrop Call"
      ]
    },
    "Attire": {
      "DisplayName": "Attire",
      "Description": "You currently have {0} coins to spend in the Attire shop",
      "Permission": "",
      "Currency": "",
      "CustomCurrencyNames": "",
      "CustomCurrencyIDs": 0,
      "CustomCurrencySkinIDs": 0,
      "EnabledCategory": true,
      "EnableNPC": false,
      "NPCId": null,
      "Items": [
        "Wolf Headdress",
        "Basic Horse Shoes"
      ]
    },
    "Misc": {
      "DisplayName": "Misc",
      "Description": "You currently have {0} coins to spend in the Misc shop",
      "Permission": "",
      "Currency": "",
      "CustomCurrencyNames": "",
      "CustomCurrencyIDs": 0,
      "CustomCurrencySkinIDs": 0,
      "EnabledCategory": true,
      "EnableNPC": false,
      "NPCId": null,
      "Items": [
        "Fogger-3000",
        "Sickle"
      ]
    },
    "Items": {
      "DisplayName": "Items",
      "Description": "You currently have {0} coins to spend in the Items shop",
      "Permission": "",
      "Currency": "",
      "CustomCurrencyNames": "",
      "CustomCurrencyIDs": 0,
      "CustomCurrencySkinIDs": 0,
      "EnabledCategory": true,
      "EnableNPC": false,
      "NPCId": null,
      "Items": [
        "Kayak",
        "Barbeque",
        "Paper Map"
      ]
    },
    "Ammunition": {
      "DisplayName": "Ammunition",
      "Description": "You currently have {0} coins to spend in the Ammunition shop",
      "Permission": "",
      "Currency": "",
      "CustomCurrencyNames": "",
      "CustomCurrencyIDs": 0,
      "CustomCurrencySkinIDs": 0,
      "EnabledCategory": true,
      "EnableNPC": false,
      "NPCId": null,
      "Items": [
        "40mm Shotgun Round",
        "SAM Ammo"
      ]
    },
    "Construction": {
      "DisplayName": "Construction",
      "Description": "You currently have {0} coins to spend in the Construction shop",
      "Permission": "",
      "Currency": "",
      "CustomCurrencyNames": "",
      "CustomCurrencyIDs": 0,
      "CustomCurrencySkinIDs": 0,
      "EnabledCategory": true,
      "EnableNPC": false,
      "NPCId": null,
      "Items": [
        "Sheet Metal Double Door",
        "Door Closer",
        "Building Plan"
      ]
    },
    "Component": {
      "DisplayName": "Component",
      "Description": "You currently have {0} coins to spend in the Component shop",
      "Permission": "",
      "Currency": "",
      "CustomCurrencyNames": "",
      "CustomCurrencyIDs": 0,
      "CustomCurrencySkinIDs": 0,
      "EnabledCategory": true,
      "EnableNPC": false,
      "NPCId": null,
      "Items": [
        "Bleach",
        "Generic vehicle module"
      ]
    },
    "Traps": {
      "DisplayName": "Traps",
      "Description": "You currently have {0} coins to spend in the Traps shop",
      "Permission": "",
      "Currency": "",
      "CustomCurrencyNames": "",
      "CustomCurrencyIDs": 0,
      "CustomCurrencySkinIDs": 0,
      "EnabledCategory": true,
      "EnableNPC": false,
      "NPCId": null,
      "Items": [
        "Snap Trap",
        "Wooden Floor Spikes",
        "Land Mine",
        "Shotgun Trap",
        "Flame Turret",
        "SAM Site"
      ]
    },
    "Electrical": {
      "DisplayName": "Electrical",
      "Description": "You currently have {0} coins to spend in the Electrical shop",
      "Permission": "",
      "Currency": "",
      "CustomCurrencyNames": "",
      "CustomCurrencyIDs": 0,
      "CustomCurrencySkinIDs": 0,
      "EnabledCategory": true,
      "EnableNPC": false,
      "NPCId": null,
      "Items": [
        "Ceiling Light",
        "RF Pager",
        "Wire Tool"
      ]
    },
    "Fun": {
      "DisplayName": "Fun",
      "Description": "You currently have {0} coins to spend in the Fun shop",
      "Permission": "",
      "Currency": "",
      "CustomCurrencyNames": "",
      "CustomCurrencyIDs": 0,
      "CustomCurrencySkinIDs": 0,
      "EnabledCategory": true,
      "EnableNPC": false,
      "NPCId": null,
      "Items": [
        "Blue Boomer",
        "Telephone"
      ]
    },
    "Food": {
      "DisplayName": "Food",
      "Description": "You currently have {0} coins to spend in the Food shop",
      "Permission": "",
      "Currency": "",
      "CustomCurrencyNames": "",
      "CustomCurrencyIDs": 0,
      "CustomCurrencySkinIDs": 0,
      "EnabledCategory": true,
      "EnableNPC": false,
      "NPCId": null,
      "Items": [
        "Apple",
        "Pure Wood Tea"
      ]
    },
    "Resources": {
      "DisplayName": "Resources",
      "Description": "You currently have {0} coins to spend in the Resources shop",
      "Permission": "",
      "Currency": "",
      "CustomCurrencyNames": "",
      "CustomCurrencyIDs": 0,
      "CustomCurrencySkinIDs": 0,
      "EnabledCategory": true,
      "EnableNPC": false,
      "NPCId": null,
      "Items": [
        "Human Skull",
        "Wood"
      ]
    },
    "Tool": {
      "DisplayName": "Tool",
      "Description": "You currently have {0} coins to spend in the Tool shop",
      "Permission": "",
      "Currency": "",
      "CustomCurrencyNames": "",
      "CustomCurrencyIDs": 0,
      "CustomCurrencySkinIDs": 0,
      "EnabledCategory": true,
      "EnableNPC": false,
      "NPCId": null,
      "Items": [
        "Instant Camera",
        "Water Bucket"
      ]
    },
    "Weapon": {
      "DisplayName": "Weapon",
      "Description": "You currently have {0} coins to spend in the Weapon shop",
      "Permission": "",
      "Currency": "",
      "CustomCurrencyNames": "",
      "CustomCurrencyIDs": 0,
      "CustomCurrencySkinIDs": 0,
      "EnabledCategory": true,
      "EnableNPC": false,
      "NPCId": null,
      "Items": [
        "Water Gun",
        "Wooden Spear"
      ]
    },
    "Medical": {
      "DisplayName": "Medical",
      "Description": "You currently have {0} coins to spend in the Medical shop",
      "Permission": "",
      "Currency": "",
      "CustomCurrencyNames": "",
      "CustomCurrencyIDs": 0,
      "CustomCurrencySkinIDs": 0,
      "EnabledCategory": true,
      "EnableNPC": false,
      "NPCId": null,
      "Items": [
        "Blood",
        "Anti-Radiation Pills",
        "Large Medkit",
        "Medical Syringe",
        "Bandage"
      ]
    }
  },
  "Shop - Shop List": {
    "Minicopter": {
      "DisplayName": "Minicopter",
      "Shortname": "",
      "EnableBuy": true,
      "EnableSell": true,
      "Image": "https://i.imgur.com/vI6LwCZ.png",
      "SellPrice": 1.0,
      "BuyPrice": 1.0,
      "BuyCooldown": 0,
      "SellCooldown": 0,
      "BuyQuantity": [
        1,
        10,
        25,
        50
      ],
      "SellQuantity": [
        1,
        10,
        25,
        50
      ],
      "KitName": null,
      "Command": [ "spawn minicopter \"$player.x $player.y $player.z\"" ],
      "SkinId": 0
    },
    "Sedan": {
      "DisplayName": "Sedan",
      "Shortname": "",
      "EnableBuy": true,
      "EnableSell": true,
      "Image": "",
      "SellPrice": 1.0,
      "BuyPrice": 1.0,
      "BuyCooldown": 0,
      "SellCooldown": 0,
      "BuyQuantity": [
        1,
        10,
        25,
        50
      ],
      "SellQuantity": [
        1,
        10,
        25,
        50
      ],
      "KitName": null,
      "Command": [ "spawn sedan \"$player.x $player.y $player.z\"" ],
      "SkinId": 0
    },
    "Airdrop Call": {
      "DisplayName": "Airdrop Call",
      "Shortname": "",
      "EnableBuy": true,
      "EnableSell": true,
      "Image": "",
      "SellPrice": 1.0,
      "BuyPrice": 1.0,
      "BuyCooldown": 0,
      "SellCooldown": 0,
      "BuyQuantity": [
        1,
        10,
        25,
        50
      ],
      "SellQuantity": [
        1,
        10,
        25,
        50
      ],
      "KitName": null,
      "Command": [ "inventory.giveto $player.id supply.signal" ],
      "SkinId": 0
    },
    "Wolf Headdress": {
      "DisplayName": "Wolf Headdress",
      "Shortname": "hat.wolf",
      "MakeBlueprint": false,  <sets the item as a blueprint>
      "EnableBuy": true,
      "EnableSell": true,
      "Image": "https://rustlabs.com/img/items180/hat.wolf.png",
      "SellPrice": 1.0,
      "BuyPrice": 1.0,
      "BuyCooldown": 0,
      "SellCooldown": 0,
      "BuyQuantity": [
        1,
        10,
        25,
        50
      ],
      "SellQuantity": [
        1,
        10,
        25,
        50
      ],
      "KitName": null,
      "Command": null,
      "SkinId": 0
    }
  }
}

Localization

English, French, Swedish, Dutch , Korean, Catalan, Simplified Chinese, Portuguese Brazil, GermanFollow status for more details Trello Progress Tree

For Developers

GUIShop.CallHook("GetCurrency", player, "ShopName");

GUIShop.CallHook("OpenShop", player, "ShopName", "123456");

GUIShop.CallHook("CloseShop", player);

Credits

  • Code for the latest addition to Auto Config Updater was derived from WhiteThunder
  • Credits to Default! For maintaining this for so long up to 1.5.9
  • All credits go to Reneb and Nogrod for the original plugin and maintenance afterward

MIT License


Copyright (c) 2020 khan


Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:


The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.


THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.