Последние Файлы GTA 4
Последние Файлы GTA-MP
Реклама
[Tutorial] Кликабельные текстдравы
Andrejs Дата: Воскресенье, 25.03.2012, 00:21 | Сообщение # 1
Группа:
I'm V.I.P.
Сообщений: 1801
Награды:
37
Город: Tallinn
Репутация:
2282
Замечания:
20%
Статус:
В общем, так как сейчас вышло уже пару RC версий новой версии я решил в них разобраться, что и как, ну и поделиться с вами. Может кому будет полезно. Сразу скажу, статью писал не я, это перевод статьи с офф. форума Оригинальная статья: http://forum.sa-mp.com/showthread.php?t=328267 Начало Возможность использования кликабельных текстдравов появилась в RC4, так что в первую очередь нам нужна версия не ниже RC4, скачать который вы можете на офф. сайте или файловом архиве сайта В конечном итоге у нас получиться точно также, как на видео ниже Процесс создания самого текстдрава разбирать не будем, проявите фантазию) Ну или в крайней случае просто скопируете всё то, что есть ниже. Скрипт Ниже предоставлен код создания самих текстдравов, вы можете создать свои, а можете использовать эти Code
#include <a_samp> new Text:teleportBox; new Text:teleportLS; new Text:teleportSF; new Text:teleportLV; public OnFilterScriptInit() { print("\n--------------------------------------"); print(" Textdraw teleporting - tut for showing\n how textdraw selecting works"); print("--------------------------------------\n"); teleportBox = TextDrawCreate(320.000000, 143.000000, "~n~Teleport menu~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~_"); TextDrawAlignment(teleportBox, 2); TextDrawBackgroundColor(teleportBox, 255); TextDrawFont(teleportBox, 2); TextDrawLetterSize(teleportBox, 0.500000, 1.000000); TextDrawColor(teleportBox, -1); TextDrawSetOutline(teleportBox, 0); TextDrawSetProportional(teleportBox, 1); TextDrawSetShadow(teleportBox, 1); TextDrawUseBox(teleportBox, 1); TextDrawBoxColor(teleportBox, 255); TextDrawTextSize(teleportBox, 45.000000, 115.000000); teleportLS = TextDrawCreate(320.000000, 180.000000, "Los Santos~n~Airport"); TextDrawAlignment(teleportLS, 2); TextDrawBackgroundColor(teleportLS, 255); TextDrawFont(teleportLS, 2); TextDrawLetterSize(teleportLS, 0.260000, 0.799999); TextDrawColor(teleportLS, -1); TextDrawSetOutline(teleportLS, 0); TextDrawSetProportional(teleportLS, 1); TextDrawSetShadow(teleportLS, 1); teleportSF = TextDrawCreate(320.000000, 205.000000, "San Fierro~n~Airport"); TextDrawAlignment(teleportSF, 2); TextDrawBackgroundColor(teleportSF, 255); TextDrawFont(teleportSF, 2); TextDrawLetterSize(teleportSF, 0.260000, 0.799999); TextDrawColor(teleportSF, -1); TextDrawSetOutline(teleportSF, 0); TextDrawSetProportional(teleportSF, 1); TextDrawSetShadow(teleportSF, 1); teleportLV = TextDrawCreate(320.000000, 230.000000, "Las Venturas~n~Airport"); TextDrawAlignment(teleportLV, 2); TextDrawBackgroundColor(teleportLV, 255); TextDrawFont(teleportLV, 2); TextDrawLetterSize(teleportLV, 0.260000, 0.799999); TextDrawColor(teleportLV, -1); TextDrawSetOutline(teleportLV, 0); TextDrawSetProportional(teleportLV, 1); TextDrawSetShadow(teleportLV, 1); return 1; }
Следующий код нам надо добавить в public OnFilterScriptInit() В конец, но до return 1; Code
TextDrawSetSelectable(teleportBox, false); TextDrawSetSelectable(teleportLS, true); TextDrawSetSelectable(teleportSF, true); TextDrawSetSelectable(teleportLV, true);
Собственно эти функции и делают наши текстдравы кликабельными или нет. А также, во избежании ошибок добавляем код удаления текстдравов в public OnFilterScriptExit() Code
public OnFilterScriptExit() { TextDrawDestroy(teleportBox); TextDrawDestroy(teleportLS); TextDrawDestroy(teleportSF); TextDrawDestroy(teleportLV); return 1; }
Следующим, делаем вызов тексдрава по команде. Код выглядет примерно следующим образом Code
if (!strcmp("/teleport", cmdtext, true)) { TextDrawShowForPlayer(playerid, teleportBox); TextDrawShowForPlayer(playerid, teleportLS); TextDrawShowForPlayer(playerid, teleportSF); TextDrawShowForPlayer(playerid, teleportLV); SelectTextDraw(playerid, 0xA3B4C5FF); return 1; }
Вызов текстдрава сделали, дальше пора добавить действия при клике на текстдрав. Для этого служит public OnPlayerClickTextDraw(playerid, Text:clickedid) В оригинальной статье был ещё не правильный вариант использования, но мы перейдём сразу к правильному, чтобы не терять драгоценное время Код будет выглядеть следующим образом: Code
public OnPlayerClickTextDraw(playerid, Text:clickedid) { if(_:clickedid != INVALID_TEXT_DRAW) { if(clickedid == teleportLS) { SetPlayerPos(playerid, 1630.2030,-2328.9673,13.5469); SetPlayerFacingAngle(playerid, 0.9392); } else if(clickedid == teleportSF) { SetPlayerPos(playerid, -1424.6083, -290.9622, 14.1484); SetPlayerFacingAngle(playerid, 134.9570); } else if(clickedid == teleportLV) { SetPlayerPos(playerid, 1688.7990, 1447.7753, 10.7675); SetPlayerFacingAngle(playerid, 267.3902); } TextDrawHideForPlayer(playerid, teleportBox); TextDrawHideForPlayer(playerid, teleportLS); TextDrawHideForPlayer(playerid, teleportSF); TextDrawHideForPlayer(playerid, teleportLV); CancelSelectTextDraw(playerid); } return 1; }
Суть в том, что функция CancelSelectTextDraw(playerid); вызывает OnPlayerClickTextDraw ещё раз, но уже с параметром clickedid == 65535, что может создать бесконечный цикл, поэтому мы добавили выше проверку на то, что clickedid не равен INVALID_TEXT_DRAW, то есть 65535 Это всё. Теперь можно компилировать, и если вы сделали правильно то всё будет работать. На случай, если у вас что-то не получилось, то я выкладываю готовый ФС с более подробными комментариями. Если этого будет не достаточно - спрашивайте в теме. Скачать PWN
Сообщение отредактировал Andrejs - Воскресенье, 25.03.2012, 00:22
Великс Дата: Воскресенье, 25.03.2012, 00:49 | Сообщение # 2
Мастер джэдай
Группа:
Модераторы
Сообщений: 3931
Награды:
287
Город: Мухосранск
Репутация:
8429
Замечания:
0%
Статус:
Неплохо, да. Сейчас вот рисую менюшку сижу, хочу что нибудь уникальное сделать. Вот что получилось за 15 минут: Естественно без оптимизации, просто накидывал.
[cut=freestyle] ПРИНЕСЛА СОРОКА В РОТЕ ПРИВОРОТ , СВЯЗАЛАСЬ НА ШЕЕ ЛОЗА И БЫЛ ПОЛНЫЙ ПИ**ЕЦ, ОСЕНЬ С ЗИМОЙ, ЛЕТО С ВЕСНОЙ, ГУСЬ С ЛИСОЙ, ЕБ**ИСЬ ВО ТЬМЕ НОЧНОЙ. УЗЕЛ ЗАВЯЗАЛСЯ, ПЕПЕЛ РАЗМЕТАЛСЯ И ЛИСА ЗАБЕРЕМЕНЕЛА. ВМЕСТЕ ВЕК ВЕКОВАТЬ, ПУТУ НЕ РАЗВЯЗАТЬ. ТРАВА ПЕРЕПЛЕТИСЬ, УЗЕЛ ЗАВОРОЖИСЬ. ЛЕНАРУ ДАЙ УМА И ЛЕНУ НА ВЕЛЕ НЕ ОТРАЗИСЬ,ЕБ*СЬ ЕБ*СЬ ЕБ*СЬ © Хасан [/cut]
Сообщение отредактировал velix - Воскресенье, 25.03.2012, 01:00
psycho Дата: Воскресенье, 25.03.2012, 08:40 | Сообщение # 3
16 | 13
Группа:
I'm V.I.P.
Сообщений: 327
Награды:
11
Репутация:
645
Замечания:
20%
Статус:
Круто, а я даже не знал,что такое есть.
Nyawka Дата: Воскресенье, 25.03.2012, 13:42 | Сообщение # 4
Освоившийся
Группа:
I'm V.I.P.
Сообщений: 113
Награды:
0
Город: Киев
Репутация:
131
Замечания:
40%
Статус:
Cпасибо,полезный урок!
FreeCity Дата: Понедельник, 07.05.2012, 04:05 | Сообщение # 5
Новенький
Группа:
Пользователи
Сообщений: 23
Награды:
0
Город: Санкт-Петербург
Репутация:
-3
Замечания:
40%
Статус:
Хороший туториал. Ждём обновление.:)
Fus1 Дата: Понедельник, 07.05.2012, 08:35 | Сообщение # 6
Группа:
Продвинутые
Сообщений: 2704
Награды:
121
Город: Melbourne Australia
Репутация:
3103
Замечания:
0%
Статус:
Quote (FiLE )
Вобщем текстдравы как-бы друг друга перекрывают... если ставить нескольно растянутых тексдравов рядом, и навести на один из них то все они выделяются
у меня тоже самое было, и на серверах где к примеру всё нормально - у меня так. Это из-за большого или наоборот маленького расширения монитора.
_trane_ Дата: Понедельник, 07.05.2012, 16:25 | Сообщение # 7
Постоялец
Группа:
Продвинутые
Сообщений: 400
Награды:
13
Город: Либерти-Сити
Репутация:
784
Замечания:
40%
Статус:
[off]странно что ты Андрюш не взял денег за этот урок. Ты ж барыга по жизни[/off]
Liberty City Полезно ТЕБЕ , нубота Map editor U:MP/VC2SA\LC2SA ZiGGi blog
Fus1 Дата: Понедельник, 07.05.2012, 17:08 | Сообщение # 8
Группа:
Продвинутые
Сообщений: 2704
Награды:
121
Город: Melbourne Australia
Репутация:
3103
Замечания:
0%
Статус:
Quote (_trane_ )
странно что ты Андрюш не взял денег за этот урок. Ты ж барыга по жизни
не суди сам и не судим будешь.
Великс Дата: Понедельник, 07.05.2012, 19:32 | Сообщение # 9
Мастер джэдай
Группа:
Модераторы
Сообщений: 3931
Награды:
287
Город: Мухосранск
Репутация:
8429
Замечания:
0%
Статус:
Quote (Fus1 )
у меня тоже самое было, и на серверах где к примеру всё нормально - у меня так. Это из-за большого или наоборот маленького расширения монитора.
Quote (FiLE )
ясно, думаю исправят разработчики, а то это не дело
TextDrawTextSize и не парьте себе мозг.
[cut=freestyle] ПРИНЕСЛА СОРОКА В РОТЕ ПРИВОРОТ , СВЯЗАЛАСЬ НА ШЕЕ ЛОЗА И БЫЛ ПОЛНЫЙ ПИ**ЕЦ, ОСЕНЬ С ЗИМОЙ, ЛЕТО С ВЕСНОЙ, ГУСЬ С ЛИСОЙ, ЕБ**ИСЬ ВО ТЬМЕ НОЧНОЙ. УЗЕЛ ЗАВЯЗАЛСЯ, ПЕПЕЛ РАЗМЕТАЛСЯ И ЛИСА ЗАБЕРЕМЕНЕЛА. ВМЕСТЕ ВЕК ВЕКОВАТЬ, ПУТУ НЕ РАЗВЯЗАТЬ. ТРАВА ПЕРЕПЛЕТИСЬ, УЗЕЛ ЗАВОРОЖИСЬ. ЛЕНАРУ ДАЙ УМА И ЛЕНУ НА ВЕЛЕ НЕ ОТРАЗИСЬ,ЕБ*СЬ ЕБ*СЬ ЕБ*СЬ © Хасан [/cut]
Fus1 Дата: Понедельник, 07.05.2012, 19:41 | Сообщение # 10
Группа:
Продвинутые
Сообщений: 2704
Награды:
121
Город: Melbourne Australia
Репутация:
3103
Замечания:
0%
Статус:
Quote (velix )
TextDrawTextSize и не парьте себе мозг.
и зачем мне уменьшать размер textdraw'a если я хочу чтобы у него был размер который мне нужен)?
Великс Дата: Понедельник, 07.05.2012, 19:45 | Сообщение # 11
Мастер джэдай
Группа:
Модераторы
Сообщений: 3931
Награды:
287
Город: Мухосранск
Репутация:
8429
Замечания:
0%
Статус:
Fus1 , этой функцией ты определяешь пределы текстдрава по осям X, Y. Цитирую: Quote
Change the size of a textdraw (box if TextDrawUseBox is enabled and/or clickable area for use with TextDrawSetSelectable ).
[cut=freestyle] ПРИНЕСЛА СОРОКА В РОТЕ ПРИВОРОТ , СВЯЗАЛАСЬ НА ШЕЕ ЛОЗА И БЫЛ ПОЛНЫЙ ПИ**ЕЦ, ОСЕНЬ С ЗИМОЙ, ЛЕТО С ВЕСНОЙ, ГУСЬ С ЛИСОЙ, ЕБ**ИСЬ ВО ТЬМЕ НОЧНОЙ. УЗЕЛ ЗАВЯЗАЛСЯ, ПЕПЕЛ РАЗМЕТАЛСЯ И ЛИСА ЗАБЕРЕМЕНЕЛА. ВМЕСТЕ ВЕК ВЕКОВАТЬ, ПУТУ НЕ РАЗВЯЗАТЬ. ТРАВА ПЕРЕПЛЕТИСЬ, УЗЕЛ ЗАВОРОЖИСЬ. ЛЕНАРУ ДАЙ УМА И ЛЕНУ НА ВЕЛЕ НЕ ОТРАЗИСЬ,ЕБ*СЬ ЕБ*СЬ ЕБ*СЬ © Хасан [/cut]
Fus1 Дата: Понедельник, 07.05.2012, 19:48 | Сообщение # 12
Группа:
Продвинутые
Сообщений: 2704
Награды:
121
Город: Melbourne Australia
Репутация:
3103
Замечания:
0%
Статус:
Quote (velix )
Fus1, этой функцией ты определяешь пределы текстдрава по осям X, Y. Цитирую:
Опа! Интересно. Спасибо PS: пошёл тестить
Великс Дата: Понедельник, 07.05.2012, 19:49 | Сообщение # 13
Мастер джэдай
Группа:
Модераторы
Сообщений: 3931
Награды:
287
Город: Мухосранск
Репутация:
8429
Замечания:
0%
Статус:
[off] Fus1 , я когда себе интро делал тоже сталкивался с этой проблемой, но потом решил этой функцией)[/off]
[cut=freestyle] ПРИНЕСЛА СОРОКА В РОТЕ ПРИВОРОТ , СВЯЗАЛАСЬ НА ШЕЕ ЛОЗА И БЫЛ ПОЛНЫЙ ПИ**ЕЦ, ОСЕНЬ С ЗИМОЙ, ЛЕТО С ВЕСНОЙ, ГУСЬ С ЛИСОЙ, ЕБ**ИСЬ ВО ТЬМЕ НОЧНОЙ. УЗЕЛ ЗАВЯЗАЛСЯ, ПЕПЕЛ РАЗМЕТАЛСЯ И ЛИСА ЗАБЕРЕМЕНЕЛА. ВМЕСТЕ ВЕК ВЕКОВАТЬ, ПУТУ НЕ РАЗВЯЗАТЬ. ТРАВА ПЕРЕПЛЕТИСЬ, УЗЕЛ ЗАВОРОЖИСЬ. ЛЕНАРУ ДАЙ УМА И ЛЕНУ НА ВЕЛЕ НЕ ОТРАЗИСЬ,ЕБ*СЬ ЕБ*СЬ ЕБ*СЬ © Хасан [/cut]
Andrejs Дата: Среда, 09.05.2012, 00:53 | Сообщение # 14
Группа:
I'm V.I.P.
Сообщений: 1801
Награды:
37
Город: Tallinn
Репутация:
2282
Замечания:
20%
Статус:
[off] FiLE , сказать вам честно, я сам вообще не пробовал то, что написано в этом туториале [/off]
Awm Дата: Среда, 09.05.2012, 12:08 | Сообщение # 15
Группа:
I'm V.I.P.
Сообщений: 3235
Награды:
55
Город: Tallinn
Репутация:
1661
Замечания:
0%
Статус:
funkcija voobshe za4et, kak pojavilas srazu zajuzal o4en prosto delat ix)
"Life is hard... life is harder if you're stupid." - John Wayne