[S]ilverbac[k] | Дата: Четверг, 10.07.2014, 23:24 | Сообщение # 1 |
.::Offline::.
Пахан
Сообщений: 723
[ 86 ]
Награды: 17
Статус
отсутствует
| Наверное, все в одиночной игре бывали возле аэропорта(в любом городе) и пытались пробраться на территорию посадочной полосы чтобы украсть самолет. Но вас всегда останавливали ворота, о да, те самые ворота, которые не открывались из-за отсутствии у вас лицензии пилота. В этом уроке я покажу вам, как сделать нечто подобное.
Для примера будут использоваться эти ворота
Для начала удалим стандартные ворота функцией 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
Теперь создаем два объекта на месте этих ворот и прописываем их в 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
В 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 секунд.
|
|
| |
ZioHik | Дата: Пятница, 11.07.2014, 02:11 | Сообщение # 2 |
.::Offline::.
http://u.to/N46EAw
Сообщений: 831
[ 82 ]
Награды: 29
Статус
отсутствует
| А случайно эти ворота не нужно сначала удалить в редакторе?
|
|
| |
[S]ilverbac[k] | Дата: Пятница, 11.07.2014, 14:42 | Сообщение # 3 |
.::Offline::.
Пахан
Сообщений: 723
[ 86 ]
Награды: 17
Статус
отсутствует
| Да, совсем забыл.
[FS]Neon[APP]FCP[APP]Vehicle Tuning Generator ||||| 20% -- Работа приостановленаОбложка:
|
|
| |
Kapany3-941 | Дата: Вторник, 06.01.2015, 14:44 | Сообщение # 4 |
.::Offline::.
Новичок
Сообщений: 2
[ 0 ]
Награды: 0
Статус
отсутствует
| if(IsPlayerInRangeOfPoint(playerid, 10.0, 2496.6779785156, 2773.1818847656, 10.822999954224))//проверка на приближение к точке
а как эти координаты узнать?
|
|
| |
[S]ilverbac[k] | Дата: Вторник, 06.01.2015, 16:33 | Сообщение # 5 |
.::Offline::.
Пахан
Сообщений: 723
[ 86 ]
Награды: 17
Статус
отсутствует
| Когда ты поставил объект ворот, подойди как можно ближе к воротам и к той точке, при приближении к которой ворота должны открываться, и введи команду /save.
[FS]Neon[APP]FCP[APP]Vehicle Tuning Generator ||||| 20% -- Работа приостановленаОбложка:
|
|
| |