В самый вверх мода ко всем переменным добавим это:
new Float:x[MAX_PLAYERS]; new Float:y[MAX_PLAYERS]; new Float:z[MAX_PLAYERS]; new timer[MAX_PLAYERS]; new bool:dialog[MAX_PLAYERS] = false;
[MAX_PLAYERS] - Делает переменную индивидуальной для каждого игрока, то есть у каждого игрока она разная.
И ко всем forward добавляем:
forward FloodStop(playerid);
Эти переменные нам вскоре очень пригодятся.
Теперь переходим к нашим пикапам, ищем public OnPlayerPickUpPickup и ищем ваш пикап, который нужно оградить от флуда. Для примера приведу этот:
if(pickupid == pickup[0]) // pickup[0] - раннее созданный мною пикап, в вашем случаи он будет другой. { SetPlayerHealth(playerid, 100); // даем игроку 100 хп SendClientMessage(playerid, COLOR_WHITE, "Здоровье пополнено."); // Выводим игроку в чат сообщение }
Изменяем на это:
if(pickupid == pickup[0] && dialog[playerid] == false) { SetPlayerHealth(playerid, 100); // даем игроку 100 хп SendClientMessage(playerid, COLOR_WHITE, "Здоровье пополнено."); dialog[playerid] = true; // пока эта переменная будет равна true пикап не откроется снова GetPlayerPos(playerid, x[playerid],y[playerid],z[playerid]); // узнаем свои координаты и раз мы стоим на пикапе, то и координаты пикапа timer[playerid] = SetTimer("FloodStop", 1000, true); // запускаем таймер проверки координат }
Теперь идем в самый низ и вставляем туда:
public FloodStop(playerid) { if(!IsPlayerInRangeOfPoint(playerid, 2.0, x[playerid],y[playerid],z[playerid])) /// проверяем координаты игрока и если игрок не находится в координатах пикапа то: { dialog[playerid] = false; // разрешаем снова воспроизводить сценарий пикапа KillTimer(timer[playerid]); // убиваем таймер } }
Все готово! Теперь если вам нужно убрать флуд с пикапа то просто к условию добавляем:
dialog[playerid] == false
И в конец сценария пикапа это:
dialog[playerid] = true; GetPlayerPos(playerid, x[playerid],y[playerid],z[playerid]); timer[playerid] = SetTimer("FloodStop", 1000, true);
Если что-то не понятно спрашивайте.
Автор: Olegsuper1