 |
|
 |
|
|
|
Последние Файлы GTA 4 |
Последние Файлы GTA-MP |
Реклама |
|
|
|
|
|
[FAQ] Создание чекпоинтов
| |
| Dima-kun | Дата: Четверг, 16.12.2010, 23:36 | Сообщение # 1 |
|
Группа:
Разработчики
Сообщений: 6269
Награды: 72
Репутация: 3512
Замечания: 0%
Статус: 
| В данном уроке поговорим о том, как создавать и использовать чекпоинты. Для начала рассмотрим как использовать обычные чекпоинты. Что для этого необходимо: Функции: а)SetPlayerCheckpoint(playerid,Float:x,Float:y,Float:z,Float:size); - Создает маркер на установленном месте, и нужного размера. Параметры: playerid ID игрока, для которого создается чекпоинт Float:x Х-координата Float:y Y-координата Float:z Z-координата Float:size Размер чекпоинта. б)IsPlayerInCheckpoint(playerid) - проверяет, находится ли игрок в чекпоинте Параметры: playerid - IDпроверяемого игрока. в)DisablePlayerCheckpoint(playerid); - Функция прячет чекпоинт и дезактивирует его. Параметры: playerid - ID игрока, для которого чекпоинт должен исчезнуть. Колбэки: OnPlayerEnterCheckpoint(playerid) - срабатывает когда игрок входит в чекпоинт. OnPlayerLeaveCheckpoint(playerid) - срабатывает в момент выхода игрока из чекпоинта Стандартный код использования Чекпоинта: Quote #include <a_samp> public OnPlayerSpawn(playerid) { SetPlayerCheckpoint(playerid,1232.122,1235.552,10.223423,3.0); // Координаты взяты из головы, только для примера. return 1; } public OnPlayerEnterCheckpoint(playerid) { GivePlayerMoney(playerid,500); SendClientMessage(playerid,0x00FF00FF,"-! Чувак, вот тебе 500$"); DisablePlayerCheckpoint(playerid);// Если мы хотим, чтобы чекпоинт после этого исчез, то вставляем эту функцию. return 1; } В данном скрипте при заходе на чекпоинт игроку будет даваться 500$ и чекпоинт исчезнет. Но в большинстве случаев, большинству необходимо, чтобы разные чекпоинты выполняли разные действия. Сейчас разберем следующий скрипт: Quote #include <a_samp> new pCheckpoint[MAX_PLAYERS];// Массив, который будет содержать какое действие должен выполнять действующий чекпоинт. enum // Воспользуемся конструкцей enum для создания состояния чекпонта, т.е. действующий чекпоинт должен давать деньги, или здоровье к примеру { CHECKPOINT_MONEY, CHECKPOINT_HEALTH } public OnPlayerCommandText(playerid,cmdtext[]) // для данного примера, чекпоинты будут вызываться командой { if(!strcmp(cmdtext,"/checkmoney",true)) { SetPlayerCheckpoint(playerid,1232.122,1235.552,10.223423,3.0);// Координаты взяты из головы, только для примера. pCheckpoint[playerid]=CHECKPOINT_MONEY;// Т.е. мы скрипту даем понять, что чекпоинт должен давать деньги return 1; } if(!strcmp(cmdtext,"/checkhealth",true)) { SetPlayerCheckpoint(playerid,1232.122,1235.552,10.223423,3.0);// Координаты взяты из головы, только для примера. pCheckpoint[playerid]=CHECKPOINT_HEALTH;// Т.е. мы скрипту даем понять, что чекпоинт должен давать здоровье return 1; } return 1; } public OnPlayerEnterCheckpoint(playerid) { switch(pCheckpoint[playerid]) { case CHECKPOINT_MONEY: { GivePlayerMoney(playerid,500); SendClientMessage(playerid,0x00FF00FF,"-! Чувак, вот тебе 500$"); DisablePlayerCheckpoint(playerid);// Если мы хотим, чтобы чекпоинт после этого исчез, то вставляем эту функцию. return 1; } case CHECKPOINT_HEALTH: { new Float:health; GetPlayerHealth(playerid,health); SetPlayerHealth(playerid,health+10.0); SendClientMessage(playerid,0x00FF00FF,"-! Чувак, вот тебе не много здоровья"); DisablePlayerCheckpoint(playerid);// Если мы хотим, чтобы чекпоинт после этого исчез, то вставляем эту функцию. return 1; } } return 1; } Но опять же, скрипт будет выполняться, только в момент входа игрока в чекпоинт. Сейчас мы попробуем сделать скрипт, который будет давать либо здоровье либо деньги, по желанию использующего. Quote #include <a_samp> forward inCheckpoint(); new pCheckpoint[MAX_PLAYERS]; // Массив, который будет содержать какое действие должен выполнять действующий чекпоинт. enum // Воспользуемся конструкцей enum для создания состояния чекпонта, т.е. действующий чекпоинт должен давать деньги, или здоровье к примеру { CHECKPOINT_MONEY, CHECKPOINT_HEALTH } public OnGameModeInit() { SetTimer("inCheckpoint",10000,true); // 1 раз в 10 секунд таймер будет выполняться return 1; } public OnPlayerCommandText(playerid,cmdtext[]) // для данного примера, чекпоинты будут вызываться командой { if(!strcmp(cmdtext,"/checkmoney", true)) { SetPlayerCheckpoint(playerid,1232.122,1235.552,10.223423,3.0); // Координаты взяты из головы, только для примера. pCheckpoint[playerid]=CHECKPOINT_MONEY; // Т.е. мы скрипту даем понять, что чекпоинт должен давать деньги return 1; } if(!strcmp(cmdtext,"/checkhealth", true)) { SetPlayerCheckpoint(playerid,1232.122,1235.552,10.223423,3.0); // Координаты взяты из головы, только для примера. pCheckpoint[playerid]=CHECKPOINT_HEALTH; // Т.е. мы скрипту даем понять, что чекпоинт должен давать здоровье return 1; } return 1; } public inCheckpoint() { for(new idx=GetMaxPlayers();idx>=0;--idx) { if(IsPlayerConnected(idx)&&IsPlayerInCheckpoint(idx)) { switch(pCheckpoint[idx]) { case CHECKPOINT_MONEY: { GivePlayerMoney(idx,500); SendClientMessage(idx,0x00FF00FF,"-! Чувак, вот тебе 500$"); return 1; } case CHECKPOINT_HEALTH: { GetPlayerHealth(playerid,health); SetPlayerHealth(playerid,health+10.0); SendClientMessage(idx,0x00FF00FF,"-! Чувак, вот тебе не много здоровья"); return 1; } } } } return 1; } А теперь рассмотрим гоночные чекпоинты. Функции: а)SetPlayerRaceCheckpoint(playerid, type, Float:x, Float:y, Float:z, Float:nextx, Float:nexty, Float:nextz, Float:size) - Создает гоночный чекпоинт Парамерты: playerid - ID для которого чекпоинт длжен появиться type - Тип чекпоинта.0-Обычный, 1-Финишный, 2-Пустой чекпоинт(без стрелок внутри), 3-Воздушный обычный, 4-Воздушный финишный Float:x - X-Координата Float:y - Y-Координата Float:z - Z-Координата Float:nextx - X-Координата следующего чекпоинта, т.е. куда будет показываться стрелка. Float:nexty - Y-Координата следующего чекпоинта, т.е. куда будет показываться стрелка. Float:nextz - Z-Координата следующего чекпоинта, т.е. куда будет показываться стрелка. Float:size - размер(Диаметр чекпоинта) б)DisablePlayerRaceCheckpoint(playerid); - деактивирует и скрывает гоночный чекпоинт Колбэки: в)IsPlayerInRaceCheckpoint(playerid) - Проверяет, находится ли игрок в гоночном чекпоинте а)OnPlayerEnterRaceCheckpoint(playerid) - Срабатывает когда игрок входит в гоночный чекпоинт б)OnPlayerLeaveRaceCheckpoint(playerid) - Срабатывает когда игрок покидает гоночный чекпоинт Простой пример скрипта: Quote #include <a_samp> public OnPlayerSpawn(playerid) { SetPlayerRaceCheckpoint(playerid,2,1233.1222,1456.7442,15.1244,0.0,0.0,0.0,5.0);// Координаты взяты из головы. Координаты следующего чекпоинта 0.0, потому что тип чекпоинта 2, стрелки все равно не будет. return 1; } public OnPlayerEnterRaceCheckpoint(playerid) { SendClientMessage(playerid,0xff0000ff,"It work."); DisablePlayerRaceCheckpoint(playerid); return 1; } Данный скрипт будет выдавать текст ,"It work.", и исчезнет гоночный чекпоинт. Сейчас мы попробуем написать простеший скрипт гонки: Quote #include <a_samp> new race[MAX_PLAYERS]; // Массив будет отслеживать на каком этапе игрок. new Float:Race[3][6]= { {12.1234,15.5112,20.2222,15.2122,9.2322,16.2322}, {15.2122,9.2322,16.2322,18.1233,7.1222,14.0002}, {18.1233,7.1222,14.0002,0.0,0.0,0.0} }; // Массив с этапами гонки, в данномпримере всего 3 этапа, но вы можете сделать больше по своему желанию public OnPlayerCommandText(playerid, cmdtext[]) { if(!strcmp(cmdtext,"/racestart",true)) { race[playerid]=0; SetPlayerRaceCheckpoint(playerid,2,Race[race[playerid]][0],Race[race[playerid]][1],Race[race[playerid]][2],0.0,0.0,0.0,5.0); // Координаты следющего чекпоинта 0.0 потому что тип чекпонита 2. return 1; } return 1; } public OnPlayerEnterRaceCheckpoint(playerid) { race[playerid]++; if(race[playerid]<sizeof(Race))SetPlayerRaceCheckpoint(playerid,0,Race[race[playerid]][0],Race[race[playerid]][1],Race[race[playerid]][2],Race[race[playerid]][3],Race[race[playerid]][4],Race[race[playerid]][5],5.0);// А тут присутствуют координаты следующего чекпоинта, потому что тип чекпоинта 0. else if(race[playerid]==sizeof(Race)) DisablePlayerRaceCheckpoint(playerid); return 1; } Вот это собственно все, что я хотел Вам передать.
Мои работы: [INC] Сборник d_includes [LAST],[FS] New Demage Effect,[FS]Авто-Поворотники, [FS]mp3player,[FS] Fun Chat Game,[FS] Car Buy Syst,[FS] Anti-AirBrk,[INC] d_setpos, [GM] Game Move v0.1,[FS+include]Super-Armour [0.3z],[FS + Include] Multi Checkpoints
Сообщение отредактировал Morino_Reigan - Пятница, 17.12.2010, 00:21 |
| |
|
|
| Dima-kun | Дата: Воскресенье, 10.04.2011, 15:19 | Сообщение # 16 |
|
Группа:
Разработчики
Сообщений: 6269
Награды: 72
Репутация: 3512
Замечания: 0%
Статус: 
| [A]Le[X]and[R], таймер+ проверка IsPlayerInRangeOfPoint
Мои работы: [INC] Сборник d_includes [LAST],[FS] New Demage Effect,[FS]Авто-Поворотники, [FS]mp3player,[FS] Fun Chat Game,[FS] Car Buy Syst,[FS] Anti-AirBrk,[INC] d_setpos, [GM] Game Move v0.1,[FS+include]Super-Armour [0.3z],[FS + Include] Multi Checkpoints
|
| |
|
|
| czar19rus | Дата: Среда, 22.06.2011, 13:02 | Сообщение # 17 |
|
Новенький
Группа:
Пользователи
Сообщений: 10
Награды: 0
Город: Абакан
Репутация: 0
Замечания: 0%
Статус: 
| Народ помогите создать гонку с разными чекпоинтами. Например чтобы в гонке сначала были воздушные чп. потом обычные. И в каких файлах это все менять.
|
| |
|
|
| racerpro | Дата: Среда, 12.10.2011, 16:01 | Сообщение # 18 |
|
Новенький
Группа:
Пользователи
Сообщений: 43
Награды: 0
Город: nsk
Репутация: 0
Замечания: 0%
Статус: 
| Спасибо за статью ! Очень познавательная !
|
| |
|
|
| Qenz | Дата: Воскресенье, 23.10.2011, 01:17 | Сообщение # 19 |
|
Новенький
Группа:
Пользователи
Сообщений: 62
Награды: 0
Город: Lityn
Репутация: 32
Замечания: 0%
Статус: 
| Я во не могу понять куда это все вставлять нужно?!
|
| |
|
|
| Axelerator | Дата: Воскресенье, 23.10.2011, 10:59 | Сообщение # 20 |
|
Уверенный в себе
Группа:
I'm V.I.P.
Сообщений: 237
Награды: 2
Город: Омск
Репутация: 159
Замечания: 40%
Статус: 
| Quote (Qenz) Я во не могу понять куда это все вставлять нужно?! Примеры же даны в первом посте =\
|
| |
|
|
| Qenz | Дата: Воскресенье, 23.10.2011, 17:39 | Сообщение # 21 |
|
Новенький
Группа:
Пользователи
Сообщений: 62
Награды: 0
Город: Lityn
Репутация: 32
Замечания: 0%
Статус: 
| Как сделать , что бы когда человек заходил на красный круг(чекопоинт) Он перемещался в интерьер /kfc ? А когда он заходил на чекпонит в интерьере /kfc он выходил обратно на улицу.. Желательно поподробней , что и куда вставлять?! спасибо.
|
| |
|
|
| anonimniy | Дата: Воскресенье, 23.10.2011, 21:10 | Сообщение # 22 |
|
Уверенный в себе
Группа:
I'm V.I.P.
Сообщений: 190
Награды: 1
Город: St.Petersburg
Репутация: 42
Замечания: 0%
Статус: 
| Qenz, Это делается с помощью пикапов и телепортов. Подробнее найдите в поиске.
|
| |
|
|
| Tonny_MontanaRP | Дата: Пятница, 08.06.2012, 15:42 | Сообщение # 23 |
|
Новенький
Группа:
Пользователи
Сообщений: 4
Награды: 0
Город: Мурманск
Репутация: 0
Замечания: 0%
Статус: 
| Кое что взял, спасибо
http://cs5559.userapi.com/u76026322/docs/b597c9524c41/doc107237041_105451475.gif
|
| |
|
|
| tolik_ag | Дата: Понедельник, 06.05.2013, 08:56 | Сообщение # 24 |
|
Новенький
Группа:
Пользователи
Сообщений: 1
Награды: 0
Репутация: 0
Замечания: 0%
Статус: 
| а как сделать с расширением .amx помогите за рание спс
|
| |
|
|
| vla9ik | Дата: Понедельник, 06.05.2013, 23:33 | Сообщение # 25 |
|
Уверенный в себе
Группа:
I'm V.I.P.
Сообщений: 153
Награды: 2
Город: Ярославль
Репутация: 158
Замечания: 0%
Статус: 
| tolik_ag, зайди в павно и нажми на F6. Если будет всё без ошибок, то получишь файл с расширением amx
|
| |
|
|
| Nikitabaz | Дата: Воскресенье, 04.01.2015, 22:50 | Сообщение # 26 |
|
Новенький
Группа:
Пользователи
Сообщений: 1
Награды: 0
Репутация: 0
Замечания: 0%
Статус: 
| Помогите пожалуйста мне нужно в gps вставить чекпоинт и надпись, чтобы жмёшь на неё и появлялся чекпоинт на карте чтобы было понятно куда ехать. Прошу помогите. Надеюсь вы поняли что я хотел сказать)))
|
| |
|
|
|
 |
|
 | |
| |
|