Система транспорта в Pawn: создание и управление

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

8

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

Транспорт - важная часть любого сервера. Разберем работу с автомобилями.

Создание транспорта
Код:
CreateVehicle(modelid, Float:x, Float:y, Float:z, Float:angle, color1, color2, respawn_delay);
// Пример:
new vehicleid = CreateVehicle(411, 1958.3783, 1343.1572, 15.3746, 90.0, 0, 1, -1);

Модели транспорта:
- 411 - Infernus
- 415 - Cheetah
- 429 - Banshee
- 451 - Turismo
- 506 - Super GT
- 560 - Sultan

Управление транспортом
Код:
// Поместить игрока в транспорт
PutPlayerInVehicle(playerid, vehicleid, seatid);

// Удалить игрока из транспорта
RemovePlayerFromVehicle(playerid);

// Получить ID транспорта игрока
GetPlayerVehicleID(playerid);

// Получить модель транспорта
GetVehicleModel(vehicleid);

Колбэки транспорта
Код:
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
    new model = GetVehicleModel(vehicleid);
    new string[128];
    format(string, sizeof(string), "Вы сели в транспорт модели %d", model);
    SendClientMessage(playerid, -1, string);
    return 1;
}

public OnPlayerExitVehicle(playerid, vehicleid)
{
    SendClientMessage(playerid, -1, "Вы вышли из транспорта");
    return 1;
}

public OnVehicleSpawn(vehicleid)
{
    // Транспорт заспавнился
    return 1;
}

public OnVehicleDeath(vehicleid, killerid)
{
    // Транспорт уничтожен
    SetTimerEx("RespawnVehicle", 30000, false, "i", vehicleid);
    return 1;
}

forward RespawnVehicle(vehicleid);
public RespawnVehicle(vehicleid)
{
    SetVehicleToRespawn(vehicleid);
}

Свойства транспорта
Код:
// Установить здоровье транспорта
SetVehicleHealth(vehicleid, 1000.0);

// Получить здоровье транспорта
new Float:health;
GetVehicleHealth(vehicleid, health);

// Установить цвет
ChangeVehicleColor(vehicleid, color1, color2);

// Установить номер
SetVehicleNumberPlate(vehicleid, "ABC-123");

// Заблокировать транспорт
SetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);

Система владения транспортом
Код:
enum VehicleInfo
{
    vOwner[MAX_PLAYER_NAME],
    vModel,
    Float:vX,
    Float:vY,
    Float:vZ,
    Float:vAngle,
    vLocked
}
new VehicleData[MAX_VEHICLES][VehicleInfo];

CreatePlayerVehicle(playerid, modelid)
{
    new Float:x, Float:y, Float:z, Float:angle;
    GetPlayerPos(playerid, x, y, z);
    GetPlayerFacingAngle(playerid, angle);
    
    new vehicleid = CreateVehicle(modelid, x+3, y, z, angle, 0, 1, -1);
    
    GetPlayerName(playerid, VehicleData[vehicleid][vOwner], MAX_PLAYER_NAME);
    VehicleData[vehicleid][vModel] = modelid;
    VehicleData[vehicleid][vX] = x+3;
    VehicleData[vehicleid][vY] = y;
    VehicleData[vehicleid][vZ] = z;
    VehicleData[vehicleid][vAngle] = angle;
    VehicleData[vehicleid][vLocked] = 0;
    
    return vehicleid;
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
    if(VehicleData[vehicleid][vLocked] == 1)
    {
        new owner[MAX_PLAYER_NAME];
        strcpy(owner, VehicleData[vehicleid][vOwner], MAX_PLAYER_NAME);
        if(strcmp(GetPlayerName(playerid), owner, true))
        {
            SendClientMessage(playerid, -1, "Транспорт заблокирован!");
            RemovePlayerFromVehicle(playerid);
            return 0;
        }
    }
    return 1;
}

Тюнинг транспорта
Код:
// Добавить компонент
AddVehicleComponent(vehicleid, componentid);

// Удалить компонент
RemoveVehicleComponent(vehicleid, componentid);

// Примеры компонентов:
// 1000 - Spoiler
// 1001 - Hood
// 1002 - Roof
// 1003 - Side Skirt
// 1004 - Lamps
// 1005 - Nitro
// 1006 - Exhaust
// 1007 - Wheels
// 1008 - Stereo
// 1009 - Hydraulics
// 1010 - Front Bumper
// 1011 - Rear Bumper
// 1012 - Right Vent
// 1013 - Left Vent

Важные моменты:
- Максимум 2000 транспортов на сервере
- Используйте SetVehicleToRespawn для респавна
- Сохраняйте данные транспорта при выходе
- Проверяйте владельца перед доступом

Транспорт делает сервер динамичным и интересным!
 

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

Сверху