XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Барахолка
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
LordSerga

offline
Опыт: 3,809
Активность:
TextTagSys - Система прикрепления текста к юниту
TextTagSys - эта система прикрепляет плавающий текст (TextTag) к юниту на указанное время. Плавающий текст так же можно указать в функции TextTag.
function TextTag takes unit u, real time, string s returns nothing
НазваниеОписание
uэто юнит, над которым будет прикреплен текст
timeуказанное время в секундах 0-20 сек
sприкрепляемый текст
Примечания
Текст можно разукрашивать через специальные коды типа |cffff0000 - красный, |cffffcc00 - желтый и тд.
Размер текста регулируется здесь
call SetTextTagText(data.tt,s,12*0.023/10) // 12 - размер текста, можно ставить и другие значения.
Важно
Так же удаляются все прикрепленные тексты к юниту u, когда юнит u умирает.
Можно ускорить/уменьшить FPS текста или же изменить количество срабатывания триггера Timer за секунду. Для этого изменяем параметр Period на нужный вам (0.01-0.05, но можно и 0.05-0.10)
private real Period=.04
Требования для установки системы TextTagSys
JNGP+VJASS, скачать можно здесь: xgm.ru/p/wc3/jass_new_gen_pack-exp
Внимание - Обновление
Скачать: xgm.ru/forum/attachment.php?attachmentid=69868&stc=1
Перевёл систему из vjass в простой jass но с использованием HeshTable.
Плюсы
  • код короче
  • так же легкий перенос
  • vjass не требуется
Внимание! Можно не скачивать карту с примером, а сразу скопировать код и вставить в самый верх использования jass's.
» код (on HashTable)
function TextTagSysAction takes nothing returns nothing
    local timer t=GetExpiredTimer()
    local unit u=LoadUnitHandle(udg_Hash,GetHandleId(t),0)
    local texttag tt=LoadTextTagHandle(udg_Hash,GetHandleId(t),1)
    local real max=LoadReal(udg_Hash,GetHandleId(t),2)
    local real count=LoadReal(udg_Hash,GetHandleId(t),3)
    if count<=max and GetUnitState(u,UNIT_STATE_LIFE)>.405 then
        set count=count+1
        call SetTextTagPos(tt,GetUnitX(u),GetUnitY(u),0)
        call SaveReal(udg_Hash,GetHandleId(t),3,count)
    else
        call FlushChildHashtable(udg_Hash,GetHandleId(t))
        call DestroyTextTag(tt)
        call DestroyTimer(t)
    endif
endfunction

function TextTag takes unit u, real time, string s returns nothing
    local texttag tt
    local timer t
    if udg_Hash==null then
        set udg_Hash=InitHashtable()
    endif
    if s!="" and time!=0 and u!=null and time<20. then
        set t=CreateTimer()
        set tt=CreateTextTag()
        call SetTextTagText(tt,s,12*0.023/10)
        call SetTextTagPos(tt,GetUnitX(u),GetUnitY(u),0)
        call SetTextTagVelocityBJ(tt,128,90)
        call SaveUnitHandle(udg_Hash,GetHandleId(t),0,u)
        call SaveTextTagHandle(udg_Hash,GetHandleId(t),1,tt)
        call SaveReal(udg_Hash,GetHandleId(t),2,R2I(time*25))
        call SaveReal(udg_Hash,GetHandleId(t),3,0)
        call TimerStart(t,.04,true,function TextTagSysAction)
    endif
endfunction
Прикрепленные файлы
Тип файла: w3x TextTagSys.w3x (18.9 Кбайт, 78 просмотров )
Тип файла: w3x TextTagSysOnHashTable.w3x (18.9 Кбайт, 59 просмотров )

Отредактировано LordSerga, 12.07.2010 в 03:59.
Старый 10.07.2010, 16:25
MaHBe

offline
Опыт: 5,910
Активность:
Подобное уже делал war-cry. Тебе еще советую сделать вечное прикрепление к юниту.Код пойду гляну)
Старый 10.07.2010, 16:27
LordSerga

offline
Опыт: 3,809
Активность:
Я могу сделать так, когда указываешь время прикрепления 0, то текст прикрепляется навсегда.
Если юнит мертв, то текст исчезает до воскрешения юнита.
Старый 10.07.2010, 16:29
MaHBe

offline
Опыт: 5,910
Активность:
Цитата:
Сообщение от LordSerga
Я могу сделать так, когда указываешь время прикрепления 0, то текст прикрепляется навсегда.
Если юнит мертв, то текст исчезает до воскрешения юнита.

Да, так и сделай)А еще сделай без вжасс'а версию.
Старый 10.07.2010, 16:30
LordSerga

offline
Опыт: 3,809
Активность:
Без V-jass тоже делать буду, но не сейчас) Сделал наработку, пока отдыхал от Доты и тд.
Да и уже много своих наработок с Vjass перетащил на jass.
В ближайшее время планирую изучить хешь, так что возможно переедем не на jass, а на хешь =)
Старый 10.07.2010, 16:33
Windrunner
Верь мне!
offline
Опыт: 4,565
Активность:
LordSerga, эм ты врятле без хеша на жассе сделаешь=)
Если только не юзать свои структуры=)
Старый 10.07.2010, 16:38
LordSerga

offline
Опыт: 3,809
Активность:
Windrunner:
LordSerga, эм ты врятле без хеша на жассе сделаешь=)
Если только не юзать свои структуры=)
На обычном коде сделаю, но с применением хеш-таблиц, тоесть будет чистый джас, который понятен даже обычному World Edit's.
Старый 10.07.2010, 16:56
agentex

offline
Опыт: 34,834
Активность:
lol? не выдумывайте, для этого не нужен ни хеш ни вджас. делается 2 массивами и 1 таймером.
Старый 10.07.2010, 17:07
LordSerga

offline
Опыт: 3,809
Активность:
Ну я знаю что можно сделать через просто jass.
А можно сделать и через 1 импортируемую переменную, типа HeshTable.
Я щас hashtable сам изучаю, так что посмотрю как буду делать)
Старый 10.07.2010, 17:14
agentex

offline
Опыт: 34,834
Активность:
само по себе использование хеша добавляет ограничение на работу карты только с 1.24 версии. поэтому я например его не юзаю
Старый 10.07.2010, 17:32
Windrunner
Верь мне!
offline
Опыт: 4,565
Активность:
agentex, ну без хеша передавать данные между таймерами затруднительно
Старый 10.07.2010, 23:22
LordSerga

offline
Опыт: 3,809
Активность:
Обновление темы, добавил систему без использования vjass, но с использованием HashTable.
Так же добавлен код, позволяющий не скачивать карту, где использована система HashTable.
Старый 11.07.2010, 14:53
agentex

offline
Опыт: 34,834
Активность:
Windrunner, ты не понял сути. передавать ничо не надо) есть таймер, есть цикл в нем. проходишся по масиву юнитов перемещаеш текстаги хранящиеся в паралельном масиве в новую позицию юнита. это будет не медленней чем допустим 1 таймер для каждого юнита)
Старый 11.07.2010, 19:05
LordSerga

offline
Опыт: 3,809
Активность:
agentex:
само по себе использование хеша добавляет ограничение на работу карты только с 1.24 версии. поэтому я например его не юзаю
Кто играет на патче меньше 1,24? =О Если такой найдётся то только в гарене.
Да и вообще пусть в гарене сделают ограничение на патч, на последний. Вон - в Украине сделали ограничение по 1,24е. А нашим Русским на всё пофигу.
Старый 12.07.2010, 04:02
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
LordSerga, тоже самое, что делать программу, которая будет работать только в Windows, есть ещё как минимум MacOS и Linux.
Если получается сделать что-то без извращений, то не стоит лишать совместимости свою карту с ранними версиями игры.
Старый 12.07.2010, 04:06
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
К тому же у тебя утечки в коде :)
Старый 12.07.2010, 08:26
LordSerga

offline
Опыт: 3,809
Активность:
bee где утечки? О_О
Старый 19.07.2010, 16:12
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 19:37.