Биржа Мемов

**Биржа Мемов** - многопользовательская текстовая игра с элементами имитации биржевой торговли. Участники игры торгуют акциями мемов, пытаясь заработать больше оппонентов.

Название игры позаимствовано у довольно известного видео-проекта.

## Правила игры

В игру могут играть одновременно 2 или более игроков. При увеличении числа игроков количество акций на бирже будет соответственно увеличено.

Основной задачей игроков является достижение отметки в ***1 миллион лайков*** (игровая валюта). Сделать это нужно с помощью манипуляций с акциями мемов, цены на которые постоянно изменяются из-за ряда факторов, используя начальный капитал - **120000 лайков**.

Все желающие поучаствовать в игре отправляют команду **!биржа** в личные сообщения боту. Тот, кто сделает это первым, получит статус Создателя игровой сессии. Создателю до начала игры доступны следующие команды:

* **!список**
	+ формирует список людей, желающих принять участие в текущей игре
* **!выгнать [номер]** или **!кик [номер]**
	+ позволяет запретить конкретному пользователю принимать участие в данной игре
	+ порядковый номер можно подсмотреть по команде **!список**
* **!стартуем**
	+ после этой команды набор игроков заканчивается и начинается стадия принятия правил игры

После начала игры Создатель никаких привилегий более не имеет, вышеперечисленные команды блокируются.

Сам игровой процесс разделен на "дни". В процессе игрового дня могут происходить различные события, влияющие на обстановку в игре. Длительность дня - это сумма длительностей всех его этапов. Подробнее об этапах - в следующем разделе.

## Игровой день

Каждый день следует определённому сценарию. Вот порядок:

1. Каждый день начинается с объявления от бота. Дополнительно в начале игрового дня происходит следующее:
	1. Всем игрокам с талантом "Бизнес-Мем" начисляются необходимые выплаты.
	2. Если номер игрового дня кратен 3, происходит выплата дивидендов.
	3. Если номер игрового дня кратен 5, все участники получают свободную единицу Таланта.
	4. Все акции, купленные в предыдущий игровой день, становятся оформленными.
	5. Проверяется условие окончания игры - наличие у любого из игроков миллиона на счету либо банкротство всех игроков.
	6. Обо всех вышеперечисленных событиях бот уведомляет в сообщении.
2. Далее объявляются ожидания аналитиков. От ожиданий будет зависеть наиболее вероятное изменение цен акций к концу дня. Ожидания влияют на любые изменения цен акций в течение и в конце дня. Аналитики могут выбрать одно из пяти состояний:
	* ⏫ ускоренный рост цен акций
		+ при таком ожидании цены акций будут крайне охотно расти
	* 🔼 вероятный рост цен акций
		+ рост цен будет не такой сильный, как при предыдущем случае
	* 🔁 нейтральное настроение
		+ цены будут изменяться в нормальных условиях
	* 🔽 вероятное падение цен акций
		+ скорее всего, цены упадут
	* ⏬ ускоренное падение цен акций
		+ есть вероятность, что цены очень сильно упадут
3. Если номер игрового кратен 15, на бирже появляется новый мем. Это сделано для того, чтобы игроки продолжали покупать акции в течение игры.
4. Далее объявляется открытие биржи и начало торгов.
5. В течение игрового дня на бирже будут происходить случайные события. Эти события могут затронуть как игрока, так и любой мем. Изменения, которые могут произойти:
	* получение/потеря денег любого из игроков;
	* получение/потеря денег сразу всех игроков;
	* рост/падение цены акций любого мема.
6. Расписание рабочего дня биржи представлено ниже. Графа **<сдельное время>** определяет время, которое предоставлено игрокам для написания команд боту (совершение операций, проверка состояния, и др.). Сдельное время составляет **25** секунд; каждая *игровая* команда, отправленная участником боту, продлевает сдельное время на несколько секунд. Расписание рабочего дня выглядит так:
	* Начало рабочего дня биржи (начало торгов)
	* *<сдельное время>*
	* Случайное событие №1
	* *<сдельное время>*
	* Случайное событие №2
	* *<сдельное время>*
	* Случайное событие №3
	* *<сдельное время>*
	* Конец рабочего дня биржи (конец торгов)
7. По окончанию рабочего дня биржи подводятся итоги дня - объявляются изменения цен акций.
8. Если после изменения один из мемов стал банкротом - он уходит с биржи, акции этого мема изымаются у участников, а на его место приходит другой мем с новыми акциями и сброшенной ценой.
9. Далее происходит проверка игроков на банкротство. Если на конец дня у кого-либо из участников на счету имеется задолженность (количество лайков меньше нуля), такие участники объявляются проигравшими: их акции возвращаются в свободную продажу, а игра продолжается без участия этих игроков.
10. На этом игровой день заканчивается - начинается новый день, данный список повторяется заново.

## Игровая информация

Игрок может проверить свой игровой баланс в течение рабочего дня с помощью команды:

```
**!баланс**

```

Команда покажет:

* количество лайков на счету;
* количество акций в наличии (оформленных и неоформленных).

## Мемы и акции

### Информация о ценах

Биржа предлагает игрокам список из мемов, которые участвуют в системе. Каждый мем представлен несколькими акциями. Проверить список мемов, количество акций и их цену можно с помощью команды:

```
**!инфо**

```

Цена продажи - это цена, за которую биржа продаст игроку одну акцию. Цена покупки - это цена, за которую биржа готова купить у игрока одну акцию. Цена покупки - это 85% от цены продажи.

### Покупка и продажа акций

Игрокам предстоит покупать и продавать акции для приумножения своего капитала.

Для покупки акций у биржи участник отправляет следующую команду:

```
**!купить [ID] [количество]**

```

ID мема можно узнать по команде **!инфо**. Количество может быть любым целым числом - главное, чтобы на бирже было достаточно акций, а у игрока - достаточно средств для покупки. Если количество не указано, оно приравнивается к 1. Сумма средств, потраченная в сделке, будет определяться как произведение количества покупаемых акций и цены продажи одной акции выбранного мема.

Для продажи акций обратно на биржу участник использует команду:

```
**!продать [ID] [количество]**

```

ID мема можно узнать по команде **!инфо**. Количество может быть любым целым числом - главное, чтобы у игрока было достаточно акций. Если количество не указано, оно приравнивается к 1. Заработок игрока после сделки определяется как произведение количества продаваемых акций и цены покупки одной акции выбранного мема.

### Неоформленные акции

При покупке акций (у биржи или у других игроков) они получают статус "неоформленных". Количество таких акций можно посмотреть по команде **!баланс** - в списке акций в наличии неоформленные акции отображаются с плюсом. Например, игрок запросил **!баланс** и увидел:

> *АКЦИИ: 1) Мемы с котами (4+3 шт.)*
>
>

Вышеуказанная фраза означает следующее: у игрока есть 7 шт. акций "Мемы с котами" - 4 шт. полноценных, оформленных акций, а также 3 шт. неоформленных акций, которые он приобрёл сегодня.

Неоформленные акции имеют одно ограничение: дивиденды за них не выплачиваются. Это сделано с целью защитить биржу от скупки акций непосредственно перед днём выплаты дивидендов.

Неоформленные акции превращаются в оформленные в начале следующего дня (после выплаты дивидендов).

При продаже акций бирже или другим игрокам сначала учитываются неоформленные акции.

### Нестабильные акции

Если цена продажи акций одного из мемов падает ниже **15000 лк**, акции данного мема признаются *нестабильными*. Это означает:

* все изменения цены акций мема будут более непредсказуемыми;
* дивиденды от этого мема поступать не будут.

Нестабильные акции - это крайне рисковый способ заработка. Из-за непредсказуемости цены игроки могут рискнуть и вложиться в упадочный мем в надежде на огромный скачок цены вверх. Рисковость заключается в том, что при падении цены до нуля акции будут изъяты у игроков без возмещения.

### Выплата дивидендов

В начале каждого третьего дня игроки получают дивиденды на оформленные акции в наличии. Количество дивидендов для каждого игрока по каждому мему рассчитывается по формуле:

```
ДИВИДЕНДЫ ОТ МЕМА = (количество акций)*(цена продажи мема)*0.25

```

Стоит напомнить, что неоформленные и нестабильные акции дивидендов не приносят.

При наличии таланта "Мемционер" сумма дивидендов будет увеличена: **+1.5%** за каждую вложенную единицу талантов.

## Сделки между игроками

В игре присутствует возможность заключать сделки между игроками. Алгоритм действий несложен.

Инициатор сделки (тот, кто продаёт свои акции), отправляет команду:

```
**!сделка [ID] [количество] [сумма сделки]**

```

* ID - идентификатор (порядковый номер на бирже) мема. Его можно уточнить по команде **!баланс** или **!инфо.**
* Количество - количество продаваемых акций конкретного мема.
* Сумма сделки - количество денег, которое инициатор планирует получить за продажу указанных акций. Сумма указывается не за одну акцию, а за все продаваемые акции сразу.

Для подтверждения сделки другой игрок должен отправить команду:

```
**!cделка+**

```

Если в игре участвует более двух игроков, сделка будет защищена **кодом подтверждения**. После успешного введения команды инициатор должен получить персональное сообщение от бота, которое содержит код подтверждения - шестизначный номер, который подтверждает сделку.

Инициатор должен передать код лично тому, с кем он желает заключить сделку. Важно не передавать код другим игрокам - они могут перехватить сделку, введя код быстрее других.

Покупатель, который получил код от инициатора, пишет в игровой чат команду:

```
**!сделка+ [код]**

```

Если код введён верно, сделка будет завершена: покупатель получит акции, а инициатор - денежную сумму.

**ВАЖНО:** перед завершением сделки покупатель обязан проверить, достаточно ли средств на его счету для завершения сделки. Бот не позволит купить акции при недостатке средств - но проблема в другом: все увидят код подтверждения сделки! Поэтому до конца храните код подтверждения в тайне.

Сделка должна быть завершена в тот же день, в который она была инициирована. Ночью все сделки аннулируются.

## Таланты

Таланты - это пассивные способности игроков, которые влияют на ход игры. В начале игры игроки имеют одну свободную единицу таланта; в течение игры игроки получают ещё одну единицу каждый пятый ход.

Для просмотра всех талантов и уровня своих талантов игрок может написать:

```
**!талант**

```

Для изучения или улучшения таланта необходимо ввести команду:

```
**!талант+ [ID]**

```

Таблица ID талантов:

 **3** | ***Сын рандома*** | *Игровые события дают больше и забирают меньше лайков* | За каждую единицу этого таланта игровые события будут давать на **11%** больше и забирать на **11%** меньше лайков для игрока

Примечания:

* Каждый талант можно улучшать неограниченное количество раз.
* Талант "Сын рандома" не может уменьшить сумму потери средств от случайных событий более, чем на 100%.

## Конец игры

При проверке условия об окончании игры (в начале каждого игрового дня) бот учитывает следующее:

* Обанкротились ли все игроки?
	+ Если да, то объявляется ничья. Победителей нет.
* Обанкротились ли все игроки, кроме одного?
	+ Если да, то объявляется победа игрока, который не обанкротился.
* Учитывая текущую стоимость акций и их количество в инвентарях, есть ли в игре кто-либо с общей ценностью более 1 млн лайков?
	+ Общая ценность - это сумма текущего баланса лайков и всех акций в наличии игрока.
	+ Общая ценность более 1 млн лайков - это основное условие победы.
	+ Все игроки с общей ценностью более 1 млн лайков объявляются победителями.