Sign in to follow this  
Followers 0
Guest stibs

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

18 posts in this topic

Всем привет! Наверное, почти в каждом 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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

C:\gamemodes\new.pwn(6754) : error 017: undefined symbol "SCM"
C:\gamemodes\new.pwn(6766) : error 017: undefined symbol "SCM"
C:\gamemodes\new.pwn(6775) : error 017: undefined symbol "SCM"
C:\gamemodes\new.pwn(6785) : error 017: undefined symbol "SCM"
C:\gamemodes\new.pwn(7864) : error 017: undefined symbol "SCM"
C:\gamemodes\new.pwn(7872) : error 017: undefined symbol "SCM"
C:\gamemodes\new.pwn(7904) : error 017: undefined symbol "SCM"
C:\gamemodes\new.pwn(7910) : error 017: undefined symbol "SCM"
C:\gamemodes\new.pwn(7943) : error 017: undefined symbol "SCM"
C:\gamemodes\new.pwn(8005) : error 017: undefined symbol "SCM"
C:\gamemodes\new.pwn(8012) : error 017: undefined symbol "SCM"
C:\gamemodes\new.pwn(8027) : error 017: undefined symbol "SCM"
C:\gamemodes\new.pwn(8033) : error 017: undefined symbol "SCM"
C:\gamemodes\new.pwn(8048) : error 017: undefined symbol "SCM"
C:\gamemodes\new.pwn(8062) : error 017: undefined symbol "SCM"
C:\gamemodes\new.pwn(8102) : error 017: undefined symbol "SCM"
C:\gamemodes\new.pwn(8125) : error 017: undefined symbol "SCM"
C:\gamemodes\new.pwn(8132) : error 017: undefined symbol "SCM"
C:\gamemodes\new.pwn(8267) : error 017: undefined symbol "SCM"
C:\gamemodes\new.pwn(8275) : error 017: undefined symbol "SCM"
C:\gamemodes\new.pwn(8294) : error 017: undefined symbol "SCM"
C:\gamemodes\new.pwn(8309) : error 017: undefined symbol "SCM"
C:\gamemodes\new.pwn(8312) : error 017: undefined symbol "SCM"
C:\gamemodes\new.pwn(8332) : error 017: undefined symbol "SCM"
C:\gamemodes\new.pwn(8335) : error 017: undefined symbol "SCM"
C:\gamemodes\new.pwn(8382) : error 017: undefined symbol "SCM"

 

такие ошибки что делать???

@mr_sasha087 @DEST Помогите!!

Это строки  там где  SendClientMessage есть @mr_sasha087 @DEST Помогите!!

@odosenok

Edited by Senya Kolymbijskij

Share this post


Link to post
Share on other sites

@Senya Kolymbijskij замените SCM на SendClientMessage

Share this post


Link to post
Share on other sites

@keyl Так там не SCM  там SendClientMessage  в строках там где ошибка

 

Share this post


Link to post
Share on other sites

@Senya Kolymbijskij К дефайнам добавь вот это

#define 	SCM		SendClientMessage

 

Share this post


Link to post
Share on other sites

@Умелец Это вместо чего поставить?

 

@Умелец Вставил ваш код  вместо #define SendClientMesseage SCM

C:\gamemodes\new.pwn(299) : error 021: symbol already defined: "SendClientMessage"
C:\gamemodes\new.pwn(21119) : warning 219: local variable "name" shadows a variable at a preceding level
C:\gamemodes\new.pwn(21120) : error 035: argument type mismatch (argument 2)
C:\gamemodes\new.pwn(21120) : error 029: invalid expression, assumed zero
C:\gamemodes\new.pwn(21120) : warning 215: expression has no effect
C:\gamemodes\new.pwn(21119) : warning 204: symbol is assigned a value that is never used: "name"
C:\gamemodes\new.pwn(58668) : error 017: undefined symbol "PLAYER_DATA"
C:\gamemodes\new.pwn(58668) : warning 215: expression has no effect
C:\gamemodes\new.pwn(58668) : error 001: expected token: ";", but found "]"
C:\gamemodes\new.pwn(58668) : error 029: invalid expression, assumed zero
C:\gamemodes\new.pwn(58668) : fatal error 107: too many error messages on one line

вот ошибки.

Share this post


Link to post
Share on other sites

Share this post


Link to post
Share on other sites

@Senya Kolymbijskij поищи можете у тебя есть ещё дефайн SCM 

Share this post


Link to post
Share on other sites

@Умелецнету такого

Share this post


Link to post
Share on other sites

@Senya Kolymbijskij Значит удали этот дефайн и покажи ошибки какие будут!

Share this post


Link to post
Share on other sites

@Умелец 

C:\gamemodes\new.pwn(21103) : error 012: invalid function call, not a valid address
C:\gamemodes\new.pwn(21103) : warning 215: expression has no effect
C:\gamemodes\new.pwn(21103) : warning 215: expression has no effect
C:\gamemodes\new.pwn(21103) : warning 215: expression has no effect
C:\gamemodes\new.pwn(21103) : error 001: expected token: ";", but found ")"
C:\gamemodes\new.pwn(21103) : error 029: invalid expression, assumed zero
C:\gamemodes\new.pwn(21103) : fatal error 107: too many error messages on one line

 

Share this post


Link to post
Share on other sites

@Умелец 

	if(sscanf(params, "d", params[0])) return SCM(playerid, COLOR_WARNING, "USAGE: /pursuit [id]");

 

Share this post


Link to post
Share on other sites

@Senya Kolymbijskij это в команде /ps?, кинь весь код этой команды!

 

 

Edited by Умелец

Share this post


Link to post
Share on other sites

Your content will need to be approved by a moderator

Guest
You are commenting as a guest. If you have an account, please sign in.
Reply to this topic...

×   You have pasted content with formatting.   Remove formatting

  Only 75 emoticons maximum are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

Loading...
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • Awesome Basketball
      By Awesome Basketball
      Нужен человек, который сделает лаунчер на андройд, Цену пишите в комментариях
      Желательно с примерами работ
      ТЗ:
      3 экрана - Сервера, Настройки и Донат
      Сервера - список серверов и онлайн на них
      Настройки - стандартно: ваш ник, переустановить лаунчер, клиент, кэш
      Донат - Ввод ника, выбор услуг с ценами, и оплата
       
    • Guest Слава
      By Guest Слава
      Кто готов сделать лаучнер для проекта крмп звоните в дс: vadimyst#5775 - ЦЕНА ДОГОВОРНАЯ
    • Сергей Помазан
      By Сергей Помазан
      как можно сделать так что-бы сервер понял что человек сидит с лаунчера (c#), я в этом не сильно понимаю, могу купить решение у кого есть