Аренда трейлера для дальнобойщиков
Делаю аренду трейлеров для дальнобойщиков и столкнулся с некоторыми трудностями. Сама идея заключается в том, чтоб трейлер, который арендовал один игрок, не смог взять другой игрок, чтоб он отцеплялся от его трака, если он его, все таки, прицепил. И еще, если у игрока уже есть арендованный трейлер, то он не сможет подцепить другой трейлер, чтоб у него выводилось сообщение, типа "Вы уже арендуете трейлер" и он так-же отцеплялся. Так вот, суть в том, что не могу додуматься как такое реализовать правильно. Делал через ежесекундный таймер для игрока, но там после проверок и ретурнов таймер прекращает обновляться, ибо реализован так:
Код
PHP код:
public OnPlayerConnect(playerid)
{
player_timer_ID[playerid] = SetTimerEx("@_OnPlayerTimer", 1000, false, "i", playerid);
return true;
}
@_OnPlayerTimer(playerid);
@_OnPlayerTimer(playerid)
{
player_timer_ID[playerid] = SetTimerEx("@_OnPlayerTimer", 1000, false, "i", playerid);
return true;
}
Но если сделать таймер цикличным, то тогда игроку будет флудить текстом, если он прицепит не свой трейлер и будет как-то криво отцепляться, то есть, отцепляется трейлер только раза с десятого.
Вот код аренды в таймере:
Код
PHP код:
if(pInfo[playerid][pTruckVehicle] != -1 // Если арендован грузовик
&& GetPlayerVehicleID(playerid) == pInfo[playerid][pTruckVehicle] // Сидит ли игрок в арендованном грузовике
&& IsTrailerAttachedToVehicle(GetPlayerVehicleID(playerid))) // Прицеплен ли трейлер к грузовику
{
new vehicleid = GetPlayerVehicleID(playerid),
trailerid = GetVehicleTrailer(vehicleid);
if(trailerid >= trucker_trailer[0] && trailerid <= trucker_trailer[1]) // Если прицеплен определенный трейлер, то проходит дальше
{
if(GetPVarInt(playerid, !"rent_trucker_trailer") && GetPVarInt(playerid, !"rent_trucker_trailer") != trailerid)
{
SendErrorMessage(playerid, "У Вас уже есть трейлер, который Вы арендуете!");
return DetachTrailerFromVehicle(vehicleid);
} // Если есть арендованный трейлер, но прицеплен не он
foreach(new i: players_truckers)
{
if(GetPVarInt(i, "rent_trucker_trailer") == trailerid && i != playerid)
{
SendErrorMessage(playerid, "Данный трейлер уже арендуют!");
return DetachTrailerFromVehicle(vehicleid);
}
} // Если прицепленный трейлер уже кто-то арендует.
if(GetPVarInt(playerid, !"rent_trucker_trailer")
&& GetPVarInt(playerid, !"rent_trucker_trailer") == trailerid
) return true; // Если есть арендованный трейлер и прицеплен он
if(GetMoney(playerid) < 750)
{
SendErrorMessage(playerid, "У Вас недостаточно средств для аренды трейлера!");
return DetachTrailerFromVehicle(vehicleid);
} // Если недостаточно средств для аренды
Dialog_Open(playerid, Dialog:DLG_TRAILER_RENT, DIALOG_STYLE_MSGBOX,
!""C_WHITE"Аренда трейлера",
!"\n\
"C_WHITE"Вы желаете арендовать данный трейлер?\n\
- Стоимость аренды: "C_MONEY"$750",
!"Да", !"Отмена"
);
}
}
Прощу прощения, что, возможно, что-то плохо объяснил, но как смог. :)