Создание объектов в Pawn: руководство

Активный
Статус
Сообщения
516
Лайки
32

8

месяц на сайте

Объекты позволяют создавать уникальные карты и декорации. Разберем работу с ними.

Создание объекта
Код:
CreateObject(modelid, Float:x, Float:y, Float:z, Float:rX, Float:rY, Float:rZ, Float:drawDistance);
// Пример:
new objectid = CreateObject(19379, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 300.0);

Параметры:
- modelid - ID модели объекта
- x, y, z - координаты
- rX, rY, rZ - углы поворота
- drawDistance - дистанция прорисовки

Управление объектами
Код:
// Переместить объект
MoveObject(objectid, Float:x, Float:y, Float:z, Float:speed);

// Повернуть объект
RotateObject(objectid, Float:rX, Float:rY, Float:rZ, Float:speed);

// Установить позицию
SetObjectPos(objectid, Float:x, Float:y, Float:z);

// Установить поворот
SetObjectRot(objectid, Float:rX, Float:rY, Float:rZ);

// Удалить объект
DestroyObject(objectid);

// Прикрепить к игроку
AttachObjectToPlayer(objectid, playerid, Float:offsetX, Float:offsetY, Float:offsetZ, Float:rX, Float:rY, Float:rZ);

// Прикрепить к транспорту
AttachObjectToVehicle(objectid, vehicleid, Float:offsetX, Float:offsetY, Float:offsetZ, Float:rX, Float:rY, Float:rZ);

Колбэки объектов
Код:
public OnObjectMoved(objectid)
{
    // Объект завершил движение
    new string[64];
    format(string, sizeof(string), "Объект %d завершил движение", objectid);
    print(string);
    return 1;
}

public OnPlayerObjectMoved(playerid, objectid)
{
    // Персональный объект игрока завершил движение
    return 1;
}

Пример: движущаяся платформа
Код:
new platformObject;
new Float:platformPositions[][3] = {
    {100.0, 100.0, 10.0},
    {200.0, 100.0, 10.0},
    {200.0, 200.0, 10.0},
    {100.0, 200.0, 10.0}
};
new currentPosition = 0;

public OnGameModeInit()
{
    platformObject = CreateObject(19379, 100.0, 100.0, 10.0, 0.0, 0.0, 0.0, 300.0);
    SetTimer("MovePlatform", 5000, true);
    return 1;
}

forward MovePlatform();
public MovePlatform()
{
    currentPosition++;
    if(currentPosition >= sizeof(platformPositions))
    {
        currentPosition = 0;
    }
    
    MoveObject(platformObject, 
        platformPositions[currentPosition][0],
        platformPositions[currentPosition][1],
        platformPositions[currentPosition][2],
        5.0);
}

public OnObjectMoved(objectid)
{
    if(objectid == platformObject)
    {
        // Платформа достигла точки
    }
    return 1;
}

Пример: вращающийся объект
Код:
new rotatingObject;
new Float:currentRotation = 0.0;

public OnGameModeInit()
{
    rotatingObject = CreateObject(19379, 0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 300.0);
    SetTimer("RotateObject", 100, true);
    return 1;
}

forward RotateObject();
public RotateObject()
{
    currentRotation += 1.0;
    if(currentRotation >= 360.0)
    {
        currentRotation = 0.0;
    }
    
    SetObjectRot(rotatingObject, 0.0, 0.0, currentRotation);
}

Персональные объекты
Код:
// Создание объекта только для одного игрока
CreatePlayerObject(playerid, modelid, Float:x, Float:y, Float:z, Float:rX, Float:rY, Float:rZ, Float:drawDistance);

// Управление персональными объектами
SetPlayerObjectPos(playerid, objectid, Float:x, Float:y, Float:z);
SetPlayerObjectRot(playerid, objectid, Float:rX, Float:rY, Float:rZ);
DestroyPlayerObject(playerid, objectid);

Материалы и текстуры
Код:
// Установить материал объекта
SetObjectMaterial(objectid, materialindex, modelid, txdname[], texturename[], materialcolor);

// Установить текст объекта
SetObjectMaterialText(objectid, text[], materialindex, materialsize, fontface[], fontsize, bold, fontcolor, backcolor, textalignment);

Пример: текст на объекте
Код:
new textObject = CreateObject(19379, 0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 300.0);
SetObjectMaterialText(textObject, "Добро пожаловать!", 0, OBJECT_MATERIAL_SIZE_256x128, 
    "Arial", 24, 1, 0xFFFFFFFF, 0x00000000, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);

Важные моменты:
- Максимум 1000 объектов на сервере
- Используйте персональные объекты для индивидуальных эффектов
- Оптимизируйте drawDistance для производительности
- Сохраняйте ID объектов для управления

Объекты открывают безграничные возможности для создания карт!
 

1 человек читают эту тему (Всего: 1, Пользователей: 0, Гостей: 1)

Сверху