Дмитрий |
Дата: Суббота, 17.03.2012, 22:38 | Сообщение # 1 | Сообщить о нерабочей теме
|
Регистрация: | 03.12.2011
|
Страна: | Российская Федерация |
Репутация: |
14
|
Сообщений: | 1421 |
Награды: |
4
+
|
Статус: |
|
| Сегодня мы научимся создавать ворота которые будут открываться по клавише и закрываться они тоже будут по клавише/автоматически (по вашему выбору)
И так начнём. Открытие и закрытие ворот по команде. Сначала нужно добавить в мод/фильтрскрипт новую переменную точнее две : Code new gateactekos; // ВЫ можете по своему я делал для ацтеков new gatetimeract; // это переменная для таймера…(если вам автоматическое закрытие не нужно не пишите эту строку) К #define добавим: Code #define COLOR_RED 0xAA3333AA //это для цвета В forward ставим: Code forward gateactClose(playerid) // в конце это будет пабликом закрытых ворот В Code public OnGameModeInit Вставим Code gateactekos = CreateObject(980, 1810.90 -1893.91, 15.2,0.0,0.0,90); Это сам обЪект ворот (980 == ид объекта,1810.90 -1893.91, 15.2 == Y,X,Z координаты и 0.0,0.0,90 == rY,rX,rZ – угол поворота.) Это координаты закрытых ворот вставлять
И так мы создали ворота как объект теперь нам нужно заставить его шевелиться (двигаться)
В public OnPlayerCommandText(playerid, cmdtext[]) Пишем Code if(!strcmp(cmdtext, "/aopen", true)) // сама команда для открытия ворот { if(PlayerInfo[playerid][pLeader] == 11 || PlayerInfo[playerid][pMember] == 11) // проверка на фракцию, банду .В моем случае это автошкола их ид банды == 11 { if (PlayerToPoint(15, playerid,1823.19,-1861.68,15.025)) //Где должен стоять игрок что бы ворота открывались (15 == это радиус отталкивается от координат , playerid == ид игрока для которого будет выполнятся эта функция (в данном случае для всех), 1823.19,-1861.68,15.025 == Y,X,Z координаты где должен стоять игрок (не забывайте про радиус!) ). { MoveObject(gateactekos, 1810.90,-1887.3,15.2, 2); //куда будут двигаться ворота (gateactekos == переменная которой мы обозначили объект в public OnGameModeInit, 1810.90,-1887.3,15.2 == координаты Y,X,Z куда двигаются ворота, 2 == скорость движения ворот (2 оптимальная)) //Если вы хотите что бы ворота закрывались автоматически то пишите то что ниже ,если хотите только по клавишам то пропускайте этот пункт и читайте далее! //============================== SetTimer("gateactClose", 10000, 0); gatetimeract = SetTimer("gateactClose", 10000, 0); //Таймер открытия через сколько ворота закроются (gateactekos == переменная которой мы обозначили объект в public OnGameModeInit,10000 == время через сколько закроются ворота(указываются в миллисекундах) SendClientMessage(playerid, COLOR_RED," Ворота открылись. Он будет закрыт через 10 секунд."); //отсылка игроку сообщение о том что гараж открылся (playerid == ид игрока для которого будет выполнятся эта функция (в данном случае для всех), COLOR_RED == это тот самый #define которым мы заменяли хекс-код = 0xAA3333AA *это как бы цвет, " ворота открылись. Они будут закрыты через 10 секунд." == содержимое самого сообщения ). } } return 1; } Далее ставим это в конец самого мода (то есть создаём новый паблик): Code public gateactClose (playerid) { MoveObject(gateactekos, 1810.90 -1893.91, 15.2, 2); // куда будут двигаться ворота (gateactekos == переменная которой мы обозначили объект в public OnGameModeInit, 1810.90 -1893.91, 15.2 == координаты Y,X,Z куда двигаются ворота, 2 == скорость движения ворот (2 оптимальная)) KillTimer(gatetimeract);// убивает таймер return 1; } И так мы закончили творение ворот *полуавтоматических , но я написал что скажу как создать открытие на кнопке а закрытие на клавише/автоматически .Так вот открытие по клавише мы зделали и закрытие автоматически тоже перейдем к второй части урока :
Открытие и закрытие ворот по клавише. Здесь уже очень легко : В Code public OnPlayerCommandText(playerid, cmdtext[]) Вставим Code if(!strcmp(cmdtext, "/aopen", true)) { if(PlayerInfo[playerid][pLeader] == 11 || PlayerInfo[playerid][pMember] == 11) { if (PlayerToPoint(15, playerid,350.36099243164,-1786.1748046875,5.3265557289124)) { MoveObject(gateactekos, 357.92443847656,-1785.8171386719,6.1829776763916, 2); SetTimer("gateactClose", 10000, 0); gatetimeract = SetTimer("gateactClose", 10000, 0); SendClientMessage(playerid, COLOR_RED," Ворота открылись. Он будет закрыт через 10 секунд."); } } return 1; } Теперь в Code public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) Пихаем это : Code { if (newkeys == 1024) { OnPlayerCommandText(playerid, /aopen)
} { if(newkeys == 32) { MoveObject(gateactekos, 1810.90 -1893.91, 15.2, 2); } } } Code /*Вот клавиши и их действия: 1 - Действие 2 - Присесть 4 - Огонь 8 - Спринт 16 - Вторичная атака 32 - Прыжок 64 - Смотреть в право 128 - Ручной тормоз 256 - Смотреть в лево 512 - Субмиссия(в машине), Смотреть назад(пешком) 1024 - Идти шагом 2048 - Аналог вверх (по умолчанию 8 ) 4096 - Аналог ввниз (по умолчанию 2) 8192 - Аналог влево (по умолчанию 4) 16384 - Аналог вправо (по умолчанию 6) 65408 - Вперёд 128 - Назад 65408 - Влево 128 - Вправо*/
From Russia With Love!
|
|
|
|