Вопросы

Подскажите как использовать

 

Что мы имеем как пример

new Float:GpsPositions[16][3] =
{
    {595.2228, 918.2593, 6002.3262},
    {619.6937, 840.1102, 6000.2534},
	...
    {647.0892, 856.9950, 6000.9971}
};

Я так понимаю чтобы получить корды первого нужно это

GpsPositions[0][0], GpsPositions[0][1], GpsPositions[0][2]

 

И у меня есть это

stock EnableGPSForPlayer(playerid, Float: x, Float: y, Float: z, Float:size = 4.0)
{
    gpss[playerid] = 1;
    SetPlayerCheckpoint(playerid, Float: x, Float: y, Float: z, size);
    return true;
}

Но я хочу так

stock EnableGPSForPlayer(playerid, Float: x, Float: y, Float: z, Float:size = 4.0)
{
	gpss[playerid] = 1;
	SetPlayerCheckpoint(playerid, GpsPositions[0][0], GpsPositions[0][1], GpsPositions[0][2], size);
	return true;
}

И это сделать чтобы все координаты через него проходили автоматом, чтобы я писал например EnableGPSForPlayer[0] и мне вызывался последний вариант с кордами [0]?

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

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


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

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

  • 0
1 час назад, Tony_Cannabis сказал:

И это сделать чтобы все координаты через него проходили автоматом, чтобы я писал например EnableGPSForPlayer[0] и мне вызывался последний вариант с кордами [0]?

 

Спойлер

#define D_GPS 1111
  
new Float:GpsPositions[16][3] =
{
    {595.2228, 918.2593, 6002.3262},
    {619.6937, 840.1102, 6000.2534},
	...
    {647.0892, 856.9950, 6000.9971}
};

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch(dialogid) {
        case D_GPS: {
            case 0: EnableGPSForPlayer(playerid, 0);
        }
    }
    return 0;
}

stock EnableGPSForPlayer(playerid, index, Float:size = 4.0)
{
    gpss[playerid] = 1;
    SetPlayerCheckpoint(playerid, GpsPositions[index][0], GpsPositions[index][1], GpsPositions[index][2], size);
    return true;
}

 

 

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

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


Ссылка на сообщение
  • 0
19 часов назад, glvde. сказал:

 

  example (закрыть спойлер)


#define D_GPS 1111
  
new Float:GpsPositions[16][3] =
{
    {595.2228, 918.2593, 6002.3262},
    {619.6937, 840.1102, 6000.2534},
	...
    {647.0892, 856.9950, 6000.9971}
};

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch(dialogid) {
        case D_GPS: {
            case 0: EnableGPSForPlayer(playerid, 0);
        }
    }
    return 0;
}

stock EnableGPSForPlayer(playerid, index, Float:size = 4.0)
{
    gpss[playerid] = 1;
    SetPlayerCheckpoint(playerid, GpsPositions[index][0], GpsPositions[index][1], GpsPositions[index][2], size);
    return true;
}

 

 

Спасибо! А всякую хрень которая в циклах, ее либо в EnableGPSForPlayer, либо отдельно?

 

Хотел засунуть vehiclePos[0], vehiclePos[1], vehiclePos[2]

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

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


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

@Tony_Cannabis, хотите сделать поиск автомобиля таким образом?

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


Ссылка на сообщение
  • 0
3 часа назад, glvde. сказал:

@Tony_Cannabis, хотите сделать поиск автомобиля таким образом?

примерно да, ну там автомобили, бизы еще что то, везде цикл, а в циклах veh, biz и тп

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

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


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

Есть другие варианты как сделать лучше? 

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


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

Я, например, не очень понял что нужно, приведите пример кода и как он должен преобразиться

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


Ссылка на сообщение
  • 0
33 минуты назад, DEST сказал:

Я, например, не очень понял что нужно, приведите пример кода и как он должен преобразиться

Есть цикл такой

			case 1: {
				new max_distance = 100000;
				new id_biz = -1;
				for(new i = gBusinessCount-1; i >= 0; --i)
				{
					if(gBusiness[i][bizzType] != 1) continue;
					new here_distance = (!IsPlayerInAnyVehicle(playerid)) ? floatround(GetPlayerDistanceFromPoint(playerid, gBusiness[i][bizzX], gBusiness[i][bizzY], gBusiness[i][bizzZ])) : floatround(GetVehicleDistanceFromPoint(GetPlayerVehicleID(playerid), gBusiness[i][bizzX], gBusiness[i][bizzY], gBusiness[i][bizzZ]));
					if(here_distance < max_distance)
					{
						id_biz = i;
						max_distance = here_distance;
					}
				}
				if(max_distance == -1 || id_biz == -1) return true;
				EnableGPSForPlayer(playerid, gBusiness[id_biz][bizzX], gBusiness[id_biz][bizzY], gBusiness[id_biz][bizzZ]);
				return true;
			}

и еще много циклов, например эта - проверка на бизнес который поблизости

 

Я хочу  gBusiness[id_biz][bizzX], gBusiness[id_biz][bizzY], gBusiness[id_biz][bizzZ] запихнуть сюда, но без цикла...

 

stock EnableGPSForPlayer(playerid, index, Float:size = 4.0)
{
    gpss[playerid] = 1;
    SetPlayerCheckpoint(playerid, GpsPositions[index][0], GpsPositions[index][1], GpsPositions[index][2], size);
    return true;
}

 

Я так понимаю что можно запихнуть только с циклом, или есть какие либо варианты? И как лучше будет его туда запихнуть если это единственный вариант, Заранее благодарю за помощь!

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


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

@Tony_Cannabis 

39 минут назад, Tony_Cannabis сказал:

gBusiness[id_biz][bizzX], gBusiness[id_biz][bizzY], gBusiness[id_biz][bizzZ]

stock EnableGPSForPlayer(playerid, index, Float:size = 4.0)
{
    gpss[playerid] = 1;
    SetPlayerCheckpoint(playerid, gBusiness[index][bizzX], gBusiness[index][bizzY], gBusiness[index][bizzZ], size);
    return true;
}

Сложного ничего нет. Если же хотите делать такую функцию для бизнесов поблизости, то придется с циклом.

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


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

@glvde. Если сделаю так? Или покажите как бы вы сделали

 

stock EnableGPSForPlayer(playerid, index, Float:size = 4.0)
{
    gpss[playerid] = 1;
	SetPlayerCheckpoint(playerid, GpsPositions[index][0], GpsPositions[index][1], GpsPositions[index][2], size);
		
	//проверка 
	if (EnableGPSForPlayer(playerid, 0)) {
		new max_distance = 100000;
		new id_biz = -1;
		for(new i = gBusinessCount-1; i >= 0; --i)
		{
			if(gBusiness[i][bizzType] != 1) continue;
			new here_distance = (!IsPlayerInAnyVehicle(playerid)) ? floatround(GetPlayerDistanceFromPoint(playerid, gBusiness[i][bizzX], gBusiness[i][bizzY], gBusiness[i][bizzZ])) : floatround(GetVehicleDistanceFromPoint(GetPlayerVehicleID(playerid), gBusiness[i][bizzX], gBusiness[i][bizzY], gBusiness[i][bizzZ]));
			if(here_distance < max_distance)
			{
				id_biz = i;
				max_distance = here_distance;
			}
		}
		if(max_distance == -1 || id_biz == -1) return true;
    	SetPlayerCheckpoint(playerid, gBusiness[index][bizzX], gBusiness[index][bizzY], gBusiness[index][bizzZ], size);
    	return true;
	}
	return true;
}

 

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

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


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

Если я так сделаю а циклов у меня много таких , получится так

 

Цитата

 


stock EnableGPSForPlayer(playerid, index, Float:size = 4.0)
{
	//проверка 
	else if (EnableGPSForPlayer(playerid, 1)) {
		new max_distance = 100000;
		new id_biz = -1;
		for(new i = gBusinessCount-1; i >= 0; --i)
		{
			if(gBusiness[i][bizzType] != 1) continue;
			new here_distance = (!IsPlayerInAnyVehicle(playerid)) ? floatround(GetPlayerDistanceFromPoint(playerid, gBusiness[i][bizzX], gBusiness[i][bizzY], gBusiness[i][bizzZ])) : floatround(GetVehicleDistanceFromPoint(GetPlayerVehicleID(playerid), gBusiness[i][bizzX], gBusiness[i][bizzY], gBusiness[i][bizzZ]));
			if(here_distance < max_distance)
			{
				id_biz = i;
				max_distance = here_distance;
			}
		}
		if(max_distance == -1 || id_biz == -1) return true;
    	SetPlayerCheckpoint(playerid, gBusiness[index][bizzX], gBusiness[index][bizzY], gBusiness[index][bizzZ], size);
    	return true;
	}
	else if (EnableGPSForPlayer(playerid, 2)) {
		for(new i = второйцикл-1; i >= 0; --i)
		{
			if(втораяхрень[i][второйтип] != 3) continue;
			всякая хрень
		}
		if(max_distance == -1 || id_biz == -1) return true;
    	SetPlayerCheckpoint(playerid, втораяхрень[index][bizzX], втораяхрень[index][bizzY], втораяхрень[index][bizzZ], size);
    	return true;
	}
	else if (EnableGPSForPlayer(playerid, 3)) {
		for(new i = третийцикл-1; i >= 0; --i)
		{
			if(третяяхрень[i][третийтип] != 3) continue;
			всякая хрень
		}
		if(max_distance == -1 || id_biz == -1) return true;
    	SetPlayerCheckpoint(playerid, третяяхрень[index][bizzX], третяяхрень[index][bizzY], третяяхрень[index][bizzZ], size);
    	return true;
	}
   	else {
    gpss[playerid] = 1;
	SetPlayerCheckpoint(playerid, GpsPositions[index][0], GpsPositions[index][1], GpsPositions[index][2], size);                                        
	return true;
    }
}

 

 

А это быдлокод по моему мнению, как то можно легче сделать, ну что никто не знает?

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

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


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

@Tony_Cannabis кто-то может и знает, но нужно стараться формулировать мысли так, чтобы их кто-то кроме вас еще понимал. 

Если нужно избежать повторения циклов, можно просто вынести его в функцию

stock GetNearbyBusiness(playerid, max_distance = 100000)
{
  new id_biz = -1;
  for(new i = gBusinessCount-1; i >= 0; --i)
  {
    if(gBusiness[i][bizzType] != 1) continue;
    new here_distance = (!IsPlayerInAnyVehicle(playerid)) ? floatround(GetPlayerDistanceFromPoint(playerid, gBusiness[i][bizzX], gBusiness[i][bizzY], gBusiness[i][bizzZ])) : floatround(GetVehicleDistanceFromPoint(GetPlayerVehicleID(playerid), gBusiness[i][bizzX], gBusiness[i][bizzY], gBusiness[i][bizzZ]));
    if(here_distance < max_distance)
    {
      id_biz = i;
      max_distance = here_distance;
    }
  }
  return id_biz; 
}

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

 

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


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

@DEST 

Если я так сделаю то надо будет эту проверку тоже както затронуть, для домов например 1 для бизов 2 и тп

if(gBusiness[i][bizzType] != 1) continue;

 

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


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

@Tony_Cannabis за что отвечает bizzType у бизнеса? И что означает значение 1? 

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


Ссылка на сообщение
  • 0
3 минуты назад, DEST сказал:

@Tony_Cannabis за что отвечает bizzType у бизнеса? И что означает значение 1? 

тип бизнеса, 7 например это азс, 1 закусочные 

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

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


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

@Tony_Cannabis тогда также можно в аргумент функции это засунуть 

stock GetNearbyBusinessByType(playerid, bizType, max_distance = 100000)
{
  new id_biz = -1;
  for(new i = gBusinessCount-1; i >= 0; --i)
  {
    if(gBusiness[i][bizzType] != bizType) continue;
    new here_distance = (!IsPlayerInAnyVehicle(playerid)) ? floatround(GetPlayerDistanceFromPoint(playerid, gBusiness[i][bizzX], gBusiness[i][bizzY], gBusiness[i][bizzZ])) : floatround(GetVehicleDistanceFromPoint(GetPlayerVehicleID(playerid), gBusiness[i][bizzX], gBusiness[i][bizzY], gBusiness[i][bizzZ]));
    if(here_distance < max_distance)
    {
      id_biz = i;
      max_distance = here_distance;
    }
  }
  return id_biz; 
}

 

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


Ссылка на сообщение
  • 0
Потом так вызывать?
GetNearbyBusinessByType(playerid, 1)

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


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

А можно gBusinessCount тоже менять? Типо 

stock GetNearbyBusinessByType(playerid, bizType, gBusinessCount, max_distance = 10000

т.к. у меня есть еще помимо бизнесов терминалы и прочее

				new id_atm = -1;
				for(new i = 1; i < MAX_ATM; i ++)
				{
					new here_distance = (!IsPlayerInAnyVehicle(playerid)) ? floatround(GetPlayerDistanceFromPoint(playerid, ATMData[i][ATM_Pos][0], ATMData[i][ATM_Pos][1], ATMData[i][ATM_Pos][2])) : floatround(GetVehicleDistanceFromPoint(GetPlayerVehicleID(playerid), ATMData[i][ATM_Pos][0], ATMData[i][ATM_Pos][1], ATMData[i][ATM_Pos][2]));
					if(here_distance < max_distance)
					{
						id_atm = i;
						max_distance = here_distance;
					}
				}

и тут в цикле мне нужна помощь, или отдельный создавать именно под него? т.к. в том i=0, а в этом 1

или в бд с 0 их пронумеровать?

 

уже пронумеровал

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

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


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

@Tony_Cannabis отдельную функцию создавать, тут даже в названии получить ближайший бизнес, а не терминал и прочее.  

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


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

@DEST А можно gBusinessCount менять? И вызывать что требуется

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


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

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

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

    • Aleksey98
      От Aleksey98
      Необходим человек: который сможет написать систему тюнинга!
      как на крупных проектах типа: Arizona и Radmir
      И еще требуется Мапперы на новый топовый проект!
      Связь : https://vk.com/id289498732
    • 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} };