Форум

  • Страница 1 из 1
  • 1
Форум | www.SAMP-TEAM.com » Wiki SA-MP » Уроки скриптинга в Pawno » Создание автоматических ворот
Создание автоматических ворот
Наверное, все в одиночной игре бывали возле аэропорта(в любом городе) и пытались пробраться на территорию посадочной полосы чтобы украсть самолет.
Но вас всегда останавливали ворота, о да, те самые ворота, которые не открывались из-за отсутствии у вас лицензии пилота. В этом уроке я покажу вам, как сделать нечто подобное.

Для примера будут использоваться эти ворота



Для начала удалим стандартные ворота функцией RemoveBuildingForPlayer и создадим переменную, которая будет содержать обе части ворот.

В OnPlayerConnect

Код

RemoveBuildingForPlayer(playerid, 985, 2497.4063, 2777.0703, 11.5313, 0.25);//1-я часть ворот
RemoveBuildingForPlayer(playerid, 986, 2497.4063, 2769.1094, 11.5313, 0.25);//2-я часть ворот


Ко всем new

Код

new gate[2];


Теперь создаем два объекта на месте этих ворот и прописываем их в OnGameModeInit

Код

gate[0] = CreateObject(985, 2497.4063, 2777.0703, 11.5313, 0.0000000, 0.0000000, 90.0000000); //object(gate_closel)
gate[1] = CreateObject(986, 2497.4063, 2769.1094, 11.5313, 0.0000000, 0.0000000, 90.0000000); //object(gate_closer)


Теперь нужно узнать координаты, куда будут двигаться ворота(при открытии). Для этого нужно создать по одной копии каждого объекта в стороне от них.
Из созданных объектов нужно сохранить только координаты X,Y,Z.

Далее нам нужно сделать проверку на приближение игрока к воротам. Для этого воспользуемся public OnPlayerUpdate и функцией IsPlayerInRangeOfPoint.

Код

public OnPlayerUpdate(playerid)
{
if(IsPlayerInRangeOfPoint(playerid, 10.0, 2496.6779785156, 2773.1818847656, 10.822999954224))//проверка на приближение к точке
    {
    ...
    }
return 1;
}


10.0 - радиус, при пребывании в котором ворота будут открыты

Теперь нам нужно создать таймер, который будет отвечать за закрытие ворот

Ко всем new

Код

new gatetime;


В OnPlayerUpdate вместо "..."

Код

gatetimer = SetTimer("GateClose",5000,false);//объявляем таймер
MoveObject(gate[0], 2497.4108887, 2784.8049316, 11.5299997, 5.0);//движение 1-й части ворот
MoveObject(gate[1], 2497.3769531, 2761.0859375, 11.5200005, 5.0);//движение 2-й части ворот


5000 - время, через которое ворота закроются(в миллисекундах)
false- повторение таймера(true или false)

После всех public нам нужно создать сам таймер, в котором ворота будут закрываться назад

Код
forward GateClose();
public GateClose()
{
    MoveObject(gate[0], 2497.4063, 2777.0703, 11.5313, 5.0);//двигаем 1-ю часть ворот назад
    MoveObject(gate[1], 2497.4063, 2769.1094, 11.5313, 5.0);//двигаем 2-ю часть ворот назад
    KillTimer(gatetimer);//убиваем таймер
    return 1;
}


Теперь при приближении к воротам они будут открываться и закрываться через 5 секунд.
10.07.2014 в 23:24
А случайно эти ворота не нужно сначала удалить в редакторе?
11.07.2014 в 02:11
Да, совсем забыл.
11.07.2014 в 14:42
if(IsPlayerInRangeOfPoint(playerid, 10.0, 2496.6779785156, 2773.1818847656, 10.822999954224))//проверка на приближение к точке

а как эти координаты узнать?
06.01.2015 в 14:44
Когда ты поставил объект ворот, подойди как можно ближе к воротам и к той точке, при приближении к которой ворота должны открываться, и введи команду /save.
06.01.2015 в 16:33
Форум | www.SAMP-TEAM.com » Wiki SA-MP » Уроки скриптинга в Pawno » Создание автоматических ворот
  • Страница 1 из 1
  • 1
Поиск: