# 🧮 Price Types

In **ExcellentShop** you can use different price types for your items with different and unique features in each!

There are **4 price types** available to use. See below for details!

## 🪧 Flat

The most common and basic type. Price always stays at the same value.

{% hint style="info" %}
**Example**: You set **50** as buy price, and **20** as sell price. Product price will stay at these values. It still can be affected by shop's discounts.
{% endhint %}

## 🍃 Float

A bit complex one. Price is generated from **min -> max range** that you set in the price editor at specified times.&#x20;

You need to provide **days & times** when price generation should perform.

{% hint style="info" %}
**Example:** \
You want the price to be **100-500** for **buying** and **50-250** for **selling** on **daily** basis.

**Solution:**

1. Set buy price range: **100** (min) - **500** (max)
2. Set sell price range: **50** (min) - **250** (max)
3. Add **all 7** days and one time: **04:00** (24 hour format)

Now item price will change every day at 4 AM in specified range. If it happens that generated sell price is greater than buy one, it will be floored to the buy price to prevent money abuse.
{% endhint %}

{% hint style="warning" %}
If you don't set days & times for price generation, it won't refresh properly and will change from time to time on its own.
{% endhint %}

## 💹 Dynamic

Another complex one. Price changes by specified amount depends on item purchases/sales amount.

<mark style="color:green;">**↑**</mark> Price is <mark style="color:green;">**increased**</mark> by certain amount if the product has been **bought more times** than it has been sold.

<mark style="color:red;">**↓**</mark> Price is <mark style="color:red;">**decreased**</mark> by certain amount if the product has been **sold more times** than it has been bought.

There is **initial** **price** for both, buying and selling. This price will be used as **default** (start) one. Especially for new items with 0 sales and purchases.

There is also **min**. and **max**. **price** values for buying and/or selling. These values can be used to prevent price from going too high or too low.

Finally, there is "**price step**" setting for both, buying and selling. This value will be multiplied by **dominating amount** of item **sales** or **purchases** and added to the **initial price**.

**Formula:**

1. Get the price step value: `X = price_step`.
2. Get the difference of purchases and sales: `Y = purchases - sales`.
3. Calculate final price: `price = initial_price + (Y * X)`.

**And with numbers:**

1. Let's say initial price is **100** for both, buy and sell: `initial_price = 100`.
2. Let's say price step is **50**: `X = 50`.
3. Let's say product has been **purchased 100** times and **sold 90** times: \
   `Y = purchases - sales` = `Y = 100 - 90` = `Y = 10`.
4. Calculate final price: `price = 100 + (10 * 50)` = **600**.

If **purchases** <mark style="color:green;">**>**</mark> **sales**, their difference value (Y) will be positive = price <mark style="color:green;">**increased**</mark>.

If **purchases** <mark style="color:red;">**<**</mark> **sales**, their difference values (Y) will be negative = price <mark style="color:red;">**decreased**</mark>.

## 📶 Player Based

This one is similar to the Dynamic type above, but it works on amount of online players rather than purchases amount.

There is **initial** **price** for both, buying and selling. This price will be used as start value.

There is also **min**. and **max**. **price** values for buying and/or selling. These values can be used to prevent price from going too high or too low.

There is **adjust amount** setting for both, buying and selling. This value will be multiplied by **players amount** and added to the **initial price**.

Finally, there is **adjust step** setting. It defines for each how many players the price should be adjusted.

**Formula:**

1. Get the adjust amount value: `X = adjust_amount`.
2. Get the players amount value: `Y = players_amount / adjust_step`.
3. Calculate final price: `price = initial_price + (Y * X)`.

**And with numbers:**

1. Let's say **initial price** is **100** for both, buy and sell: `initial_price = 100`.
2. Let's say **adjust amount** is **50**: `X = 50`.
3. Let's say there is **15 players**, and **adjust step** is **2**: `Y = 15 / 2` = `Y = 7`.
4. Calculate final price: `price = 100 + (7 * 50)` = **450**.
