> 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**


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://lessons.sannybuilder.com/00100/00700/000400.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
