Активный
- Тема Автор
- #1
Транспорт - важная часть сервера. Разберем продвинутые техники работы.
Система владения транспортом
Система топлива
Система повреждений
Тюнинг транспорта
Важные моменты:
- Сохраняйте данные транспорта
- Реализуйте систему топлива
- Обрабатывайте повреждения
- Предоставляйте возможности тюнинга
Продвинутая система транспорта улучшает геймплей!
Система владения транспортом
Код:
enum VehicleInfo
{
vOwner[MAX_PLAYER_NAME],
vModel,
Float:vX,
Float:vY,
Float:vZ,
Float:vAngle,
vColor1,
vColor2,
vComponents[14],
vLocked,
vFuel,
Float:vHealth
}
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;
VehicleData[vehicleid][vFuel] = 100;
VehicleData[vehicleid][vHealth] = 1000.0;
return vehicleid;
}
Система топлива
Код:
new VehicleFuel[MAX_VEHICLES];
public OnGameModeInit()
{
// Обновление топлива каждую секунду
SetTimer("UpdateVehicleFuel", 1000, true);
return 1;
}
forward UpdateVehicleFuel();
public UpdateVehicleFuel()
{
for(new i = 0; i < MAX_VEHICLES; i++)
{
if(GetVehicleModel(i) > 0)
{
new engine, lights, alarm, doors, bonnet, boot, objective;
GetVehicleParamsEx(i, engine, lights, alarm, doors, bonnet, boot, objective);
if(engine == 1 && VehicleFuel[i] > 0)
{
VehicleFuel[i]--;
if(VehicleFuel[i] <= 0)
{
SetVehicleParamsEx(i, 0, lights, alarm, doors, bonnet, boot, objective);
for(new j = 0; j < MAX_PLAYERS; j++)
{
if(IsPlayerInVehicle(j, i))
{
SendClientMessage(j, -1, "Топливо закончилось!");
}
}
}
}
}
}
}
CMD:refuel(playerid, params[])
{
new vehicleid = GetPlayerVehicleID(playerid);
if(vehicleid == 0)
{
SendClientMessage(playerid, -1, "Вы не в транспорте");
return 1;
}
if(GetPlayerMoney(playerid) < 100)
{
SendClientMessage(playerid, -1, "Недостаточно денег для заправки");
return 1;
}
VehicleFuel[vehicleid] = 100;
GivePlayerMoney(playerid, -100);
SendClientMessage(playerid, -1, "Транспорт заправлен");
return 1;
}
Система повреждений
Код:
public OnVehicleDamageStatusUpdate(vehicleid, playerid)
{
new Float:health;
GetVehicleHealth(vehicleid, health);
if(health < 300.0)
{
// Транспорт сильно поврежден
new engine, lights, alarm, doors, bonnet, boot, objective;
GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
// Двигатель может заглохнуть
if(random(100) < 30)
{
SetVehicleParamsEx(vehicleid, 0, lights, alarm, doors, bonnet, boot, objective);
SendClientMessage(playerid, -1, "Двигатель заглох из-за повреждений!");
}
}
return 1;
}
Тюнинг транспорта
Код:
CMD:tune(playerid, params[])
{
new vehicleid = GetPlayerVehicleID(playerid);
if(vehicleid == 0)
{
SendClientMessage(playerid, -1, "Вы не в транспорте");
return 1;
}
// Проверка владельца
if(strlen(VehicleData[vehicleid][vOwner]) > 0)
{
if(strcmp(GetPlayerName(playerid), VehicleData[vehicleid][vOwner], true))
{
SendClientMessage(playerid, -1, "Это не ваш транспорт");
return 1;
}
}
// Меню тюнинга
new string[256] = "Спойлер\nКапот\nКрыша\nБоковые юбки\nЛампы\nВыхлоп\nДиски\nСтерео\nГидравлика\nПередний бампер\nЗадний бампер";
ShowPlayerDialog(playerid, DIALOG_TUNE, DIALOG_STYLE_LIST, "Тюнинг транспорта", string, "Выбрать", "Отмена");
PlayerVehicleID[playerid] = vehicleid;
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == DIALOG_TUNE)
{
if(response)
{
new vehicleid = PlayerVehicleID[playerid];
new components[] = {1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011};
if(listitem < sizeof(components))
{
AddVehicleComponent(vehicleid, components[listitem]);
VehicleData[vehicleid][vComponents][listitem] = components[listitem];
SendClientMessage(playerid, -1, "Компонент установлен");
}
}
}
return 1;
}
Важные моменты:
- Сохраняйте данные транспорта
- Реализуйте систему топлива
- Обрабатывайте повреждения
- Предоставляйте возможности тюнинга
Продвинутая система транспорта улучшает геймплей!