> For the complete documentation index, see [llms.txt](https://fruitspace.gitbook.io/gdps_docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://fruitspace.gitbook.io/gdps_docs/baza-dannykh-i-sozdanie-rolei.md).

# База данных и создание ролей

Вот и наша первая встреча с Базой Данных. На первый взгляд может показаться, что тут все очень сложно, но на деле все не так страшно!

### Чтобы попасть в базу данных, нужно:

1. Открыть настройки GDPS ![](https://975628626-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFna6inr4FgLAMXZixeD0%2Fuploads%2FOCiVUSMUpYgGbQX2d85y%2Fimage.png?alt=media\&token=5dc74cf0-7b00-4684-bec8-9fdc7e71d679)
2. Нажать на кнопку "Перейти в БД" - ![](https://975628626-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FFna6inr4FgLAMXZixeD0%2Fuploads%2FdqmXef6EFDNNvI2IiLO4%2Fimage.png?alt=media\&token=0c63961e-7253-47a2-99ed-2f17050d46d7)

А еще дружеское напоминание - это документация, вы не обязаны запомнить все сразу. Просто обращайтесь к ней по мере надобности.

### Элементы базы данных:

![enter image description here](https://telegra.ph/file/90049f8d0d738bc729a7c.png)

* **\[acccomments]** --- Комментарии пользователей на стенах своих аккаунтов.
* **\[actions]** --- Сюда наше ядро записывает различные действия игроков, модераторов. Можно воспользоваться упрощенным вариантом в [**панели**](/gdps_docs/logi-gde-ikh-naiti-i-dlya-chego-oni.md).

  * Register - Регистрация игрока
    * Синтаксис: `{"action":"Register","email":"[Тут Email игрока]","uname":"[Тут никнейм игрока]"}`
  * Login - Вход игрока
    * Синтаксис `{"action":"Login","uname":"[Тут никнейм игрока]"}`
  * Upload - Выкладывание уровня
    * Синтаксис `{"action":"Upload","name":"[Имя уровня]","objects":"306","starsReq":"10","version":"1"}`
    * Подробнее:
      * name - имя
      * objects - количество объектов на уровне
      * starsReq - Оценка, которую игрок выбрал перед выкладыванием уровня
      * version - Если игрок скопирует уровень или обновит его, то число будет увеличиваться. Если уровень новый - число будет равно единице.
  * Rate - оценка уровня модератором
    * Синтаксис `{"action":"Rate","type":"StarRate:10","uname":"[Тут никнейм игрока]"}`
    * Подробнее:
      * type - может быть Feature, StarRate:\[тут количество звезд]. \* LikeLevel, LikeComment, LikeAccomment - игрок поставил оценку *(Лайк или Дизлайк)* уровню, комментарию, или комментарию под аккаунтом
    * Синтаксис `{"action":"LikeAcccomment","type":"Like"}` `{"action":"LikeLevel","type":"Like"}` `{"action":"LikeComment","type":"Like"}`
    * Подробнее:
      * type - Может быть либо Like либо Dislike. Игрока, кто поставил лайк/дизлайк, никто не может отследить.
    * Delete - Удаление уровня.
    * Update - Обновление уровня своим создателем.
      * Синтаксис\
        `{"action":"Update","name":"М41den Top","objects":"1801","starsReq":"4","version":"3"}`
      * Подробнее:
        * name - имя

        * objects - количество объектов на уровне

        * starsReq - Оценка, которую игрок выбрал перед выкладыванием уровня

        * version - Игрок обновил уровень и число увеличилось

  > *Это самые частые действия, которые делают игроки. Список может быть неполным.*
* **\[comments]** - комментарии к уровням.
* **\[friendreqs]** - все активные запросы в друзья.
* **\[friendships]**- тут указаны различные "дружеские отношения" между игроками. Они попадают в эту таблицу с того момента, как оба игрока приняли запрос дружбы. *Ниже указан синтаксис таблицы:*
  * id - номер дружбы.
  * uid1 - идентификатор аккаунта, который первый дал запрос дружбы.
  * uid2 - идентификатор аккаунта, который принял запрос дружбы.
* **\[levelpacks]** - В этом разделе находятся различные Map pack'и и Gauntlet'ы. ***(Добавление в этот раздел новых Map pack'ов и Gauntlet'ов записано ниже, отдельно!)***

***

* **\[levels]** - Тут находятся уровни с их содержимым, что позволяет просто управлять ими и изменять их содержимое.
  * Подробнее: Структура этого раздела может показаться сложной и хаотичной, но это только в первый раз. Сейчас всё объясним:

    * id - идентификатор уровня, назначается автоматически.

    * description - кодированное в Base64 описание уровня.

    * uid - идентификатор игрока, создавшего уровень

    * password - если указан 0, то уровень нельзя скопировать, если указано другое число, то это число и является паролем. Что интересно, пароли уровней никак не шифруются.

    * version - как было указано ранее:

    > Если игрок скопирует уровень или обновит его, то число будет увеличиваться. Если уровень оригинальный - число будет равно единице.

    * length - длина уровня, tiny (1), small (2) и так далее, вплоть до XL-ей.
    * difficulty - Это оценка уровня по сложности. Принимает значение от -1 до 50.
    * demonDifficulty - Оценка демонов.
    * suggestDifficulty - Предложенная оценка игроком.
    * suggestDifficultyCnt - Сколько игроков предложили сложность, нужна для математики 1-го класса.
    * track\_id - Идентификатор трека: если игрок использует официальную музыку, будет равно id этого официального трека, в случае кастомной музыки, значение равно нулю.
    * song\_id - Идентификатор кастомного трека, будет равен нулю если будет использоваться официальная музыка.
    * versionGame - если не вдаваться в подробности, оно должно быть равно либо 21 либо 22.
    * versionBinary - Если не вдаваться в подробности, это версия вашего GDPS, любые изменения в файлах увеличивает это значение, не смотря на то, какая версия GDPS (PC, Android, IOS и т.д.)
    * stringExtra - Дополнительная информация уровня.
    * stringSettings - Обычно остается пустой.
    * stringLevel - Содержание уровня. Вы можете изменять его, но это не рекомендовано.
* **\[messages]** - Личные сообщения между игроками.
* **\[quests]** - Ежедневные, еженедельные уровни и квесты. Первые два действия, можно совершить проще через *команды*.
* **\[roles]** - Кастомные роли. У ролей могут быть кастомные цвета надписей в комментариях уровня, значки а так же различные *разрешения*. ***(Добавление в этот раздел новых ролей записано ниже, отдельно!)***
* **\[scores]** - Статистика прохождения уровней.
* **\[songs]** - В этой таблице записаны все кастомные треки.
* **\[users]** - Таблица зарегистрированных пользователей. ***(Дополнительная информация об этом разделе написана ниже, отдельно!)***

### Добавление Map pack'ов и Gauntlet'ов

![enter image description here](https://telegra.ph/file/fd7efcf9ae90803a9d6b6.png)

И Map pack'и, и Gauntlet'ы находятся в одном разделе - **\[levelpacks]**. Нажав на кнопку **Новая запись**, перед вами откроется раздел где нужно будет указать нужные условия.

* id - трогать его не нужно, оно устанавливается автоматически.
* packType - Значение должно равняться либо 0 либо 1.
  * 0 - Map Pack. Набор из уровней, минимальное количество уровней которого равно 3.
  * 1 - Gauntlet. Набор строго из 5 уровней.
* packName - у этого поля разные назначения, которые зависят от значения PackType.

  * Если PackType равен 0 (Map Pack) - туда нужно написать название вашего набора. ОБЯЗАТЕЛЬНО название не должно содержать спец. символов и должно быть написано на латинице.

  > Пример **неправильного** названия: Ультра!Крутойпак

  > Пример **правильного** названия Ultrakrutojpak или Ultra Cool Pack

  * Если packType равен 1 (Gauntlet) - туда нужно написать идентификатор выбранного вами Gauntlet'a. *Учитывайте, что Chaos Gauntlet не может отображаться до того, как игрок не нажмет на замок в подвале РубРуба.* Ниже указан список Gauntlet'ов рядом с их&#x20;
* Список Gauntlet'ов:

<table><thead><tr><th width="90">ID ⠀</th><th width="484">Название</th><th data-type="checkbox">Только 2.2?</th></tr></thead><tbody><tr><td>1</td><td>Fire</td><td>false</td></tr><tr><td>2</td><td>Ice</td><td>false</td></tr><tr><td>3</td><td>Poison</td><td>false</td></tr><tr><td>4</td><td>Shadow</td><td>false</td></tr><tr><td>5</td><td>Lava</td><td>false</td></tr><tr><td>6</td><td>Bonus</td><td>false</td></tr><tr><td>7</td><td>Chaos</td><td>false</td></tr><tr><td>8</td><td>Demon</td><td>false</td></tr><tr><td>9</td><td>Time</td><td>false</td></tr><tr><td>10</td><td>Crystal</td><td>false</td></tr><tr><td>11</td><td>Magic</td><td>false</td></tr><tr><td>12</td><td>spike</td><td>false</td></tr><tr><td>13</td><td>Monster</td><td>false</td></tr><tr><td>14</td><td>Doom</td><td>false</td></tr><tr><td>15</td><td>Death</td><td>false</td></tr><tr><td>16</td><td>Forest</td><td>true</td></tr><tr><td>17</td><td>Rune</td><td>true</td></tr><tr><td>18</td><td>Force</td><td>true</td></tr><tr><td>19</td><td>Spooky</td><td>true</td></tr><tr><td>20</td><td>Dragon</td><td>true</td></tr><tr><td>21</td><td>Water</td><td>true</td></tr><tr><td>22</td><td>Haunted</td><td>true</td></tr><tr><td>23</td><td>Acid</td><td>true</td></tr><tr><td>24</td><td>Witch</td><td>true</td></tr><tr><td>25</td><td>Power</td><td>true</td></tr><tr><td>26</td><td>Potion</td><td>true</td></tr><tr><td>27</td><td>Snake</td><td>true</td></tr><tr><td>28</td><td>Toxic</td><td>true</td></tr><tr><td>29</td><td>Halloween</td><td>true</td></tr><tr><td>30</td><td>Treasure</td><td>true</td></tr><tr><td>31</td><td>Ghost</td><td>true</td></tr><tr><td>32</td><td>Gem</td><td>true</td></tr><tr><td>33</td><td>Inferno</td><td>true</td></tr><tr><td>34</td><td>Portal</td><td>true</td></tr><tr><td>35</td><td>Strange</td><td>true</td></tr><tr><td>36</td><td>Fantasy</td><td>true</td></tr><tr><td>37</td><td>Christmas</td><td>true</td></tr><tr><td>38</td><td>Surprise</td><td>true</td></tr><tr><td>39</td><td>Mystery</td><td>true</td></tr><tr><td>40</td><td>Cursed</td><td>true</td></tr><tr><td>41</td><td>Cyborg</td><td>true</td></tr><tr><td>42</td><td>Castle</td><td>true</td></tr><tr><td>43</td><td>Grave</td><td>true</td></tr><tr><td>44</td><td>Temple</td><td>true</td></tr></tbody></table>

* levels - Указываем id уровней по порядку через запятую **без пробелов**:

  * в случае Map Pack'а от 3 до бесконечности;
  * в случае Gauntlet'a ровно 5 уровней.

  (Например `1,3,280,463,18`)
* **packStars, packCoins, packDifficulty, packColor** - это количество звезд, монет и сложность (от 1 до 10, где 1 - Auto, 2 - Easy, и т.д.) маппака, а так же его цвет в RGB (через запятую без пробелов, `255,0,0` - красный). \
  **В случае с Gauntlet, оставить пустым**.

> Важно отметить то, что скоро добавлять Map pack'и можно будет через панель управления сервером.

### Добавление квестов, Daily и Weekly уровней.

![enter image description here](https://telegra.ph/file/eb2ab82002519940c4df0.png)

Для игры, квесты, Daily и Weekly уровни находятся все в одной категории. Нажав на кнопку **Новая запись**, перед вами откроется раздел где нужно будет указать нужные условия. У каждой записи в этой части базы данных должен быть свой тип (Указывается в поле **\[type]**):

> 0 - **Daily** уровень \
> 1 - **Weekly** уровень\
> -1 - Events для 2.2\
> 2, 3, 4 - **Квест** (За который дают алмазы)

Для 0 *(Daily)* и 1 *(Weekly)* требуется указать только ID уровня. Его можно посмотреть в самой игре во вкладке информации о уровне (Там, где комментарии), либо в Базе Данных в разделе **Levels**. Помимо ID указывать ничего не нужно, все остальные поля должны оставаться пустыми.

> **Добавлять Daily и Weekly уровни можно через команды, подробнее в разделе "Команды"**

***

Для 2 *(Квест)* условия меняются.

> В поле **\[name]** вводим название квеста. ОБЯЗАТЕЛЬНО название не должно содержать спец. символов и должно быть написано на Латинице.

> В поле **\[type]** нужно ввести нужный тип квеста. 2 - собрать сферы 3 - собрать монеты 4 - собрать звезды

> Поле **\[timeExpire]** нужно оставить пустым, но через DROPDOWN меню (со стрелочкой вниз) нужно указать *now()*. Также можете указать дату, когда квест должен стать доступным (Например, `2025-12-30 18:46:00`)

### Добавление собственных ролей.

![enter image description here](https://telegra.ph/file/835a5e1a7c6ba8045e988.png)

Вспомним платформу DISCORD [(Тонкий намек зайти на сервер FruitSpace в Discord)](https://discord.gg/fruitspace), там тоже можно добавлять собственные роли. У каждой роли есть свой ID, имя, свои привилегии *(далее чуть подробнее)*, свой значок, а так же свой цвет комментария.

**\[roleName]** - имя роли. В игре его увидеть нельзя, но имя все-таки стоит установить для вашего же удобства.

**\[commentColor]** - цвет комментария. Чтобы без проблем выбрать цвет, переходим [сюда](https://www.rapidtables.com/web/color/RGB_Color.html), настраиваем цвет, после чего копируем и **по очереди через запятую вводим значения полей R,G,B.** Либо спустившись ниже по сайту, выбираем цвет из таблицы и копируем цифры соответствующей графы. В базе данных вставлять значения нужно **без скобок** и строго в формате R,G,B.

**\[modLevel]** - тип значка. Через моды можно добиться большего, но на приватках без модов может стоять 3 значения: 0 **(Без значка)**, 1 **(Серебряный значок)**, 2 **(Золотой значок)**. Он не влияет на ваши права.

Теперь, про **привилегии** ролей (**\[privs]**). Они указаны в формате JSON, подробнее про сам формат можно найти в интернете. **НО!** Структура уже соблюдена, вам лишь нужно сменить некоторые значения 0-ей на 1-ы, в зависимости от того, что вы хотите чтобы роль могла делать.

* **c-привилегии** (Начинаются с буквы **c**) - это привилегии команд.
* **а-привилегии** (Начинаются с буквы **а**) - это привилегии действий через интерфейс GD.

"**cRate**" - рейт уровня. \
"**cFeature**" - добавления уровня во вкладку Featured.\
"**cEpic**" - добавления уровня во вкладку Hall of Fame и появление окантовки вокруг логотипа сложности. \
"**cVerCoins**" - верификация монет. \
"**cDaily**" - добавление уровня в список Daily. \
"**cWeekly**" - добавление уровня в список Weekly. \
"**cDelete**" - удаление уровня без возврата. \
"**cLvlAccess**" - возможность скопировать уровень. \
"**aRateDemon**" - возможность рейта демона через меню рейта в игре. \
"**aRateReq**" - возможность отправить главным модераторам вашу оценку уровня.\
"**aRateStars**" - возможность рейта сложности (звезд) через меню рейта в игре. \
"**aReqMod**" - возможность включить меню модерации в игре. (Settings -> help -> req) "**dashboardMod**", "**dashboardBan**" и "**dashboardCreatePack**" не используются (пока что)

*Для активации привилегии, нужно изменить 0 на 1*

#### О таблице USERS и добавлении ролей.

Тут большинство полей работают как сборщики информации, и изменять многие из них нельзя. Поддаются изменению только 2 поля:

**\[role\_id]** - сюда можно добавить ID роли, чтобы добавить данную роль игроку. Игрок не может иметь больше одной роли. \
**\[isBanned]** - если изменить значение на 1, то аккаунт будет считаться не активированным, если 2, то заблокированным, он нигде не сможет отображаться, как и его уровни и комментарии.
