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

 



 
        
[SA-MP] Hosted Tab (119)
DieSeL 23.09.2017 14:53
GTA IV Mod Installer (5)
jasper2 23.09.2017 02:50
 





Рекомендуем:
Добавить IP: 95.172.59.51:7777





Последние Файлы 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
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
Скачать GTA SAMP 0.3.7 - Кл... 20.07.2015
Страница 1 из 212»
Модератор форума: 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
Мастер джэдай
Группа: Модераторы
Сообщений: 3925
Награды: 287
Город: Мухосранск
Репутация: 8414
Замечания: 0%
Статус:
Неплохо, да. Сейчас вот рисую менюшку сижу, хочу что нибудь уникальное сделать.

Вот что получилось за 15 минут:


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

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


[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
Группа: Продвинутые
Сообщений: 2705
Награды: 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
Группа: Продвинутые
Сообщений: 2705
Награды: 121
Город: Melbourne Australia
Репутация: 3103
Замечания: 0%
Статус:
Quote (_trane_)
странно что ты Андрюш не взял денег за этот урок. Ты ж барыга по жизни

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

ВеликсДата: Понедельник, 07.05.2012, 19:32 | Сообщение # 9
Мастер джэдай
Группа: Модераторы
Сообщений: 3925
Награды: 287
Город: Мухосранск
Репутация: 8414
Замечания: 0%
Статус:
Quote (Fus1)
у меня тоже самое было, и на серверах где к примеру всё нормально - у меня так.
Это из-за большого или наоборот маленького расширения монитора.

Quote (FiLE)
ясно, думаю исправят разработчики, а то это не дело

TextDrawTextSize и не парьте себе мозг.



[cut=freestyle]
ПРИНЕСЛА СОРОКА В РОТЕ ПРИВОРОТ ,
СВЯЗАЛАСЬ НА ШЕЕ ЛОЗА И БЫЛ ПОЛНЫЙ ПИ**ЕЦ,
ОСЕНЬ С ЗИМОЙ, ЛЕТО С ВЕСНОЙ,
ГУСЬ С ЛИСОЙ, ЕБ**ИСЬ ВО ТЬМЕ НОЧНОЙ.
УЗЕЛ ЗАВЯЗАЛСЯ, ПЕПЕЛ РАЗМЕТАЛСЯ И ЛИСА ЗАБЕРЕМЕНЕЛА.
ВМЕСТЕ ВЕК ВЕКОВАТЬ, ПУТУ НЕ РАЗВЯЗАТЬ.
ТРАВА ПЕРЕПЛЕТИСЬ, УЗЕЛ ЗАВОРОЖИСЬ.
ЛЕНАРУ ДАЙ УМА И ЛЕНУ
НА ВЕЛЕ НЕ ОТРАЗИСЬ,ЕБ*СЬ ЕБ*СЬ ЕБ*СЬ
© Хасан
[/cut]
Fus1Дата: Понедельник, 07.05.2012, 19:41 | Сообщение # 10
Группа: Продвинутые
Сообщений: 2705
Награды: 121
Город: Melbourne Australia
Репутация: 3103
Замечания: 0%
Статус:
Quote (velix)
TextDrawTextSize и не парьте себе мозг.

и зачем мне уменьшать размер textdraw'a если я хочу чтобы у него был размер который мне нужен)?

ВеликсДата: Понедельник, 07.05.2012, 19:45 | Сообщение # 11
Мастер джэдай
Группа: Модераторы
Сообщений: 3925
Награды: 287
Город: Мухосранск
Репутация: 8414
Замечания: 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
Группа: Продвинутые
Сообщений: 2705
Награды: 121
Город: Melbourne Australia
Репутация: 3103
Замечания: 0%
Статус:
Quote (velix)
Fus1, этой функцией ты определяешь пределы текстдрава по осям X, Y. Цитирую:

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

ВеликсДата: Понедельник, 07.05.2012, 19:49 | Сообщение # 13
Мастер джэдай
Группа: Модераторы
Сообщений: 3925
Награды: 287
Город: Мухосранск
Репутация: 8414
Замечания: 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.
Сообщений: 3236
Награды: 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 из 212»
Поиск:





 


 


 
Хостинг от uCoz SAMP-RUS.COM