Определение местоположения игрока. - Форум Cheat-Master.ru
  • Страница 1 из 1
  • 1
Модератор форума: Phoenixxx_Czar, Getbackthere, [CM]OlegEhtler  
Определение местоположения игрока.
A7X Дата: Пятница, 03.04.2015, 22:29 | Сообщение # 1
Боец
Сообщений: 210
Статус: Offline
В сегодняшнем уроке я научу вас определять город, в котором находится игрок.
Итак, добавим ко всем #define:
Код

#define IsPlace(%0, %1) IsPlayerInDynamicArea(%0, %1)
#define PLAYER_INVALID_PLACE (-1) // Если игрок где-то за пределами карты
#define PLAYER_IN_SAN_FIERRO (0) // Игрок в SF
#define PLAYER_IN_LOS_SANTOS (1) // Игрок в LS
#define PLAYER_IN_LAS_VENTURAS (2) // Игрок в LV
#define MAX_ZONES (3) // Всего городов

Далее добавим ко всем new:
Код

new zones[MAX_ZONES];
new Float:ZONE_SF[] = {
                 -2988.0,-2980.0,
                 -2985.0,2990.0,
                 -1970.0,2980.0,
                 -2114.0,2285.0,
                 -1960.0,2134.0,
                 -1871.0,2002.0,
                 -1755.0,1748.0,
                 -1626.0,1679.0,
                 -1314.0,1563.0,
                 -1219.0,1434.0,
                 -1191.0,1272.0,
                 -1208.0,1136.0,
                 -1111.0,1069.0,
                 -995.0,914.0,
                 -945.0,758.0,
                 -803.0,582.0,
                 -729.0,522.0,
                 -657.0,495.0,
                 -647.0,418.0,
                 -867.0,210.0,
                 -973.0,-1.0,
                 -1033.0,-244.0,
                 -1067.0,-386.0,
                 -1185.0,-561.0,
                 -1212.0,-656.0,
                 -1227.0,-1434.0,
                 -1211.0,-1718.0,
                 -1198.0,-2003.0,
                 -1157.0,-2199.0,
                 -1233.0,-2468.0,
                 -1191.0,-2609.0,
                 -1149.0,-2710.0,
                 -1113.0,-2957.0,
                 -1101.0,-2991.0,
                 -2988.0,-2980.0
};
new Float:ZONE_LS[] = {
                 -1101.0,-2990.0,
                 2989.0,-2989.0,
                 2940.0,449.0,
                 1890.0,507.0,
                 1349.0,580.0,
                 1057.0,634.0,
                 833.0,576.0,
                 455.0,435.0,
                 12.0,388.0,
                 -343.0,386.0,
                 -561.0,407.0,
                 -644.0,417.0,
                 -869.0,210.0,
                 -974.0,-2.0,
                 -1032.0,-244.0,
                 -1069.0,-386.0,
                 -1187.0,-564.0,
                 -1214.0,-656.0,
                 -1198.0,-2004.0,
                 -1158.0,-2199.0,
                 -1233.0,-2468.0,
                 -1151.0,-2712.0,
                 -1101.0,-2990.0
};
new Float:ZONE_LV[] = {
                 -1971.0,2979.0,
                 -759.0,2996.0,
                 2991.0,2993.0,
                 2985.0,709.0,
                 2940.0,448.0,
                 1889.0,505.0,
                 1350.0,579.0,
                 1056.0,633.0,
                 833.0,578.0,
                 454.0,435.0,
                 12.0,388.0,
                 -344.0,386.0,
                 -561.0,408.0,
                 -647.0,419.0,
                 -658.0,492.0,
                 -730.0,520.0,
                 -805.0,582.0,
                 -944.0,757.0,
                 -994.0,914.0,
                 -1110.0,1067.0,
                 -1209.0,1138.0,
                 -1192.0,1273.0,
                 -1220.0,1432.0,
                 -1314.0,1561.0,
                 -1626.0,1679.0,
                 -1755.0,1747.0,
                 -1873.0,2002.0,
                 -1961.0,2135.0,
                 -2114.0,2284.0,
                 -1971.0,2979.0
};

Далее добавим парочку stock

Код

stock GetPlayerPosPlace(playerid)
{
         new ReturnPlayer = -1;
         for(new i = 0; i < MAX_ZONES; i++)
         {
          if(!IsPlayerInDynamicArea(playerid, zones[i])) continue;
           ReturnPlayer = i;

         }
         return ReturnPlayer;
}
stock place_init()
{
  zones[0] = CreateDynamicPolygon(ZONE_SF);
   zones[1] = CreateDynamicPolygon(ZONE_LS);
    zones[2] = CreateDynamicPolygon(ZONE_LV);
     return 1;
}

Использовать эту функцию вы можете как хотите, например при смерти игрока он попадает в больницу того города, где умер.

Пример использования:
Код

CMD:posit(playerid, params[])
{
     if(GetPlayerPosPlace(playerid) == PLAYER_IN_SAN_FIERRO)
     SendClientMessage(playerid, COLOR_WHITE, "Игрок в SF");
     else if(GetPlayerPosPlace(playerid) == PLAYER_IN_LOS_SANTOS)
     SendClientMessage(playerid, COLOR_WHITE, "Игрок в LS");
     else if(GetPlayerPosPlace(playerid) == PLAYER_IN_LAS_VENTURAS)
     SendClientMessage(playerid, COLOR_WHITE, "Игрок в LV");
     else if(GetPlayerPosPlace(playerid) == PLAYER_INVALID_PLACE)
     SendClientMessage(playerid, COLOR_WHITE, "Неизвестно (Игрок за пределами карты)");
     return true;
}

Внимание! Для работы данной системы требуется Streamer версии не ниже 2.7.3!
Спасибо за внимание.


2000 дней на сайте.
Читер СМ с 21.01.2015 - 14.09.2016
Sp1ke Дата: Пятница, 03.04.2015, 22:51 | Сообщение # 2
Боец
Сообщений: 123
Статус: Offline
Не очень, функция мало где нужна и можно использовать радиус, если уж на то пошло.
[CM]Logotipo Дата: Суббота, 04.04.2015, 12:30 | Сообщение # 3
Авторитет
Сообщений: 1083
Статус: Offline
Sp1ke, в данном случае удобнее использовать полигоны.

Скуп
ВК
RakDroid - прокачка аккаунтов с телефона
VKMusic - вк музыка без браузера
Делаю сайты/софт/стимботов на заказ
Амасинк Дата: Воскресенье, 05.04.2015, 12:14 | Сообщение # 4
Боец
Сообщений: 267
Статус: Offline
Sp1ke, радиусы долго настраивать. Допустим ты стоишь в центре СФ, сохроняешь координату. Задаёшь ей радиус 1000. Далее топаешь в ЛС и делаешь эти действия. В итоге у тебя скрещиваются координаты и мод выдаёт не правильный результат. (Вроде так будет работать, т.к с радиусами редко работаю)

Помогаю новичкам в pawn
Maler[CM] Дата: Вторник, 07.04.2015, 04:42 | Сообщение # 5
MOSKVASTAN
Сообщений: 440
Статус: Offline
Нормально, но я где то видел ещё один способ (в меньшие строки, там только один сток и всё).

ВК: https://vk.com/vdovkinn
Skype: nikita24682
CM One Love:*
  • Страница 1 из 1
  • 1
Поиск: