Решил рассказать, как можно сделать небольшую GPS систему по профессиям.
Можно переделать под что угодно.
Я не претендую на уникальность и открытие "Америки", просто много раз видел как новички спрашивают как это сделать.
Подробнее об этой GPS системе:
Все довольно просто. Игрок встает на пикап, вводит команду, появляется диалоговое окно со списком профессий.
Выбрав одну из профессий на радаре появляется чекпоинт в том месте, где можно устроиться на выбранную им работу.
После того, как игрок прибыл на этот чекпоинт, он исчезает.
В моем примере пикап расположен в мэрии.
Итак как это сделать:
Ко всем new добавляем new gpsjobs;
Далее нам необходимо сделать пикап на котором игрок будет вводить команду.
В public OnGameModeInit() вставляем [pwn]gpsjobs = CreatePickup(1581, 23, 362.1823,173.9139,1008.3828,-1); // GPS jobs[/pwn]
Модель пикапа и координаты можете выставить свои. В данном случае пикап находится в мэрии.
-1 указывает на то, что пикап будет отображаться во всех виртуальных мирах.
Теперь делаем саму команду.
[pwn]if(strcmp(cmd, "/jobs", true) == 0)
{
if(IsPlayerConnected(playerid))
{
if(PlayerToPoint(3.0, playerid,362.1071,173.8628,1008.3828))
{
ShowPlayerDialog(playerid, 58, DIALOG_STYLE_LIST, "GPS: Выберите интересующую вас работу.", "Детектив\nШлюха\nНаркодилер\nУгонщик\nВодитель автобуса\nМеханик\nРазносчик газет\nПродавец авто\nПродавец оружия", "Выбрать", "Отмена");
}
else
{
SendClientMessage(playerid, COLOR_GREY, "Здесь не работает GPS. Вам нужно быть в мэрии.");
return 1;
}
}
}
Если вы меняете координаты пикапа, то их необходимо сменить и в этой строке if(PlayerToPoint(3.0, playerid,362.1071,173.8628,1008.3828))
Далее в public OnDialogResponse добавляем следующий код.
Pwn код
Скрыть код
else if(dialogid==58)
{
if(response)
{
switch(listitem)
{
case 0: { SetPlayerCheckpoint(playerid,359.2994,206.7888,1008.3828,3);
SendClientMessage(playerid, COLOR_LIGHTBLUE, "* GPS: Место, где можно устроиться Детективом помечено красным маркером."); }
case 1: { SetPlayerCheckpoint(playerid,2421.4241,-1220.1045,25.5064,3);
SendClientMessage(playerid, COLOR_LIGHTBLUE, "* GPS: Место, где можно устроиться Шлюхой помечено красным маркером."); }
case 2: { SetPlayerCheckpoint(playerid,2166.3220,-1675.4667,15.0859,3);
SendClientMessage(playerid, COLOR_LIGHTBLUE, "* GPS: Место, где можно устроиться Наркодилером помечено красным маркером."); }
case 3: { SetPlayerCheckpoint(playerid,1109.2737,-1796.2308,16.5938,3);
SendClientMessage(playerid, COLOR_LIGHTBLUE, "* GPS: Место, где можно устроиться Угонщиком помечено красным маркером."); }
case 4: { SetPlayerCheckpoint(playerid,1154.1823,-1770.8646,16.5992,3);
SendClientMessage(playerid, COLOR_LIGHTBLUE, "* GPS: Место, где можно устроиться Водителем автобуса помечено красным маркером."); }
case 5: { SetPlayerCheckpoint(playerid,1072.6245,-1700.2961,13.5469,3);
SendClientMessage(playerid, COLOR_LIGHTBLUE, "* GPS: Место, где можно устроиться Механиком помечено красным маркером."); }
case 6: { SetPlayerCheckpoint(playerid,765.6187,-1382.6399,13.6783,3);
SendClientMessage(playerid, COLOR_LIGHTBLUE, "* GPS: Место, где можно устроиться Разносчиком газет помечено красным маркером."); }
case 7: { SetPlayerCheckpoint(playerid,531.8411,-1292.3922,17.2422,3);
SendClientMessage(playerid, COLOR_LIGHTBLUE, "* GPS: Место, где можно устроиться Продавцом авто помечено красным маркером."); }
case 8: { SetPlayerCheckpoint(playerid,1366.3701,-1274.9960,13.5469,3);
SendClientMessage(playerid, COLOR_LIGHTBLUE, "* GPS: Место, где можно устроиться Продавцом оружия помечено красным маркером."); }
}
}
else
{
SendClientMessage(playerid,COLOR_RED,"Отмена");
return 1;
}
}[/pwn]
У меня расположение профессий отличается от стандартного расположения профессий в GF, поэтому координаты ставим свои.
Затем делаем что бы по прибытию на чекпоинт, он исчезал.
В public OnPlayerEnterCheckpoint добавляем следующее.
[pwn]if (gpsjobs)
{
DisablePlayerCheckpoint(playerid);
SendClientMessage(playerid, COLOR_LIGHTBLUE, "* GPS: Вы прибыли к месту, где можно устроиться на выбранную вами работу.");
GameTextForPlayer(playerid, "~w~GPS ~r~ OFF", 5000, 1);
}[/pwn]
Впринципе все ! Готово.
Для красоты можно добавить, что бы во время нахождения игрока на пикапе,
вылезало бы сообщение с командой, которую нужно ввести.
Для этого в public CustomPickups() вставляем
i[pwn]f (PlayerToPoint(2.0, i, 362.1823,173.9139,1008.3828))
{// gpsjobs
GameTextForPlayer(i, "~w~ ~g~ /jobs", 5000, 5);
}[/pwn]