Создание БАР'a с минимальным кол-вом TextDraw'ов - Форум Cheat-Master.ru
  • Страница 1 из 1
  • 1
Модератор форума: Phoenixxx_Czar, Getbackthere, [CM]OlegEhtler  
Создание БАР'a с минимальным кол-вом TextDraw'ов
ExPRO Дата: Четверг, 15.05.2014, 17:13 | Сообщение # 1
Боец
Сообщений: 181
Статус: Offline
Всем привет! В данной статье постараюсь подробно обьяснить как создать бар с использованием минимального кол-ва текстдравов.

Тема посвящается исключительно построению БАР'ов.

В примере рассмотрим бар из 6 ТД:
Многие сейчас подумают что бар из 6 ТД наглядно выглядит так:

онлайн 1 игрок = 6 текстдравов
онлайн 500 игроков = 3000 текстдравов

Да, цифры не маленькие... даже при онлайне 50 чел. (300 ТД), но можно с легкостью добиться таких результатов:

1 игрок = 6 текстдравов
500 игроков = 6 текстдравов

как вы поняли всего 6 ТД на 500 игроков, звучит как бред, но поспешных выводов делать не стоит, прочтите все до конца.

начнем "построение" такого бара.

Обращаюсь к тру оптимизаторам! Это лишь показательный код, построен как можно проще для лучшего усвоения.

ВАЖНО:
Тотуриал для тех кто хоть какое-то представление имеет о следующих вещах:
- как создать текстдрав
- как cоздать бар из текстдравов
- как узнать координаты "пустого"/"полного" бара

повтаряюсь: Тема посвещается исключительно построению БАР'ов.

Думаю обьяснение как создавать текстдравы здесь не умесно. Если Вы совершенно не умеете работать с ТД, ищите, подходящую для Вас, обучающую статью.

ШАГ 1:
Создаем бар, на вкус и цвет естественно, я использовал данный редактор TextDraw Editor by Zamaroht (Support Textures by Maku)(http://samp-scripts.com/post/6747/[0.3d]_Zamaroht's_Textdraw_Editor_v1.0_Modified_by_MakuPL_-_Support_Texture/MakuPL/filterscript/other) и у меня получился код.



текстдравы созданы, глубоко вдохнем и движемся далее

ШАГ 2:
Определение границ бара.
под определение границ я имею в виду координаты пустой бар/заполненний бар, в моем случае min = 496.0 max = 603.0
расказывать откуда я взял эти числа (496/603) не буду, тк выше написано

Код
Тотуриал для тех кто хоть какое-то представление имеет о следующих вещах:


Теперь давайте подумаем для чего мы будем его использовать и как? Ничего в голову не приходит поэтому....
для примера я создам переменную для каждого игрока (box_size [MAX_PLAYERS])
и в паблике OnPlayerUpdate (playerid) буду прибавлять к ней playerid+1(+1 что бы у игрока с идом 0 бокс "заполнялся")
как только box_size [playerid] будет более 200 сбросим значение на 0, тем самым бар будет "заполняться" от минимума к максимуму и автоматически "опустошаться"

будет как вы поняли:
box_size [playerid] = 0 пустой бар
box_size [playerid] = 200 максимально заполненный бар

степень заполненности бара будем высчитывать путем умножения и сложения

Код
496.0 + ( float( box_size [playerid])*limit_size);

вернемся к нашей непонятной переменной limit_size
сейчас у вас в голове вопрос:
почему мы будем умножать box_size [playerid] на limit_size если она = 0?

почему же все именно так.... обьясняю:
тк я сразу решил что box_size [playerid] не будет превышать 200, можно всего раз узнать и установить значение переменной
limit_size при создании текстдрава. Как это сделать!? Очень просто!

Код
limit_size = (мак. координата - мин. координата) / макс. значение box_size;

в моем случае:
Код
limit_size = (603.0-496.0)/float(200);  
или:  
limit_size = (603.0-496.0)/200.0;


как кому удобнее.

Теперь вся суть темы.

TextDrawTextSize - устанавливает размер бокса, естественно все знают об этом, и при попытке изменить размер бокса
уже созданного ТД путем TextDrawTextSize (TDid, x, y); козалось бы ничего не происходит, в отличии от TextDrawSetString при использовании этой функции ТД мигом "изменяется" а вот TextDrawTextSize "молчит". Нет, это совсем ни так.
На самом деле размер бокса изменяется, просто чтобы это увидеть нужно комбинировать две функции
TextDrawTextSize и TextDrawShowFor(Player/All) с последовательностью как я и написал, привожу пример с нашим баром, который мы уже так долго пытаемся создать.

перейдем к паблику OnPlayerUpdate (playerid) в котором будем заполнять бар

Код
public OnPlayerUpdate (playerid)  
{  
     //limit_size уже имеет нужное значение и не нудно ничего делить и умножать,  
     //это повышает скорость выполнения кода  
     box_size [playerid] += playerid+1; //прибавляем значение  
     if (box_size [playerid] > 200) box_size [playerid] = 0; //если привышен лимит сбрасываем  
     TextDrawTextSize (Textdraw6, 496.0+( float( box_size [playerid])*limit_size), 0.0); //узнаем коорд x  
     TextDrawShowForPlayer (playerid, Textdraw6); // показываем "обновленный" текстдрав  
     return 1;  
}  


box_size [playerid] += playerid+1 для того чтобы убедить Вас что все работает правильно, зайдите на сервер с другом и проверьте.
Вы думаете что если на сервере 2 и более игрока ТД будет "прыгать"!? Нет, не будет. Я это уже доказывал в небольшом споре и гарантирую безупречную работу.

Вот так мы получили бар в 6 ТД для любого онлайна.

Вот полный код в виде FS


Надеюсь свою мысль до Вас сумел донести.

Автор: LINKINPARK
Выложил: ExPRO для www.cheat-master.ru


>>> My sa:mp server 176.32.39.43:7777 <<<
  • Страница 1 из 1
  • 1
Поиск: