> For the complete documentation index, see [llms.txt](https://lessons.sannybuilder.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lessons.sannybuilder.com/00100/00700/000400.md).

# Короны

Основной модуль в Plugin SDK для работы с коронами — **CCoronas** и класс с таким же именем. Этот класс позволяет создавать и контроллировать короны. Сама корона описана классом `CRegisteredCorona`. Класс "CCoronas" содержит указатель на массив этих корон (файл "CCoronas.h").

```cpp
static CRegisteredCorona *aCoronas;
```

С этим массивом можно работать так же, как мы это делали ранее в модуле [CBulletTraces](/00100/00700/000200.md). Рассмотрим другие переменные класса "CCoronas":

| Имя переменной               | Тип          | Описание                                                                                               |
| ---------------------------- | ------------ | ------------------------------------------------------------------------------------------------------ |
| SunScreenX                   | float        | Позиция солнца X (экранные координаты)                                                                 |
| SunScreenY                   | float        | Позиция солнца Y (экранные координаты)                                                                 |
| SunBlockedByClouds           | bool         | "Закрыто" ли солнце облаками                                                                           |
| bChangeBrightnessImmediately | bool         | Включить резкое изменение яркости корон (при выключенном режиме они будут "затухать" или "появляться") |
| NumCoronas                   | unsigned int | Кол-во созданных корон в кадре (другими словами, кол-во используемых элементов в массиве aCoronas)     |
| LightsMult                   | float        | Интенсивность корон                                                                                    |
| MoonSize                     | unsigned int | Размер луны (используется для изменения размера луны при стрельбе в неё из снайперской винтовки)       |

В списке функций стоит рассмотреть следующие функции:

Создание короны с указанием текстуры:

```cpp
static void RegisterCorona(unsigned int id, CEntity *attachTo, unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha, CVector const &posn, float radius, float farClip, RwTexture *texture, unsigned char flare, bool enableReflection, bool checkObstacles, int _param_not_used, float angle, bool longDistance, float nearClip, unsigned char fadeState, float fadeSpeed, bool onlyFromBelow, bool reflectionDelay)
```

Создание короны с указанием типа короны:

```cpp
static void RegisterCorona(unsigned int id, CEntity *attachTo, unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha, CVector const &posn, float radius, float farClip, unsigned char coronaType, unsigned char flare, bool enableReflection, bool checkObstacles, int _param_not_used, float angle, bool longDistance, float nearClip, unsigned char fadeState, float fadeSpeed, bool onlyFromBelow, bool reflectionDelay)
```

Типы корон описаны в перечислении `eCoronaType` (файл "CRegisteredCorona.h"):

```cpp
enum eCoronaType { 
    CORONATYPE_SHINYSTAR, 
    CORONATYPE_HEADLIGHT, 
    CORONATYPE_MOON, 
    CORONATYPE_REFLECTION, 
    CORONATYPE_HEADLIGHTLINE, 
    CORONATYPE_RING_B = 9 
};
```

Рассмотрим параметры этих функций:

| Имя параметра        | Тип                          | Описание                                                                                                                                                                                                          |
| -------------------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| id                   | unsigned int                 | id короны. Для каждой созданной короны в кадре он должен быть уникальным.                                                                                                                                         |
| attachTo             | CEntity \*                   | игровой субьект, к которому "прицепляется" корона. Если такой субьект указан, координаты (параметр posn) указываются в системе координат этого субьекта (локальный оффсет). Если субьекта нет - используйте NULL. |
| red                  | unsigned char                | составляющая цвета R (0-255).                                                                                                                                                                                     |
| green                | unsigned char                | составляющая цвета G (0-255).                                                                                                                                                                                     |
| blue                 | unsigned char                | составляющая цвета B (0-255).                                                                                                                                                                                     |
| alpha                | unsigned char                | составляющая цвета A (0-255).                                                                                                                                                                                     |
| posn                 | CVector const &              | позиция короны.                                                                                                                                                                                                   |
| radius               | float                        | размер короны.                                                                                                                                                                                                    |
| farClip              | float                        | дальность прорисовки короны (дальняя граница отсечения при отрисовке короны).                                                                                                                                     |
| texture / coronaType | RwTexture \* / unsigned char | текстура или тип короны.                                                                                                                                                                                          |
| flare                | unsigned char                | тип бликов короны (1 или 2, 0 - бликов нет).                                                                                                                                                                      |
| enableReflection     | bool                         | включить отражение короны на мокром асфальте.                                                                                                                                                                     |
| checkObstacles       | bool                         | выполнить проверку на наличие преград между камерой и короной перед отрисовкой (если преграды есть, корона не отрисуется).                                                                                        |
| \_param\_not\_used   | int                          | неиспользуемый параметр.                                                                                                                                                                                          |
| angle                | float                        | угол короны (также не используется).                                                                                                                                                                              |
| longDistance         | bool                         | корону видно только издалека.                                                                                                                                                                                     |
| nearClip             | float                        | ближняя граница отсечения при отрисовке короны.                                                                                                                                                                   |
| fadeState            | unsigned char                | статус затенения (0 или 255).                                                                                                                                                                                     |
| onlyFromBelow        | bool                         | корону видно только тогда, когда камера находится ниже короны.                                                                                                                                                    |
| reflectionDelay      | bool                         | делать задержку при отрисовке отражения короны.                                                                                                                                                                   |

Обновление уже созданной короны (в функцию передается параметр - id созданной короны).

```cpp
static void UpdateCoronaCoors(unsigned int id, CVector const& posn, float farClip, float angle)
```

### Полный код плагина:

```cpp
#include "plugin.h"
#include "CCoronas.h"
#include "common.h"
#include "CMessages.h"

using namespace plugin;

class TestPlugin {
public:
    TestPlugin() {
        Events::gameProcessEvent += [] {
            CPed *playa = FindPlayerPed();
            if (playa) {
                CCoronas::RegisterCorona(5001, playa, 255, 0, 0, 255, CVector(-1.0f, -1.0f, 0.0f), 0.3f, 100.0f, CORONATYPE_SHINYSTAR, 0, 0, 0, 0, 0, 0, 0.5, 0, 15.0f, 0, 0);
                CCoronas::RegisterCorona(5002, playa, 255, 0, 0, 255, CVector(-1.0f, 1.0f, 0.0f), 0.3f, 100.0f, CORONATYPE_SHINYSTAR, 0, 0, 0, 0, 0, 0, 0.5, 0, 15.0f, 0, 0);
                CCoronas::RegisterCorona(5003, playa, 255, 0, 0, 255, CVector(1.0f, 1.0f, 0.0f), 0.3f, 100.0f, CORONATYPE_SHINYSTAR, 0, 0, 0, 0, 0, 0, 0.5, 0, 15.0f, 0, 0);
                CCoronas::RegisterCorona(5004, playa, 255, 0, 0, 255, CVector(1.0f, -1.0f, 0.0f), 0.3f, 100.0f, CORONATYPE_SHINYSTAR, 0, 0, 0, 0, 0, 0, 0.5, 0, 15.0f, 0, 0);
                CMessages::AddMessageJumpQ("Coronas are drawed!", 100, 0, 0);
            }
        };
    }
} test;
```

Для получения объекта игрока мы использовали функцию `FindPlayerPed` (файл "common.h").

Автор: **DK22Pac**
