// Константы для координат парковки и точки возврата
#define PARKING_X 100.0
#define PARKING_Y 200.0
#define PARKING_Z 10.0
#define RETURN_X 150.0
#define RETURN_Y 250.0
#define RETURN_Z 10.0
// Радиус действия
#define TRIGGER_RADIUS 5.0
// Переменные для сохранения состояния игроков
new bool:IsInParking[MAX_PLAYERS];
// Хук для клавиши H
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if ((newkeys & KEY_HORN) != 0) // Проверяем, нажата ли клавиша H
{
if (IsPlayerInAnyVehicle(playerid)) // Проверяем, в машине ли игрок
{
new vehicleid = GetPlayerVehicleID(playerid);
if (GetPlayerVehicleSeat(playerid) == 0) // Проверяем, что игрок за рулем
{
new Float:playerX, Float:playerY, Float:playerZ;
GetPlayerPos(playerid, playerX, playerY, playerZ);
if (!IsInParking[playerid] && IsNearPickup(playerX, playerY, playerZ))
{
TeleportToParking(playerid, vehicleid);
}
else if (IsInParking[playerid])
{
TeleportToReturn(playerid, vehicleid);
}
}
else
{
SendClientMessage(playerid, 0xFF0000FF, "Вы должны быть за рулем, чтобы использовать эту функцию.");
}
}
else
{
SendClientMessage(playerid, 0xFF0000FF, "Вы должны находиться в машине, чтобы использовать эту функцию.");
}
}
return 1;
}
// Проверка на нахождение около пикапа
bool:IsNearPickup(Float:x, Float:y, Float:z)
{
new Float:pickupX = 120.0, Float:pickupY = 220.0, Float:pickupZ = 10.0; // Координаты пикапа
return (GetDistanceBetweenPoints3D(x, y, z, pickupX, pickupY, pickupZ) <= TRIGGER_RADIUS);
}
// Функция для телепортации в паркинг
TeleportToParking(playerid, vehicleid)
{
SetVehiclePos(vehicleid, PARKING_X, PARKING_Y, PARKING_Z);
SetPlayerPos(playerid, PARKING_X, PARKING_Y, PARKING_Z + 2.0);
SendClientMessage(playerid, 0x00FF00FF, "Вы телепортированы в паркинг.");
IsInParking[playerid] = true;
}
// Функция для телепортации обратно
TeleportToReturn(playerid, vehicleid)
{
SetVehiclePos(vehicleid, RETURN_X, RETURN_Y, RETURN_Z);
SetPlayerPos(playerid, RETURN_X, RETURN_Y, RETURN_Z + 2.0);
SendClientMessage(playerid, 0x00FF00FF, "Вы покинули паркинг.");
IsInParking[playerid] = false;
}
// Вызывается при выходе игрока
public OnPlayerDisconnect(playerid, reason)
{
IsInParking[playerid] = false;
return 1;
}