Сейчас 22:58:24 Четверг, 28 ноября, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
[Вопрос] Floating Text (texttag)
FatalBladeДата: Пятница, 30 Сентября 2011, 19:40:39 | Сообщение # 1
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
У меня есть скилл Suffer, который при активации накапливает урон. При накопление максимального урона, урон перестаёт накапливаться пока:
1) - Герой не заюзает спелл Unleash, который наносит столько урона сколько накопил герой
2) - Время действия спелла Suffer не закончится (60 секунд)
3) - Герой не умрёт

Когда герой накапливает максимальное количество урона, нужно что бы над героем появился текст "UNLEASH!!!", и плавал над ним, пока не произойдут 3 выше-написанных события.

Я могу сделать триггер, с событием например 0.05 секунд, который будет работать постоянно, и циклом проверять накопленный урон всех героев тип которых Мясник. Если накопленный урон больше максимального, то создавать texttag над юнитом, и тут же его удалять. Таким образом текст будет плавать. Но я не хочу так делать. Я стараюсь избегать триггеров с событием малого периода, темболее таких которые работают ПОСТОЯННО, и помимо всего этого в этом триггере есть цикл который каждый 0.05 секунд что то проверяет (if/then)

Есть ещё вариант - глобалки. И не массив, а именно 10 переменных типа real. Есть триггерное событие которое фиксирует реальное число, которое НЕ СОСТОИТ в массиве. Но это 10 триггеров и 10 глобалок...

Есть другие варианты это реализовать?




Сообщение отредактировал FatalBlade - Пятница, 30 Сентября 2011, 19:41:39
 

oleg_best_olegДата: Пятница, 30 Сентября 2011, 21:15:11 | Сообщение # 2
Группа: Заблокированные
Сообщений: 1726
Награды: 0
Репутация: 654
Блокировки:
Quote (FatalBlade)
Я стараюсь избегать триггеров с событием малого периода

так делай не 0.05 сек., а 0.20, 0.25, 0.33, 0.45, 0.50, лагов меньше будет)
 

FatalBladeДата: Пятница, 30 Сентября 2011, 21:30:03 | Сообщение # 3
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (oleg_best_oleg)
так делай не 0.05 сек., а 0.20, 0.25, 0.33, 0.45, 0.50, лагов меньше будет)

Но так некрасиво будет, текст будет прыгать, а не плавно двигаться с юнитом.
Я не категорически против таких событий. У меня они часто используются, но это в основном только для отталкивания юнитов спеллом и всё такое, то есть это не триггеры с 0.05 которые работают всю игру. Они включаются на 1-2 секунды и выключаются. Так же и я хочу что бы было, что при накопление урона до максимума, активируется триггер или функция с событие 0.05, и оно работает пока не произойдёт одно из трёх выше указанных мной действий в первом посте.

Есть идеи как это сделать?


 

Mep3aB4uKДата: Суббота, 01 Октября 2011, 03:59:45 | Сообщение # 4
9 уровень
Группа: Проверенные
Сообщений: 1019
Награды: 0
Репутация: 135
Блокировки:
1)Cкил саффер
С:изучает скил
У:изучен - саффер и уровень саффера = 0
Д:добавить соб. в триг2 изучающий юнит получает урона
сохранить хэш(реал) ид(изучающий юнит) 0.
ТРИГ2
С:пусто
У:уровень баффа саффер > 0
if загрузить хэш(реал) ид(триггер юнита) < max(накопленого урона) then
SaveReal(udg_H,id(GetTriggerUnit()),1,LoadReal(udg_H,id,1))
else
call FunctionTextTag()
call SaveTextTagHandle(udg_H,id(timer),1,txt)
call SaveUnitHandle(udg_H,id(timer),2,GetTriggerUnit())
call CreateTimer(timer,.04,true,function ***)
endif
function ****
if LevelBuff>0 and LoadReal(udg_H,id(LoadUnit()) then
call ChangePositionTextTag(LoadTextTag(),GetWidgetX(LoadUnit()),GetWidgetY(LoadUnit()))
else
call destroytexttag
call FlushChildHashtable(udg_H,id(timer))
endif
endfucntion
P.S писал не на трезвую голову..... если поймешь бред выше то остальные вопросы завтра, (если 1 не был вопросом то описал как удобней сделать(мне) и по минимуму глобалок)


Сообщение отредактировал Mep3aB4uK - Суббота, 01 Октября 2011, 04:00:38
 

FatalBladeДата: Суббота, 01 Октября 2011, 10:09:51 | Сообщение # 5
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Я нечё не понял :) Напиши плз потом на трезвую голову. :)
То что ты сделал приведёт к огромным лагам. Каждый раз когда герой получает урон, если накопилось больше максимума, запускается периодический таймер... ))


 

lawsonДата: Суббота, 01 Октября 2011, 11:25:53 | Сообщение # 6
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Юнит использует способность
УСлови: способность == накопление урона
Действия: создать новый триггер: TriggerUnit получает урон

Новый триггер:
Действия загруженая переменная урона = загруженаая переменная урона + GetEventDamage()
сохраняем в хеш перменную урона
Если загруженная переменная урона >= 100 то
Запускаешь таймер
удаляешь триггер(GetTriggeringTrigger())
конец условия


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!


Сообщение отредактировал lawson - Суббота, 01 Октября 2011, 11:26:42
 

FatalBladeДата: Суббота, 01 Октября 2011, 11:29:32 | Сообщение # 7
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
lawson,
У меня уже есть эта способность...
Мне лишь нужен textag который будет светиться когда герой накопил маскимум урона.


 

lawsonДата: Суббота, 01 Октября 2011, 14:18:55 | Сообщение # 8
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Quote (Mep3aB4uK)
call CreateTimer(timer,.04,true,function ***) endif function **** if LevelBuff>0 and LoadReal(udg_H,id(LoadUnit()) then call ChangePositionTextTag(LoadTextTag(),GetWidgetX(LoadUnit()),GetWidgetY(LoadUnit())) else call destroytexttag call FlushChildHashtable(udg_H,id(timer)) endif endfucntion

Только период сделай побольше.


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!


Сообщение отредактировал lawson - Суббота, 01 Октября 2011, 14:19:44
 

Mep3aB4uKДата: Суббота, 01 Октября 2011, 14:20:49 | Сообщение # 9
9 уровень
Группа: Проверенные
Сообщений: 1019
Награды: 0
Репутация: 135
Блокировки:
когда больше максимума урона и буль фалсе
создаешь текстаг
буль = тру
старт таймер
*************Таймер************
проверка на буль = тру
если уровень бафа > 0
В таймере просто меняешь позицию текст тага
иначе
баф = фалсе
*********************************
при приминении абилы
буль = фалсе
 

  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz