ArenaCheckRU

From SA-MP Wiki

Jump to: navigation, search

Проверка на нахождение в указанной зоне

Перевод статьи: [SFD]theAlone [gta-community.ru]

В этом туторе я покажу как сделать проверку для игрока на вхожение в указанную зону.

Во-первых, вы должны понять как работает это. А работает это примерно так:

             _________________ Точка 2;
             |                |
             |    Это арена   |
             |  которую вы    |
             |    хотите      |
             |     выделить   |
             |________________|
      Точка 1;

Это очень простой и одновременно эффектный скрипт, который поможет создавать "Админ-арены"

Я покажу вам фото:

Image:FotoAreaCheck.png

Вы правы. Именно на этом фото изображён гольф-клуб YellowBell в LV. Вот мне захотелось тут создать такое место, где хранятся тачки админа и только его. А как это сделать O_o?.

Просто.

Первое что мы должны сделать - это получить координаты.


Для этого можно воспользоваться /save, или же этой командой:


   public OnPlayerCommandText(playerid, cmdtext[])
   {
       if (strcmp("/pos", cmdtext, true) == 0)
       {
           new string1[256];
           new Float:X,Float:Y,Float:Z;
           GetPlayerPos(playerid,X,Y,Z);
           format(string1,sizeof(string1),"*Позиция = X: %.0f , Y: %.0f , Z: %.0f",X,Y,Z);
           SendClientMessage(playerid,COLOR_GREEN,string1);
           return 1;
       }
   return 0;
   }

Когда вы напишите /pos, то вам выдаст сообщение "*Позиция = X: , Y: , Z: ". И со всем этим идём дальше.


Настраиваем карту на север, и теперь бежим на Юго-западную точку, затем в Северо-восточную. Узнаём координаты при помощи /pos.

Итак, создадим простой FS. Ставим вверх.


   forward isPlayerInArea();


Идём в GameMode/FilterScriptInit, вставляем вверх функции:


   SetTimer("isPlayerInArea",1000, 1);


Ага, теперь мы проверяем зону каждую секунду Создадим паблик


   public isPlayerInArea()
   {
       new Float:X, Float:Y, Float:Z; //Вары для XYZ
       for(new i=0; i < MAX_PLAYERS; i++) //Делаем цикл
       {
           GetPlayerPos(i, X, Y, Z); //Этой командой узнаём XYZ
           if (X <= -3915 && X >= -3694 && Y <= 401 && Y >= 37)
           /* Это очень "нежная" (xD) хрень. Тут нужно менять числа в соответствии с координатами.
           Формат: MinX, MaxX, MaxY, MinY
           {
               SetPlayerHealth(i, -999999.9); //Этим убиваем игрока если он зашёл
           }
       }
   }

Это будет если он будет между X= -3915 and -3694 || Y= 401 and 37. Он сдохнет.

Если что-то не так исправьте плиз :D

Personal tools
Navigation
Toolbox