Гость stibs

Система погони - /pursuit

В теме 4 сообщения

Всем привет! Наверное, почти в каждом RP моде есть такая фракция как полиция. И работники этой фракции часто сталкивались с тем, что нарушители попросту выходят из игры во время погони. Данная команда позволит избежать данных проблем. 

Суть: 

Игрок(полицейский) вводит команду /pursuit [id] и если он соответствует всем требованиям (т.е. в данный момент он не ведет погоню и преступник не слишком далеко), то преступнику и полицейскому напишет в чат, что погоня начата. Если игрок в данный момент выйдет из игры - при заходе его посадит в тюрьму. Если полицейские отдалятся на слишком далекое расстояние, погоня также прекратится. 

Требования: 

  • Командный процессор ZCMD / DC_CMD или Pawn.CMD. 
  • Уметь пользоваться клавишами CTRL + C и CTRL+V. 

Переходим к самой системе: 

Ко всем new:

#define SendClientMessage SCM // если такой уже есть, этот не вставлять
#define COLOR_WARNING 0xF7CA18AA
new PursuitTimer[MAX_PLAYERS]; 

Ко всем командам: 

Спойлер

CMD:ps(playerid, params[])
{
	//проверку на фракцию
	if(sscanf(params, "d", params[0])) return SCM(playerid, COLOR_WARNING, "USAGE: /pursuit [id]");
	if(GetPVarInt(playerid, "pursuited")) return SCM(playerid, COLOR_WARNING, "Вы уже ведете погоню! Для отмены /cancelps");
	if(params[0] == playerid) return SCM(playerid, COLOR_WARNING, "Невозможно выполнить для самого себя!");
	if(GetPVarInt(playerid, "paf") > gettime()) return SCM(playerid, COLOR_WARNING, "Можно использовать раз в 10 секунд!");
	if(!IsPlayerConnected(params[0])) return SCM(playerid, COLOR_WARNING, "Игрок не подключен!");
	new Float:x, Float:y, Float:z;
	GetPlayerPos(params[0], x, y, z);
	if(GetPlayerDistanceFromPoint(playerid, x, y, z) > 30) return SCM(playerid, COLOR_WARNING, "Вы слишком далеко от приследуемого! (более 30м)");

	
	SetPVarInt(params[0], "pursuit", 1);
	SetPVarInt(playerid, "pursuited", params[0]);
	SCM(params[0], COLOR_WARNING, "[ВНИМАНИЕ!] За вами начали погоню полицейские. Если вы выйдите из игры, вы автоматически попадете в КПЗ!");
	static const fmt_str[] = "[Dispatch Police] За вами начал погоню полицейский %s[%d]";
	PlayCrimeReportForPlayer(playerid, params[0], 3);
	new name[MAX_PLAYER_NAME];
	GetPlayerName(playerid, name, MAX_PLAYER_NAME];
	new str[sizeof(fmt_str)+MAX_PLAYER_NAME+12];
	format(str, sizeof(str), fmt_str, name, playerid);
	SCM(params[0], COLOR_WARNING, str);
	SCM(playerid, COLOR_WARNING, "Вы начали погоню за подозреваемым. Оставайтесь в радиусе 70 м, иначе погоня будет прекращена!");
	SetPVarInt(playerid, "paf", gettime()+10);
	
	PursuitTimer[playerid] = SetTimerEx("TimerPursuit", 1000*3, true, "ii", playerid, params[0]);
	
	return true;
}
CMD:cancelps(playerid)
{
	//проверка на фракцию
	if(!GetPVarInt(playerid, "pursuited")) return SCM(playerid, COLOR_WARNING, "Вы никого не приследовали! Действие невозможно!");

	SCM(GetPVarInt(playerid, "pursuited"), COLOR_WARNING, "Погоня за вами прекращена!");
	SCM(playerid, COLOR_WARNING, "Погоня прекращена!");
	DeletePVar(GetPVarInt(playerid, "pursuited"), "pursuit");
	DeletePVar(playerid, "pursuit");
	DeletePVar(playerid, "paf");
	
	return true;
}

 

В конец мода: 

Спойлер

forward TimerPursuit(playerid, pursuitid);
public TimerPursuit(playerid, pursuitid)
{
	new Float:x, Float:y, Float:z;
	GetPlayerPos(pursuitid, x, y, z);
	if(GetPlayerDistanceFromPoint(playerid, x, y, z) > 70)
	{
	    SCM(pursuitid, COLOR_WARNING, "Погоня прекращена, так как полицейские отдалились более, чем на 70 м");
	    SCM(playerid, COLOR_WARNING, "Погоня завершена, вы отдалились более чем на 70 метров!");
	    DeletePVar(pursuitid, "pursuit");
	    DeletePVar(playerid, "pursuitid");
	    DeletePVar(playerid, "paf");
	    KillTimer(PursuitTimer[playerid]);
	    return true;
	}
	return true;
}

 

В OnPlayerDisconnect:
 

if(GetPVarInt(playerid, "pursuit") == 1)
{
  	/* ДАННЫЕ ФУНКЦИИ ЗАМЕНИТЬ НА СВОИ, ОБНУЛЕНИЕ РОЗЫСКА А ТАКЖЕ ВЫДАЧА ТЮРЬМЫ. 3600 - ЭТО ВРЕМЯ, 60 минут*/
    PLAYER_DATA[playerid][data_JAIL] = 1;
    PLAYER_DATA[playerid][data_JAILTIME] = 3600;
    PLAYER_DATA[playerid][data_WANTED] = 0;
  	/*КОНЕЦ ЗАМЕНЫ ОСТАЛЬНОЕ ВСЕ МОЖНО ОСТАВИТЬ*/
    static const fmt_str[] = "%s был посажен в кпз на 60 минут. Причина: выход при погоне";
    new text[sizeof(fmt_str)+MAX_PLAYER_NAME], names[MAX_PLAYER_NAME]; 
    GetPlayerName(playerid, names, MAX_PLAYER_NAME]; 
    format(text,sizeof(text),fmt_str, names);
    SendClientMessageToAll(-1,text);
}

Автор: @stibs

Копирование на другие порталы запрещено. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А если человека крашнет? Его же все равно посадит..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@DustonPlayZ Для этого можете использовать параметр reason в паблике OnPlayerDisconnect, подробнее см. https://wiki.sa-mp.com/wiki/OnPlayerDisconnect

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

зачетная тема! 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!


Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.


Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • nazpol9
      От nazpol9
      Привет всем.

      У меня имеется мод для самп сервера и VPS с Ubuntu, на котором я пытаюсь его запустить.

      В чем суть проблемы: при запуске samp03svr, сервер запускается, но на версии 0.3.DL R-1. Когда я пытаюсь запустить этот же мод локально на Windows, сервер работает на версии 0.3.7 и я могу зайти на него без клиента 0.3.DL.

      Для решения этой проблемы я уже пробовал заменять инклуды и исполнительные файлы теми, что есть в архивах на официальном сайте сампа, перекомпилировал мод, и ничего не изменилось.
       
      #include <a_samp> #include <a_mysql> #include <foreach> #include <Pawn.RakNet> #include <streamer> #include <sscanf2> #include <float2> #include <crashdetect> #include <fmt> #include <a_http> #include <Pawn.CMD> #include <Pawn.Regex> #include <requests> #include <callbacks> #include <MD5> #include <mxdate> #include <TOTP> #include <gvar> #include <md-sort> #include <nex-ac> #include <weapon-config> #include <discord-connector> #include <3DTryg> #include <textdraw-streamer>  
      plugins crashdetect.so streamer.so textdraw-streamer.so sscanf.so pawnraknet.so pawncmd.so mysql.so requests.so profiler.so pawnregex.so TOTP.so gvar.so discord-connector.so

      Если у кого-то будут какие-либо догадки, прошу ими поделиться, если понадобится больше информации - я постараюсь её предоставить.
    • Talex
      От Talex
      Всем привет, сливаю первый мод!
      Информация о моде:

      — Основа Gamenix.
      — Мод переведен на Mysql R39, теперь ни каких слётов нет, мод работает стабильно с онлайном 160+.
      — Новый автосалон на TextDraw.
      — Система 3-х автомобилей (1 можно купить по дефолту, 2 и 3 за донат).
      — Автомобили у игроков теперь не пропадают (Id'ы авто сбивались, с номерами теперь тоже всё в порядке).
      — Оформление сервера полностью переработано, теперь оно более красивое.
      — Защита от копирования карты.
      — в меню сервера добавлен пункт визуальных настроек.
      — Номера на транспорт теперь можно приобрести в /donate.
      — Сделан новый красивый спидометр.
      — При получении номера, добавлен выбор региона.
      — Сделана система радаров и промокодов, создание прямо из игры.
      — Новый интерьер казино.
      — Магазин скинов теперь на TextDraw.
      — Автошкола полностью функционирует.
      — Добавлена информация после коннекта о последнем входе в собственный аккаунт.
      — Приватная защита от всех видов DDoS атак и DoS атак.                                                                                                                                    
      — пароль от АП (/alog) теперь у каждого администратора индивидуальный.
      — Изменено оформление самого мода
      Это не все изменения мода, их ещё очень много. все не упомнишь. 
      Автор мода: Неизвестен
      CUNBERS RP 8.4.3.rar