PDA

Просмотр полной версии : [Вопрос] Два вопроса [названия районов, редактирование объектов]



PawnoNoob
01.06.2018, 00:38
Приветствую:blush2:

Появилось два вопроса относительно некоторых систем:
1. Получение названия города и района, в котором находится игрок. Как адекватнее всего реализовать данную тему? Очень долго искал различные мануалы (более-менее адекватные), но всё как-то безуспешно.
2. Можно ли сделать возможность вращения камеры при редактировании объекта в OnPlayerEditDynamicObject?

geneff
01.06.2018, 02:33
1. g_geolocation (http://pro-pawn.ru/showthread.php?14016-g_geolocation&p=74738&viewfull=1#post74738) / geoip (http://forum.sa-mp.com/showthread.php?t=296171)
2. Когда редачишь обьекты - жми "пробел" и можно будет вращать камерой

Daniel_Cortez
01.06.2018, 03:12
Получение названия города и района, в котором находится игрок. Как адекватнее всего реализовать данную тему?
С помощью динамических зон стримера отслеживать события вхождения в ту или иную зону.
Саму таблицу с координатами и названиями зон можно взять из мода Open-GTO (файл "sources/core/zones.pwn"), но там данные хранятся не очень эффективно: мало того, что строки не упакованы, так они ещё и дублируются (некоторые по 10 с лишним раз) - куда разумнее было бы поместить их в отдельный массив в одном экземрляре, а в основном хранить только координаты и индексы строк из того массива.

ziggi
01.06.2018, 08:17
С помощью динамических зон стримера отслеживать события вхождения в ту или иную зону.
Саму таблицу с координатами и названиями зон можно взять из мода Open-GTO (файл "sources/core/zones.pwn"), но там данные хранятся не очень эффективно: мало того, что строки не упакованы, так они ещё и дублируются (некоторые по 10 с лишним раз) - куда разумнее было бы поместить их в отдельный массив в одном экземрляре, а в основном хранить только координаты и индексы строк из того массива.

Думаю, что система в Open-GTO базируется на этом скрипте: http://forum.sa-mp.com/showthread.php?t=27598

PawnoNoob
01.06.2018, 17:33
Думаю, что система в Open-GTO базируется на этом скрипте: http://forum.sa-mp.com/showthread.php?t=27598

Странно, но у меня уже которую неделю не работают сайты forum.sa-mp.com и wiki.sa-mp.com (работает только sa-mp.com). Посмотреть не получается :sad:

PawnoNoob
01.06.2018, 18:24
Всё-таки я не совсем понял, как используются функция Zone_GetNameByCoords в деле. Допустим, мне нужно вывести район, в котором расположен, например, дом. Как это сделать?

DeimoS
01.06.2018, 19:13
Zone_GetNameByCoords(Float:x, Float:y, Float:z, name[], size = sizeof(name))
Float:x, Float:y, Float:z - координаты дома
name[] - массив, в который запишется название района (нужно его создать перед этим, естественно)

PawnoNoob
01.06.2018, 20:56
Zone_GetNameByCoords(Float:x, Float:y, Float:z, name[], size = sizeof(name))
Float:x, Float:y, Float:z - координаты дома
name[] - массив, в который запишется название района (нужно его создать перед этим, естественно)

Хм, а если домов, например, 400?

DeimoS
01.06.2018, 23:14
Хм, а если домов, например, 400?

Эмм, так а в чём проблема? У тебя есть массив с координатами, благодаря которому ты создаёшь пикапы входа. И когда нужно узнать положение конкретного дома, у тебя явно есть его ID. Получаешь координаты из массива, используя ID, передаёшь их в функцию и получаешь район.

Хотя я бы сделал как предложил Cortez. Можно будет даже, в итоге, ID района хранить прямо в массиве домов, дабы лишний раз не генерировать его по новой.

PawnoNoob
01.06.2018, 23:28
Эмм, так а в чём проблема? У тебя есть массив с координатами, благодаря которому ты создаёшь пикапы входа. И когда нужно узнать положение конкретного дома, у тебя явно есть его ID. Получаешь координаты из массива, используя ID, передаёшь их в функцию и получаешь район.

Хотя я бы сделал как предложил Cortez. Можно будет даже, в итоге, ID района хранить прямо в массиве домов, дабы лишний раз не генерировать его по новой.


Всё равно сложно, если честно. Не могли бы Вы объяснить всё нагляднее? :blush2:

PawnoNoob
03.06.2018, 17:45
Хм. Вроде как разобрался, но есть проблема. Нашёл функцию strcpy (на просторах Интернета):
stock strcpy(dest[], src[], const size = sizeof(dest))
{
dest[0] = EOS;
return strcat(dest, src, size);
}

Отображает так:
https://i.imgur.com/5swuNvL.png

StevenH
03.06.2018, 18:30
Всё равно сложно, если честно. Не могли бы Вы объяснить всё нагляднее? :blush2:

Ну смотри, покажу тебе на примере команды с вводом номера дома:

CMD:district(playerid, params[])
{
if(isnull(params)) return SendClientMessage(playerid, -1, !"Введите /district [id дома]");

new houseid = strval(params), // запишем в переменную id дома
area_name[32], // сюда будем записывать название района
string[64]; // просто для вывода сообщения в чат

Zone_GetNameByCoords(HouseInfo[houseid][hX], HouseInfo[houseid][hY], HouseInfo[houseid][hZ], area_name, sizeof(area_name));
// HouseInfo[houseid][hX/Y/Z] - возьмем координаты дома из массива по X, Y, Z
// area_name - сюда запишем название района

// Выведем сообщение в чат
format(string, sizeof(string), "Дом №%d находится в районе - %s", houseid, area_name);
SendClientMessage(playerid, -1, string);
return 1;
}

PawnoNoob
03.06.2018, 18:39
Ну смотри, покажу тебе на примере команды с вводом номера дома:

CMD:district(playerid, params[])
{
if(isnull(params)) return SendClientMessage(playerid, -1, !"Введите /district [id дома]");

new houseid = strval(params), // запишем в переменную id дома
area_name[32], // сюда будем записывать название района
string[64]; // просто для вывода сообщения в чат

Zone_GetNameByCoords(HouseInfo[houseid][hX], HouseInfo[houseid][hY], HouseInfo[houseid][hZ], area_name, sizeof(area_name));
// HouseInfo[houseid][hX/Y/Z] - возьмем координаты дома из массива по X, Y, Z
// area_name - сюда запишем название района

// Выведем сообщение в чат
format(string, sizeof(string), "Дом №%d находится в районе - %s", houseid, area_name);
SendClientMessage(playerid, -1, string);
return 1;
}


О, теперь выводится без квадратиков :wizard:
Огромное спасибо :blush2: