08:26
ОбновитьСмайлыУправление мини-чатом
МИНИ-ЧАТ
Главная страница!

 



 
          





Рекомендуем:





Последние Файлы GTA 4 Последние Файлы GTA-MP Реклама
Скрипт GTA 4 элементы Watch... 07.09.2014
Ferrari 360 Spider [EPM con... 13.12.2013
Porsche Cayenne Turbo 2012 ... 13.12.2013
Shelby Terlingua Mustang v1... 13.12.2013
Hamann Lamborghini Gallardo... 27.10.2013
[GM] The Big PEN1:LS v2.00 ... 04.12.2017
Dgun (AvnanceRP,SampRP,Dimo... 19.03.2016
SAMP скрипт SX Events (MySQ... 03.03.2016
Карта ASL мэрия для SAMP се... 03.03.2016
AIM для SA-MP 0.3.7 22.02.2016
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: Dima-kun  
Форум SAMP о мультиплеерах для GTA. »   » Wiki-Samp-Rus » [Tutorial] Кликабельные текстдравы
[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 минут:


Естественно без оптимизации, просто накидывал.

Прикрепления: 1797719.jpg (111.4 Kb)


[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%
Статус:
Круто, а я даже не знал,что такое есть. :D
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_)
странно что ты Андрюш не взял денег за этот урок. Ты ж барыга по жизни

не суди сам и не судим будешь. yes

ВеликсДата: Понедельник, 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. Цитирую:

Опа! Интересно. Спасибо :D
PS: пошёл тестить :D

ВеликсДата: Понедельник, 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, сказать вам честно, я сам вообще не пробовал то, что написано в этом туториале crazy [/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
Форум SAMP о мультиплеерах для GTA. »   » Wiki-Samp-Rus » [Tutorial] Кликабельные текстдравы
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:





 


 


 
Хостинг от uCoz samp.at.ua