Перейти к содержанию
Авторизация  
Na'Vi

/cam - Камеры Слежения

Рекомендуемые сообщения

Na'Vi

В OnPlayerCommandText



if(strcmp(cmd, "/cam", true) == 0)
{
if(PlayerToPoint(2,playerid,230.3330,72.9040,1005.0391))
{
if(PlayerInfo[playerid][pMember] == 1 || PlayerInfo[playerid][pMember] == 2)
{
ShowPlayerDialog(playerid,1510,DIALOG_STYLE_LIST,"Камеры видеонаблюдения","Полицейский участок\nМэрия\nБольница\nФБР\nБанк\nСНН\
nБар 'Десять зелёных бутылок'\nВокзал","Просмотр"," Выход");
return 1;
}
else
{
SendClientMessage(playerid,COLOR_GRAD1," У вас нет доступа к камерам видеонаблюдения ");
return 1;
}
}
return 1;
}
if(strcmp(cmd, "/camoff", true) == 0)
{
SetCameraBehindPlayer(playerid);
TogglePlayerControllable(playerid, 1);
SetPlayerPos(playerid,230.3330,72.9040,1005.0391);
SetPlayerInterior(playerid,6);
return 1;
}

В OnDialogResponse



// -------------------------------- [ Камеры видеонаблюдения] ---------------------------//
if(dialogid == 1510)//если заменяете тут id в команде тоже не забудьте.
{
if(listitem == 0)// Полицейский участок
{
SetPlayerPos(playerid,1548.1624,-1711.9330,24.5689);
TogglePlayerControllable(playerid, 0);
SetPlayerCameraPos(playerid,1552.8424,-1651.0649,26.3802);
SetPlayerCameraLookAt(playerid,1539.2563,-1676.5486,12.9310);
SetPlayerInterior(playerid,0);
ShowPlayerDialog(playerid,555,DIALOG_STYLE_MSGBOX,"{FFFFFF}Для выхода из режима камеры, напишите /camoff, или нажмите пробел",string,"Хорошо","");
}
else if(listitem == 1)// Мэрия
{
TextDrawShowForPlayer(playerid, cam_help);
SetPlayerPos(playerid,1548.1624,-1711.9330,24.5689);
TogglePlayerControllable(playerid, 0);
SetPlayerCameraPos(playerid,1488.2271,-1750.2025,28.8099);
SetPlayerCameraLookAt(playerid,1482.8837,-1726.7638,13.9893);
SetPlayerInterior(playerid,0);
ShowPlayerDialog(playerid,555,DIALOG_STYLE_MSGBOX,"{FFFFFF}Для выхода из режима камеры, напишите /camoff, или нажмите пробел",string,"Хорошо","");
}
else if(listitem == 2)// Министерство Здравохранения
{
TextDrawShowForPlayer(playerid, cam_help);
SetPlayerPos(playerid,1166.5586,-1312.1243,24.5689);
TogglePlayerControllable(playerid, 0);
SetPlayerCameraPos(playerid,1173.0354,-1322.1129,22.9523);
SetPlayerCameraLookAt(playerid,1203.3212,-1325.7108,13.3984);
SetPlayerInterior(playerid,0);
ShowPlayerDialog(playerid,555,DIALOG_STYLE_MSGBOX,"{FFFFFF}Для выхода из режима камеры, напишите /cameraoff, или нажмите пробел",string,"Ок","");
}
else if(listitem == 3)// Федеральная служба безопасности
{
TextDrawShowForPlayer(playerid, cam_help);
SetPlayerPos(playerid,1517.3224,-1425.1661,24.5689);
TogglePlayerControllable(playerid, 0);
SetPlayerCameraPos(playerid,1491.0154,-1432.7917,33.5849);
SetPlayerCameraLookAt(playerid,1520.2252,-1449.5494,16.3539);
SetPlayerInterior(playerid,0);
ShowPlayerDialog(playerid,555,DIALOG_STYLE_MSGBOX,"{FFFFFF}Для выхода из режима камеры, напишите /camoff, или нажмите пробел",string,"Хорошо","");
}
else if(listitem == 4)// Банк Арзамас
{
TextDrawShowForPlayer(playerid, cam_help);
SetPlayerPos(playerid,588.5749,-1194.1183,33.4972);
TogglePlayerControllable(playerid, 0);
SetPlayerCameraPos(playerid,595.7941,-1207.6226,29.8053);
SetPlayerCameraLookAt(playerid,596.3458,-1236.9392,19.7242);
SetPlayerInterior(playerid,0);
ShowPlayerDialog(playerid,555,DIALOG_STYLE_MSGBOX,"{FFFFFF}Для выхода из режима камеры, напишите /camoff, или нажмите пробел",string,"Хорошо","");
}
else if(listitem == 5)// СНН
{
TextDrawShowForPlayer(playerid, cam_help);
SetPlayerPos(playerid,597.4597,-1375.1956,33.4972);
TogglePlayerControllable(playerid, 0);
SetPlayerCameraPos(playerid,607.4288,-1374.0558,30.3565);
SetPlayerCameraLookAt(playerid,641.4461,-1360.5675,16.5620);
SetPlayerInterior(playerid,0);
ShowPlayerDialog(playerid,555,DIALOG_STYLE_MSGBOX,"{FFFFFF}Для выхода из режима камеры, напишите /camoff, или нажмите пробел",string,"Хорошо","");
}
else if(listitem == 6)// Бар
{
TextDrawShowForPlayer(playerid, cam_help);
SetPlayerPos(playerid,2267.1563,-1674.1484,15.7025);
TogglePlayerControllable(playerid, 0);
SetPlayerCameraPos(playerid,2264.2283,-1669.4615,19.6185);
SetPlayerCameraLookAt(playerid,2298.1091,-1651.9199,15.3937);
SetPlayerInterior(playerid,0);
ShowPlayerDialog(playerid,555,DIALOG_STYLE_MSGBOX,"{FFFFFF}Для выхода из режима камеры, напишите /camoff, или нажмите пробел",string,"Хорошо","");
}
else if(listitem == 7)// Вокзал
{
TextDrawShowForPlayer(playerid, cam_help);
SetPlayerPos(playerid,1750.2472,-1926.7418,24.5689);
TogglePlayerControllable(playerid, 0);
SetPlayerCameraPos(playerid,1752.4962,-1935.2390,27.8387);
SetPlayerCameraLookAt(playerid,1782.1729,-1906.5847,18.0805);
SetPlayerInterior(playerid,0);
ShowPlayerDialog(playerid,555,DIALOG_STYLE_MSGBOX,"{FFFFFF}Для выхода из режима камеры, напишите /camoff, или нажмите пробел",string,"Хорошо","");
}
}

Специально для форума cr-mp.ru


 


Автор: Na'Vi


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


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

Автор не ты, нашел такую же систему на одном из форумов SAMP.

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


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

@Forumnik,Доказательства есть, т.к автор данной работы я 

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


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

Автору данного урока рекомендуется прочитать данный пост внимательно и несколько раз, а так же поменять что-то в своих стандартах написания кода или отказаться от выкладывания своих работ на публику.

Абсолютно не знаю, как можно пропускать такие работы на форум, в коде которых нет логики вообще (я не говорю даже про оформление кода, я именно про логику его работы). А после таких работ создается десяток тем на форуме, на подобии "почему не работает?".

И меня удивляет статус автора ("Всея игрового портала"), какой же он Всея, если публикует здесь такой полурабочий говнокод?

Если вы не очень хорошо разбираетесь в скриптинге, не можете нормально мыслить для составления кода, чтобы он был логичным, или не можете принять стандартный стиль написания кода - просто не выкладываете свои работы на этот форум, ведь вы делаете только хуже.

Начнем с команд.

  • Хоть и разница производительности в двух вариантах будет не очень большая, но представим себя участником конкурса по оптимизации кода. Проверять значения двух переменных куда целесообразней сначала, чем проверять нахождение игрока в радиусе.
  • Извините, а что, мы так и оставим эту дыру для всех желающих? Команда /camoff в прямом смысле, огромная дыра в игровом моде. Её ведь может вести любой игрок, и без сложностей телепортироваться в указанный интерьер (любой, игрок, карл).

Переходим в обработчик диалога. Здесь даже описывать ошибки не хочется, ибо всё ещё ужаснее. Даже не знаю, как назвать человека, который пишет настолько ужасный, по уровне логики, код.

Так же, хочется попросить, в следующий раз, указывать комментарии к своему коду, чтобы новичкам было легко понимать, какая часть кода за что отвечает - при чем, это же одна из составляющих логики таких работ на таких форумах.

И ещё раз, пожалуйста, автор, если тебе сложно выкладывать НОРМАЛЬНЫЙ код своих работ на этот форум - не выкладывай их или найди себе форум, типа pawn-govno.ru, где тебе будут рады.

В общем, описывать все ошибки я не буду, я просто оставлю здесь пример той же по функционалу системы, только с совершенно логическим кодом. Прошу автора, внимательно перечитать данный пост ещё раз, а так же взглянуть на логическую реализацию этой системы.

Если вдруг, ущербный просмотр кода на этом форуме, заживает всю табуляцию или оформление кода, я залил pwn файл на Яндекс Диск: https://yadi.sk/d/iUHxUza_wXwvH.


/*
	Массивы с данными камер, переменные
*/

enum e_security_cam_data
{
	scamPlaceName[32],
	scamInteriorID, // если камера установлена в интерьере
	Float:scamX,
	Float:scamY,
	Float:scamZ,
	Float:scamRX,
	Float:scamRY,
	Float:scamRZ
};

new g_SecurityCams[][e_security_cam_data] =
{
	{ "Полицеский участок", 0, 1552.8424, -1651.0649, 26.3802, 1539.2563, -1676.5486, 12.9310 },
	{ "Мэрия", 0, 1488.2271, -1750.2025, 28.8099, 1482.8837, -1726.7638, 13.9893 }
};

new bool:g_PlayerSecCamsStatus[MAX_PLAYERS] = {false, ...};

/*
	Добавляем в очищение всех данных игрока (где очищается PlayerInfo)
*/
g_PlayerSecCamsStatus[playerid] = false;

/*
	Команды (OnPlayerCommandText)
*/
if(strcmp(cmd, "/cam", true) == 0)
{
	// проверяем, является ли игрок участником фракции
	if(PlayerInfo[playerid][pMember] != 1 && PlayerInfo[playerid][pMember] != 2)
	{
		SendClientMessage(playerid, COLOR_GRAD1, "У вас нет доступа к камерам видеонаблюдения");
		return 1;
	}
	
	// проверяем, находиться ли игрок в нужном радиусе (не забудьте сменить координаты)
	if(!IsPlayerInRangeOfPoint(playerid, 2.0, 230.33, 72.90, 1005.03))
	{
		SendClientMessage(playerid, COLOR_GRAD1, "Вы не находитесь рядом с пультом управления видеонаблюдением");
		return 1;
	}
	
	// формируем текст диалога
	new dialog_text[sizeof(g_SecurityCams) * (32 + 5) + 16];
	
	for(new i = 0; i < sizeof(g_SecurityCams); i++)
	{
		format(dialog_text, sizeof(dialog_text), "%s\n%s", dialog_text, g_SecurityCams[i][scamPlaceName]);
	}
	
	// показываем игроку диалог
	ShowPlayerDialog(
		playerid,
		1510, // не забудьте сменить айди на свободный
		DIALOG_STYLE_LIST,
		"Камеры видеонаблюдения",
		dialog_text,
		"Переключиться",
		"Отмена"
	);

	return 1;
}
if(strcmp(cmd, "/camoff", true) == 0)
{
	if(g_PlayerSecCamsStatus[playerid]) // если игрок находиться в состоянии просмотра камеры
	{
		// выкидываем его обратно на землю
		SetCameraBehindPlayer(playerid);
		TogglePlayerControllable(playerid, 1);
		SetPlayerPos(playerid, 230.33, 72.90, 1005.03);
		SetPlayerInterior(playerid, 6);
		
		// очищаем статус
		g_PlayerSecCamsStatus[playerid] = false;
	}
	
	return 1;
}

/*
	Диалог (OnPlayerDialogResponse)
*/
if(dialogid == 1510) // не забудьте изменить айди диалога
{
	// если игрок нажал кнопку "Отмена"
	if(!response)
	{
		return 1; // выходим из функции
	}
	
	// проверяем, является ли игрок участником фракции
	if(PlayerInfo[playerid][pMember] != 1 && PlayerInfo[playerid][pMember] != 2)
	{
		SendClientMessage(playerid, COLOR_GRAD1, "У вас нет доступа к камерам видеонаблюдения");
		return 1;
	}
	
	// проверяем, находиться ли игрок в нужном радиусе (не забудьте сменить координаты)
	if(!IsPlayerInRangeOfPoint(playerid, 2.0, 230.33, 72.90, 1005.03))
	{
		SendClientMessage(playerid, COLOR_GRAD1, "Вы не находитесь рядом с пультом управления видеонаблюдением");
		return 1;
	}
	
	// проверяем, существует ли указанная камера (фейк данные можно отослать через RakSAMP например)
	if(listitem < 0 || listitem >= sizeof(g_SecurityCams))
	{
		return 1;
	}
	
	// активируем просмотр камеры
	g_PlayerSecCamsStatus[playerid] = true;
	TextDrawShowForPlayer(playerid, cam_help);
	TogglePlayerControllable(playerid, false);
	
	SetPlayerInterior(playerid, g_SecurityCams[listitem][scamInteriorID]);
	SetPlayerCameraPos(
		playerid,
		g_SecurityCams[listitem][scamX],
		g_SecurityCams[listitem][scamY],
		g_SecurityCams[listitem][scamZ]
	);
	SetPlayerCameraLookAt(
		playerid,
		g_SecurityCams[listitem][scamRX],
		g_SecurityCams[listitem][scamRY],
		g_SecurityCams[listitem][scamRZ]
	);
	
	// показываем диалог помощи
	ShowPlayerDialog(
		playerid,
		9999,
		DIALOG_STYLE_MSGBOX,
		"Видеонаблюдение",
		"{FFFFFF}Для выхода из режима камеры, напишите /camoff, или нажмите пробел",
		"OK",
		""
	);
	
	return 1;
}

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


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

Эта команда только для админов?

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


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

, Слишком много текста! Надо прочитать ,но я этого делать не буду! 

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


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

Кстати, я как-то не сразу заметил. В выложенном коде есть много зависимостей, например константы цветов, или, внимание, текстдрав cmd_help. После такого, я точно с уверенностью могу сказать, что автор данной темы, публикует здесь только полурабочий говнокод.

  • Like 1

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


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

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

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

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

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

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

Войти

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

Войти
Авторизация  

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

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

×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.