Вопросы

Не работает авторизация (на регистрации стоит шифровка md5 и не могу сделать на авторизацию что бы работало)
 

Спойлер

case dLogin:
	    {
	        if(!response) return SPD(playerid, dLogin, info, "Оповещение", "{FFFFFF}Вы были кикнуты с сервера.\n{FF0000}Причина: Отказ от авторизации.\n{FFFFFF}Для выхода с сервера введите \"/q\" в чат", "Вход", "Выход"), Kick(playerid);
	        if(!strlen(inputtext)) return SPD(playerid, dLogin, DIALOG_STYLE_PASSWORD, "Авторизация", "Ошибка. Вы ничего не ввели\n{FFFFFF}Введите пароль от аккаунта для того, чтоб продолжить игру:", "Вход", "Выход");
            for(new i = strlen(inputtext)-1; i != -1; i--)
	        {
	            switch(inputtext[i])
	            {
	                case '0'..'9', 'а'..'я', 'a'..'z', 'А'..'Я', 'A'..'Z': continue;
	                default: return SPD(playerid, dLogin, DIALOG_STYLE_PASSWORD, "Авторизация", "Ошибка. Использовать возможно только латинские буквы и цифры\n{FFFFFF}Введите пароль от аккаунта для того, чтоб продолжить игру:", "Вход", "Выход");
	            }
	        }
	        if(!strcmp(pInfo[playerid][pPass], inputtext))
     		{
	            mysql_format:str_small( "SELECT * FROM `" #DB_ACCOUNTS "` WHERE `ID` = %d", pInfo[playerid][pID] );
				mysql_tquery( mysql_connect_ID, str_small, "UploadPlayerAccount","i", playerid );
	        }
	        else
			{
				SPD(playerid, dLogin, DIALOG_STYLE_PASSWORD, "Авторизация", "Ошибка. Вы ввели неверный пароль\n{FFFFFF}Введите пароль от аккаунта для того, чтоб продолжить игру:", "Вход", "Выход");
			}
			return 1;
	    }

 

 

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


Ссылка на сообщение

19 ответов на этот вопрос

  • 0

@mikivtanke, а если так?
 

Спойлер

new string[90], nickname[MAX_PLAYER_NAME];
GetPlayerName(playerid, nickname, sizeof nickname); // получим ник пользователя
// предположим, что password - введенный пользователем пароль в игре для авторизации
format(string, sizeof string, "SELECT * FROM `" #DB_ACCOUNTS "` WHERE nickname = '%s' AND password = MD5('%s) LIMIT 1", nickname, password);
mysql_tquery(mysql_connect_ID, string, "UploadPlayerAccount", "i", playerid); // отправим запрос в базу данных на загрузку аккаунта по нику И паролю

 

 

И в запросе поменяйте название столбца с ником пользователя (вместо nickname) и, соответственно, название столбца с паролем (вместо password).

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


Ссылка на сообщение
  • 0

@mikivtanke если при регистрации пароль шифруется в MD5, то при авторизации нужно сверять не сохраненный пароль с введенным, а сохраненный пароль с MD5 от введенного пароля. 

if(!strcmp(pInfo[playerid][pPass], md5(inputtext)))

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


Ссылка на сообщение
  • 0

@DEST

Спойлер

 warning 202: number of arguments does not match definition
warning 224: indeterminate array size in "sizeof" expression (symbol "size")
error 035: argument type mismatch (argument 2)
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


1 Error.

 


Строка:
 

if(!strcmp(pInfo[playerid][pPass], md5(inputtext)))

 

Отредактировано пользователем mikivtanke

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


Ссылка на сообщение
  • 0

@mikivtanke посмотрите в своем инклуде md5 как объявлена эта функция или посмотрите как она используется в моде в других местах, но скорее всего должно быть так: 

md5(inputtext, strlen(inputtext))

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


Ссылка на сообщение
  • 0

@DEST используется только в регистации на данный момент, в инклуде прописан так:
 

native md5(dest[], source[], size = sizeof dest);

 

ошибки:
 

C:\Users\user2\Documents\MEGA\Заказчикам\EXCITING\Мод\gamemodes\exproject.pwn(8263) : error 035: argument type mismatch (argument 2)
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


1 Error.

 

Отредактировано пользователем mikivtanke

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


Ссылка на сообщение
  • 0

@mikivtanke 
 

new md5Pass[кол-во_ячеек_pPass];
md5(inputtext, md5Pass, кол-во_ячеек_pPass);
if(!strcmp(pInfo[playerid][pPass], md5Pass))
...

 

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


Ссылка на сообщение
  • 0

@DEST как понять "кол-во ячеек"? 

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


Ссылка на сообщение
  • 0

@DEST В консоль выдает:
 

MD5 warning: NULL source string passed to native 'md5'

 

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


Ссылка на сообщение
  • 0

@mikivtanke inputtext и md5Pass поменяйте местами

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


Ссылка на сообщение
  • 0

@DEST не дает пройти авторизацию вообще (что верный, что не верный пароль - одно и тоже), ошибки/варнинги не выдает

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


Ссылка на сообщение
  • 0

@mikivtanke, а зачем вы при подключении игрока к серверу загружаете его аккаунт, а потом загруженный пароль сверяете на стороне сервера с введенным паролем? Ведь можно и в базе данных искать сразу по имени пользователя и паролю.

Спойлер

new string[], nickname[MAX_PLAYER_NAME];
GetPlayerName(playerid, nickname, sizeof nickname); // получим ник пользователя
// предположим, что password - введенный пользователем пароль в игре для авторизации
format(string, sizeof string, "SELECT * FROM accounts WHERE nickname = '%s' AND password = MD5('%s) LIMIT 1", nickname, password);
new Cache:cache = mysql_query(dbHandle, string); // отправим запрос в базу данных на загрузку аккаунта по нику И паролю

if(cache_num_rows()) { // если что-нибудь возвращено (то есть аккаунт найден)
	// загружаем аккаунт
}

 

 

Отредактировано пользователем odosenok
Причина: исправление опечатки (см. ответ от DEST).

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


Ссылка на сообщение
  • 0

@odosenok не хочется менять скрипт регистрации и не до конца понимаю че к чему. Пока что попробовал так:
 

Спойлер

new string[90], nickname[MAX_PLAYER_NAME];
			GetPlayerName(playerid, nickname, sizeof nickname); // получим ник пользователя
			// предположим, что password - введенный пользователем пароль в игре для авторизации
			format(string, sizeof string, "SELECT * FROM accounts WHERE nickname = '%s' AND password = MD5('%s') LIMIT 1", nickname, inputtext);
			new Cache:mysql_function_query(mysql_connect_ID, string); // ошибка тут

			if(cache_num_rows()) // если что-нибудь возвращено (то есть аккаунт найден)
			{
	  			mysql_format:str_small( "SELECT * FROM `" #DB_ACCOUNTS "` WHERE `ID` = %d", pInfo[playerid][pID] );
				mysql_tquery( mysql_connect_ID, str_small, "UploadPlayerAccount","i", playerid );
			}

 

 

Спойлер

C:\Users\user2\Documents\MEGA\Çàêàç÷èêàì\EXCITING\Ìîä\gamemodes\exproject.pwn(8279) : error 001: expected token: ";", but found "("
C:\Users\user2\Documents\MEGA\Çàêàç÷èêàì\EXCITING\Ìîä\gamemodes\exproject.pwn(8279) : warning 215: expression has no effect
C:\Users\user2\Documents\MEGA\Çàêàç÷èêàì\EXCITING\Ìîä\gamemodes\exproject.pwn(8279) : warning 203: symbol is never used: "mysql_function_query"
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


1 Error.

 

 

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


Ссылка на сообщение
  • 0

@mikivtanke, а какая у вас версия MySQL?

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


Ссылка на сообщение
  • 0

@mikivtanke, а UploadPlayerAccount покажите-ка еще.

 

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


Ссылка на сообщение
  • 0
В 26.10.2019 в 12:47, mikivtanke сказал:

new Cache:mysql_function_query(mysql_connect_ID, string);

в этой строке название переменной пропущено. Скорее всего, имелось ввиду: 
new Cache: cache = mysql_function_query(mysql_connect_ID, string);

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


Ссылка на сообщение
  • 0

@odosenok 

Спойлер

public: UploadPlayerAccount(playerid)
{
	pInfo[playerid][pID] = cache_get_field_content_int(0, "ID", mysql_connect_ID);
    pInfo[playerid][pAdmin] = cache_get_field_content_int(0, "Admin", mysql_connect_ID);
    pInfo[playerid][pAdminPass] = cache_get_field_content_int(0, "AdminPass", mysql_connect_ID);
    pInfo[playerid][pMoney] = cache_get_field_content_int(0, "Money", mysql_connect_ID);
    
    new numid = cache_get_field_content_int(0, "Org", mysql_connect_ID);
    if(numid != 0)
    {
    	for( new i; i != LoadAllOrg; i++ )
		{
		    if(numid == oInfo[i][oID])
			{
			    pInfo[playerid][pOrg][0] = i;
				break;
			}
	    }
    }
	else
	{
	    pInfo[playerid][pOrg][0] = -1;
	}
    
    pInfo[playerid][pOrg][1] = cache_get_field_content_int(0, "Orang", mysql_connect_ID);
    pInfo[playerid][pHspawn] = cache_get_field_content_int(0, "Hspawn", mysql_connect_ID);
    pInfo[playerid][pDonate] = cache_get_field_content_int(0, "Donate", mysql_connect_ID);
    pInfo[playerid][pArrest] = cache_get_field_content_int(0, "Arrest", mysql_connect_ID);
    pInfo[playerid][pBank] = cache_get_field_content_int(0, "Bank", mysql_connect_ID);
    pInfo[playerid][pGame] = cache_get_field_content_int(0, "Game", mysql_connect_ID);
    pInfo[playerid][pAnim] = cache_get_field_content_int(0, "Anim", mysql_connect_ID);
    pInfo[playerid][pNumber] = cache_get_field_content_int(0, "Number", mysql_connect_ID);
    pInfo[playerid][pWarn] = cache_get_field_content_int(0, "Warn", mysql_connect_ID);
    pInfo[playerid][pVip] = cache_get_field_content_int(0, "Vip", mysql_connect_ID);
    pInfo[playerid][pVipday] = cache_get_field_content_int(0, "Vipday", mysql_connect_ID);
    pInfo[playerid][pPhonemoney] = cache_get_field_content_int(0, "Phonemoney", mysql_connect_ID);
    pInfo[playerid][pVirt] = cache_get_field_content_int(0, "Virt", mysql_connect_ID);
    pInfo[playerid][pFrakskin] = cache_get_field_content_int(0, "Fskin", mysql_connect_ID);
    pInfo[playerid][pFight] = cache_get_field_content_int(0, "Fight", mysql_connect_ID);
    pInfo[playerid][pJail] = cache_get_field_content_int(0, "Jail", mysql_connect_ID);
  	pInfo[playerid][pJailTime] = cache_get_field_content_int(0, "JailTime", mysql_connect_ID);
  	pInfo[playerid][pDeath] = cache_get_field_content_int(0, "Death", mysql_connect_ID);
    if(pInfo[playerid][pGame]>2) SetPlayerScore(playerid,1);
    SetPVarInt(playerid,"mute",cache_get_field_content_int(0, "Mute", mysql_connect_ID));
    if(GetPVarInt(playerid,"mute")==0) DeletePVar(playerid,"mute");
    
    //cache_get_field_content(0, "Regcharacter", pInfo[playerid][pRegCharacter], mysql_connect_ID, 2024);
    SetPlayerFightingStyle(playerid, pInfo[playerid][pFight]);

    new mall[25];
    cache_get_field_content(0, "Mail", mall, mysql_connect_ID, 25);
    strmid(pInfo[playerid][pMail], mall, 0, strlen(mall), 25);
    
    cache_get_field_content(0, "Regip", mall, mysql_connect_ID, 17);
    strmid(pInfo[playerid][pRegip], mall, 0, strlen(mall), 17);
    pInfo[playerid][pRegdate] = cache_get_field_content_int(0, "Regdate", mysql_connect_ID);

    cache_get_field_content(0, "Lastip", mall, mysql_connect_ID, 17);
    strmid(pInfo[ playerid ][ pLastip ], mall, 0, strlen(mall), 17);
    pInfo[playerid][pLastdate] = cache_get_field_content_int(0, "Lastdate", mysql_connect_ID);

    new frak[35];
    cache_get_field_content(0, "Frak",frak, mysql_connect_ID,35);
    sscanf(frak, "p<|>dd",
	pInfo[playerid][pFrak][0],
	pInfo[playerid][pFrak][1]);
	
	if( pInfo[playerid][pFrak][0] != 0 || pInfo[playerid][pOrg][0] != -1)
	{
		new rang[40];
		cache_get_field_content(0, "Dol", rang, mysql_connect_ID, 35);
		strmid(pInfo[playerid][pDol], rang, 0, strlen(rang), 35);
	}

    new lica[64];
    cache_get_field_content(0, "Lic",lica, mysql_connect_ID,64);
    sscanf(lica, "p<|>dddd",
	pInfo[playerid][pLic][0],
	pInfo[playerid][pLic][1],
	pInfo[playerid][pLic][2],
	pInfo[playerid][pLic][3]);

	new jobj[15];
    cache_get_field_content(0, "Job",jobj, mysql_connect_ID,20);
    sscanf(jobj, "p<|>dd",
	pInfo[playerid][pJob][0],
	pInfo[playerid][pJob][1]);

	new pos[35];
    cache_get_field_content(0, "Pos",pos, mysql_connect_ID,35);
    sscanf(pos, "p<|>ffff",
	pInfo[playerid][pPos][0],
	pInfo[playerid][pPos][1],
	pInfo[playerid][pPos][2],
	pInfo[playerid][pPos][3]);

	new time[40];
    cache_get_field_content(0, "Time", time, mysql_connect_ID,11);
	sscanf(time, "p<|>dd",
	pInfo[playerid][pTime][0],
	pInfo[playerid][pTime][1]);

    new load[40];
    cache_get_field_content(0, "Chart", load, mysql_connect_ID,11);
	sscanf(load, "p<|>dddd",
	pInfo[playerid][pChart][0],
	pInfo[playerid][pChart][1],
	pInfo[playerid][pChart][2],
	pInfo[playerid][pChart][3]);

	new invent[70];
    cache_get_field_content(0, "pInvSlots", invent, mysql_connect_ID,50);
	sscanf(invent, "p<|>dddddddddd",
	_invPlayer[playerid][invSlot][0],
	_invPlayer[playerid][invSlot][1],
	_invPlayer[playerid][invSlot][2],
	_invPlayer[playerid][invSlot][3],
	_invPlayer[playerid][invSlot][4],
	_invPlayer[playerid][invSlot][5],
	_invPlayer[playerid][invSlot][6],
	_invPlayer[playerid][invSlot][7],
	_invPlayer[playerid][invSlot][8],
	_invPlayer[playerid][invSlot][9]);

	new invent2[70];
	cache_get_field_content(0, "pInvSlotsKol", invent2, mysql_connect_ID,70);
	sscanf(invent2, "p<|>dddddddddd",
	_invPlayer[playerid][invSlotKol][0],
	_invPlayer[playerid][invSlotKol][1],
	_invPlayer[playerid][invSlotKol][2],
	_invPlayer[playerid][invSlotKol][3],
	_invPlayer[playerid][invSlotKol][4],
	_invPlayer[playerid][invSlotKol][5],
	_invPlayer[playerid][invSlotKol][6],
	_invPlayer[playerid][invSlotKol][7],
	_invPlayer[playerid][invSlotKol][8],
	_invPlayer[playerid][invSlotKol][9]);
	
 	for(new z; z != LoadAllCar; z++)
	{
		if(!strcmp(cInfo[z][cOwner],pInfo[playerid][pName],true))
		{
			if( cInfo[ z ][ cTime ] == 1 )
			{
				cInfo[ z ][ cTime ] = 0;
				cInfo[z][cCar] = CreateVehicle(cInfo[z][cModel],cInfo[z][cLpos][0],cInfo[z][cLpos][1],cInfo[z][cLpos][2],cInfo[z][cLpos][3],cInfo[z][cColor][0],cInfo[z][cColor][1],-1);
				new carss = cInfo[z][cCar];
				LoadCarAttach(z, 0);
				milleage[ cInfo[ z ][ cCar ] ] = cInfo[ z ][ cMilleage ];
     			if(cInfo[z][cLock]==1) CarLock(cInfo[z][cCar],1,-1); else CarLock(cInfo[z][cCar],0,-1);
				if(strcmp(cInfo[z][cNumber],"none",true))
				{
					cInfo[z][cText] = CreateDynamic3DTextLabel(cInfo[z][cNumber], 0xFFFFFFFF, 0.0, 0.0, 1.1, 15.0, INVALID_PLAYER_ID, cInfo[z][cCar],1,-1,-1,-1,16.0);
				}
				UpdateVehicleDamageStatus(cInfo[z][cCar], cInfo[z][cDamage][0],cInfo[z][cDamage][1],cInfo[z][cDamage][2],cInfo[z][cDamage][3]);
				if(cInfo[z][cSirena] == 1)
				{
				    if(siren[carss] == 1) return SendClientMessage(cInfo[z][cOwner],-1,"Сирена стоит уже додя");
				    SendClientMessage(cInfo[z][cOwner],-1,"Сирена поставлена");
			    	sirenid[carss] = CreateObject(18646, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
			        AttachObjectToVehicle(sirenid[carss],carss,790.69702148,871.21807861,12.81365680,0.00000000,0.00000000,0.00000000);
			        siren[carss] = 1;
				}
			}
		 	else if( cInfo[ z ][ cTime ] != 0 )
			{
				cInfo[ z ][ cTime ] = 0;
			}
		}
  	}
    
    if( pInfo[ playerid ][ pVip ] > 0 && pInfo[ playerid ][ pVipday ] <= gettime() )
	{
		SCM(playerid,-1,"Срок действия вашего VIP-статуса истёк");
		SCM(playerid,-1,"{AEAEAE}Вы можете продлить его, пополнив свой баланс и выбрав нужный пункт в меню /donate");
		
		pInfo[playerid][pVip]=0;
		pInfo[playerid][pVipday]=0;
		
		mysql_format:str_cmd("UPDATE `" #DB_ACCOUNTS "` SET `Vip` = '0',`Vipday` = '0' WHERE `ID` = %d",pInfo[playerid][pID]);
		mysql_function_query(mysql_connect_ID, str_cmd, false, "", "");
	}
	if(GetPVarInt(playerid,"gLogged")==1) return 1;
	SetPVarInt(playerid,"helpengine",1);
	//for(new i; i != LoadAllOrg; i++) { if(!strcmp(oInfo[i][oOwner],pInfo[playerid][pName],true)) { pInfo[playerid][pNed][1]=oInfo[i][oNed], strmid(nInfo[oInfo[i][oNed]][nOwner], pInfo[playerid][pName], 0, strlen(pInfo[playerid][pName]), 24); break; }}
	
	if(pInfo[playerid][pChart][0]==-1) // ВЫБОР СКИНА ПОСЛЕ UCP
	{
		return SPD(playerid,dRegister,info,"Регистрация","{ffffff}Выберите пол вашего персонажа","М","Ж");
	}
	
	if(pInfo[playerid][pChart][1]<1) // ВЫБОР СКИНА ПОСЛЕ UCP
	{
		SetPVarInt(playerid,"skinchange",1);
		SpawnPlayer(playerid);
		return 1;
	}

    new c,m,s,y,me,d;
	gettime(c,m,s); getdate(y,me,d);
	if(pInfo[playerid][pTime][1]!=d) return SetPVarInt(playerid,"spawns",1), SPD(playerid,dLogin+1,list,"" #C_GRAY "Выберите спавн вашего персонажа","" #C_GRAY "1.{FFFFFF} Место выхода\n" #C_GRAY "2.{FFFFFF} Дом\n" #C_GRAY "3.{FFFFFF} Работа\n" #C_GRAY "4.{FFFFFF} Вокзал","Ок","Закрыть");
	if(pInfo[playerid][pTime][0]>23) pInfo[playerid][pTime][0]=0;
	if(pInfo[playerid][pTime][0]>c) return SetPVarInt(playerid,"spawns",1), SPD(playerid,dLogin+1,list,"" #C_GRAY "Выберите спавн вашего персонажа","" #C_GRAY "1.{FFFFFF} Место выхода\n" #C_GRAY "2.{FFFFFF} Дом\n" #C_GRAY "3.{FFFFFF} Работа\n" #C_GRAY "4.{FFFFFF} Вокзал","Ок","Закрыть");
	if(c<=pInfo[playerid][pTime][0]+2)
	{
		SetPVarInt(playerid,"spawns",2), SetPVarInt(playerid, "gLogged", 1); for(new i; i < 20; i++) SCM(playerid, -1, ""); SCM(playerid, 0xFFFFFFAA, "Мы снова рады видеть вас на сервере"), SpawnPlayer(playerid);
		SendMessageVip(playerid), CheckDelay(playerid);
		mysql_format:str_small( "SELECT * FROM `" #DB_ACCOUNTS "` WHERE `ID` = %d", pInfo[playerid][pID] );
		mysql_tquery( mysql_connect_ID, str_small, "LoadWeapon","i", playerid );
		return 1;
	}
    SetPVarInt(playerid,"spawns",1), SPD(playerid,dLogin+1,list,"" #C_GRAY "Выберите спавн вашего персонажа","" #C_GRAY "1.{FFFFFF} Место выхода\n" #C_GRAY "2.{FFFFFF} Дом\n" #C_GRAY "3.{FFFFFF} Работа\n" #C_GRAY "4.{FFFFFF} Вокзал","Ок","Закрыть");
    
    return printf("[Загружен аккаунт]: %s", pInfo[playerid][pName]);
}

 

 

@DEST на это йже строке
 

Спойлер

C:\Users\user2\Documents\MEGA\Заказчикам\EXCITING\Мод\gamemodes\exproject.pwn(8279) : error 017: undefined symbol "mysql_function_query"
C:\Users\user2\Documents\MEGA\Заказчикам\EXCITING\Мод\gamemodes\exproject.pwn(8279) : warning 213: tag mismatch
C:\Users\user2\Documents\MEGA\Заказчикам\EXCITING\Мод\gamemodes\exproject.pwn(8279) : warning 204: symbol is assigned a value that is never used: "cache"
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


1 Error.

 

 

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


Ссылка на сообщение
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

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

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

    • Mister Odin
      От Mister Odin
       
      new
       g_teleport_list[39][E_TELEPORT_LIST] = {  {"Спавн пгт.Батырево", 1802.3612, 2508.4824, 15.8887},  {"Спавн г.Арзамас", -113.5887, 977.7222, 12.0346},     {"Спавн г.Южный", 2744.2770, -2446.7246, 21.8988},     {"Центральный банк", 1852.020385,2040.791381,15.892713},  {"Рублёвка", -837.7783, 888.6161, 12.7232},  {"Казино", 1332.4252, 2358.7014, 17.6641},  {"Битва за контейнеры", 614.5167, 1722.3566, 12.0709},  {"Автосалон низкого класса", 2493.9616, -722.9544, 12.3315},  {"Автосалон среднего класса", 1407.7449, 455.4801, 13.1630},  {"Автосалон высокого класса", -14.0637, 2614.5664, 10.9892},   {"Мотосалон Harley Davidson", 785.720153, 750.465087, 12.000024},  {"Автошкола", 1909.174438,2227.679687,15.708162},  {"Военкомат", 1916.778564,2302.411376,15.574637},  {"Правительство области", -139.140975,593.789611,12.145712},  {"Отдел полиции №1 (ГИБДД)", 1906.805786,-2234.382812,11.257631},  {"Отдел полиции №2 (УМВД)", 2581.309326,-2416.139892,21.960090},  {"Отдел ФСБ", 1823.904663,2095.636718,15.848405},  {"Городская больница г.Арзамас", -285.797210,581.851562,12.120290},   {"СМИ", -317.708038,821.221679,13.051450},  {"Воинская часть", 1703.197265,1678.025878,15.279437},  {"Арзамасская ОПГ", 438.705322,1046.505126,12.002637},  {"Батыревская ОПГ", 1941.203857,2161.006591,15.705187},  {"Лыткаринская ОПГ", -2346.002441,75.257041,21.002962},  {"Шахта", 2381.5727, 1726.4451, -2.1506},  {"Завод", -1062.6697, 2204.1894, 38.0964},  {"Инкосация", 1864.1374, 2011.7136, 15.8546},  {"Транспортная Компания", 2362.1115, 1972.5627, 15.5530},  {"База механиков", 1840.918090,-118.025146,15.695312},  {"Курьерская служба доставки", 2764.509765,-2396.882568,21.890625},  {"Аренда автобуса(Южный)", 2771.041992,-2454.780761,21.845964},  {"Аренда автобуса(Арзамас)", -127.487670,943.652648,12.142824},   {"Аренда автобуса(Батырево)", 1798.986328,2529.591552,15.664262},  {"Гоночная трасса", -1568.7784, 1611.8305, 36.3971},  {"Дом на горе", -789.5397, -456.7479, 741.1422},  {"СТО и тюнинг-ателье", 1856.1375, -122.3266, 15.6888},  {"Аренда транспорта пгт.Батырево", 1763.641723,2255.673339,15.865348},  {"Аренда транспорта г.Арзамас", -36.923530,1360.673583,12.002090},  {"Аренда транспорта г.Южный", 1966.599975,-2603.943603,10.820312},  {"Тайный интерьер в Лыткарино", -2424.5818, 2846.3291, 40.7908} };