Уроки моддинга
Основной раздел
Search
K
Links

Короны

Работа с коронами в plugin-sdk.
Работа с коронами в plugin-sdk.
Основной модуль в Plugin SDK для работы с коронами — CCoronas и класс с таким же именем. Этот класс позволяет создавать и контроллировать короны. Сама корона описана классом CRegisteredCorona. Класс "CCoronas" содержит указатель на массив этих корон (файл "CCoronas.h").
static CRegisteredCorona *aCoronas;
С этим массивом можно работать так же, как мы это делали ранее в модуле "CBulletTraces". Рассмотрим другие переменные класса "CCoronas":
Имя переменной
Тип
Описание
SunScreenX
float
Позиция солнца X(экранные координаты)
SunScreenY
float
Позиция солнца Y(экранные координаты)
SunBlockedByClouds
bool
"Закрыто" ли солнце облаками
bChangeBrightnessImmediately
bool
Включить резкое изменение яркости корон (при выключенном режиме они будут "затухать" или "появляться")
NumCoronas
unsigned int
Кол-во созданных корон в кадре (другими словами, кол-во используемых элементов в массиве aCoronas)
LightsMult
float
Интенсивность корон
MoonSize
unsigned int
Размер луны (используется для изменения размера луны при стрельбе в неё из снайперской винтовки)
В списке функций стоит рассмотреть следующие функции:
Создание короны с указанием текстуры:
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)
Создание короны с указанием типа короны:
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"):
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 созданной короны).
static void UpdateCoronaCoors(unsigned int id, CVector const& posn, float farClip, float angle)

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

#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