Всем привет. На форуме этом я в 1й раз. Смотрел многие уроки и половина из них - это вырезки. Зачем вырезать нубо-код из всяких RLSок? Ну не об этом. Видел здесь 1 тему, человек искал телепорт по пикапу и я постараюсь донести до вас данный функционал.
И так... Будем использовать несколько готовый pawn функций: 1. CreatePickup 2. IsPlayerInRangeOfPoint 3. OnPlayerKeyStateChange
Для начала ко всем вашим define вставим макрос, который сокращает длинное слово CreatePickup:
Код
#define cPickup CreatePickup
Далее создадим переменную наших пикапов:
Код
new testpick[3];
После чего мы создаем наши пикапы, но перед их созданием я хочу некоторым начинающим юзерам сделать подсказку: - Не нужно вставлять пикапы в OnGameModeInit, т.к. у вас будет путаница. Мы воспользуемся функцией stock, которая нам поможет засунуть все пикапы в отдельную назовем так функцию, которую после мы выведем в OnGameModeInit. Некоторые спросят: - А почему не сделать через public? - Потому что в public обычно вставляется функционал, который имеет таймер.
Спускаемся в конец мода и создаем наш stock:
Код
stock LoadPick()// stock название(стандартные функции playerid и т.д.) {// открываем
}// закрываем
И так... Создаем наши пикапы, записывая их в наш созданный stock Load...:
Поясню все по порядку: 1. testpick[0] - мы объявляем наш пикап через переменную, на которую после будет писать функционал. 2. cPickup - используем наш макрос, который воспроизводит CreatePickup 3. id pickup - id пикапа 4. style pickup - тип/стиль пикапа, все называют по-разному 5. x,y,z - координаты пикапа 6. virtual world - номер вирт мира, если есть. Если его нет, то ничего не ставим, либо же ставим 0
Далее идем в паблик под наименованием OnPlayerPickUpPickup. В нем мы выведем подсказку для игрока, когда он встает на пикап.
Код
new pic = pickupid; // сокращаем pickupid if(pic == testpick[0] && testpick[1] && testpick[2]) // if как все знают - оператор условия. в него вписываются условия. на данный момент мы в условие записали выполнение какого-либо действия когда встали на пикап { // открываем нашу функцию для условия GameTextForPlayer(playerid,"~w~PRESS ~g~LALT",5000,5); // объявляем функционал, который будет выполняться. в моем случае - вывод текста "PRESS LALT" на экран игрока } // и так же закрываем
Мы почти подошли в конец данного урока. Теперь нам нужно выполнить телепорт по нажатию alt'a на пикапе, а т.е. в его точке Идем в OnPlayerKeyStateChange и вставляем:
Код
if(newkeys & 1024 && IsPlayerInRangeOfPoint(playerid,2, x,y,z)) // и так... здесь я много расписывать не буду... 1024 - id клавиши alt, IsPlayerInRange....(Проверяет находится ли игрок в указанном радиусе от точки), 2 - радиус, x,y,z - позиция пикапа, на котором будет выполнена функция { SetPlayerPos(playerid, x,y,z); // само выполнение функции, в моем случае x,y,z - телепорт по координатам SetPlayerInterior(playerid, 0); SetPlayerVirtualWorld(playerid, 0); } if(newkeys & 1024 && IsPlayerInRangeOfPoint(playerid,2, x,y,z)) { SetPlayerPos(playerid, x,y,z); SetPlayerInterior(playerid, 0); SetPlayerVirtualWorld(playerid, 0); } if(newkeys & 1024 && IsPlayerInRangeOfPoint(playerid,2, x,y,z)) { SetPlayerPos(playerid, x,y,z); SetPlayerInterior(playerid, 0); SetPlayerVirtualWorld(playerid, 0); }
Ну вроде бы все) А чуть ли не забыл... В OnGameModeInit вставляем название нашего стока:
Код
LoadPickup();
Ссылки к этому уроку для новичков: http://wiki.sa-mp.com/wiki/CreatePickup_RU http://wiki.sa-mp.com/wiki/IsPlayerInRangeOfPoint_RU http://wiki.sa-mp.com/wiki/SetPlayerPos_RU http://wiki.sa-mp.com/wiki/GameTextForPlayer http://wiki.sa-mp.com/wiki/GameTextForAll [url]http://vk.com/ability.news[/url] [b]Готовность мода - 1%[/b]