Arti
offline
Опыт:
11,196Активность: |
Реализация спела наподобие пасивы Кунки из Доты
Вообщем после того как юнит нанес урон, стартует таймер и через n сек герою дается абилка. Но проблема в том что если один раз таймер стартонул, то надо что бы это действие не выполнялось, до тех пор пока он не закончится. Но как это сделать муи, без тыщи глобалок не вдупляю. Аля 2 спелл кунки. [+] замечание от Nerevar: Неинформативное название темы
|
03.10.2012, 21:36 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Cosonic5
Моймозггоритогнем
offline
Опыт:
13,584Активность: |
проверять на баф..
да хватит уже копипастить пора что то новое придумывать! |
03.10.2012, 21:42 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Arti
offline
Опыт:
11,196Активность: |
А, забыл сказать, после атаки, спелл сбивается и соответственно баф тоже, по этому так никак не проверишь !
Спелы с хайва тоже баговые к сожалению |
03.10.2012, 21:46 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Sladkoegka
Забыл что хотел...
offline
Опыт:
7,437Активность: |
Arti, привязываешь через хэш таблицу на своего юниту логическую Udar=изначально нет. Когда юнит ударяет ставишь Udar = да и там где запускаешь таймер выставляешь проверку:
Извини что криво объяснил,но делается это примерно так. |
03.10.2012, 21:50 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DimanTOoBS
offline
Опыт:
5,791Активность: |
Arti, там при получении урона проверяется наличие абилки, если абилка есть запускаешь таймер, удаляешь абилку и когда таймер истекает даёшь обратно, в чём тут проблема может быть??? |
03.10.2012, 22:06 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Arti
offline
Опыт:
11,196Активность: |
DimanTOoBS, смотри, юнит ударил, юниту дался скил, таймер запустился. Пока идёт таймер скил нельзя давать юниту. Но тут он бьет ещё раз его способность убирается и получается проверять не на чём. И таймер запускается ещё раз. И так очень много раз. И получается абилки даются и убираются мгновенно почти
Sladkoegka То что ты дал это 1 герой для 1 игрока, а мне надо муи ! |
03.10.2012, 22:41 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DimanTOoBS
offline
Опыт:
5,791Активность: |
Arti, значит, объясняю))
1 триггер Событие: юнит приобрёл способность Условие: способность такая-то Действия: дать спелбук с +атакой и сплешем 2 триггер Событие: юнит атакован/получил урон (как тебе нравится)
Условие: ур. спелбука >= 1 Действия: удалить спелбук, запустить таймер/или юзнуть вейт, вернуть спелбук P.S. только не надо говорить что вейт это гавно и тд, в этой ситуации его можно юзать ибо погрешность его << чем время кд... |
03.10.2012, 22:48 | #7
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Arti
offline
Опыт:
11,196Активность: |
Ну 1 триггер у меня такой: Герой только выучил способность дать ему спел бук
2 триггер такой, только не принимайте близко к сердцу, я над ним експерементировал и возможно что то не вернул назад: ((код jass
unction Trig_RegisterDamage_Conditions takes nothing returns boolean
return GetEventDamage() > 0.00 endfunction function SeaSword_Effect takes nothing returns nothing
local timer t = GetExpiredTimer() local integer h = GetHandleId(t) local unit caster = LoadUnitHandle(udg_Hashtable,h,1) local integer level = LoadInteger(udg_Hashtable,h,2) if (UnitHasBuffBJ(caster, 'B00A') == false ) then
call UnitAddAbility( caster,'A016') call SetUnitAbilityLevel(caster,'A017', level ) call SetUnitAbilityLevel(caster,'A019', level ) call SetUnitAbilityLevel(caster,'A018', level ) endif call DestroyTimer(t)
call FlushChildHashtable(udg_Hashtable,h) set caster = null
set t = null endfunction function Trig_RegisterDamage_Actions takes nothing returns nothing
local unit damaged = GetTriggerUnit() local unit damager = GetEventDamageSource() local integer level = GetUnitAbilityLevel(damager, 'A015') local timer t = CreateTimer() local integer h = GetHandleId(t) if(level > 0) then
call DisplayTextToForce(GetPlayersAll(),GetUnitName(damager)) call UnitRemoveAbility( damager,'A016') call UnitRemoveBuffBJ('B00A',damager) call SaveUnitHandle(udg_Hashtable,h,1,damager)
call SaveInteger(udg_Hashtable,h,2, level ) call SaveInteger(udg_Hashtable,h,2, level ) call TimerStart(t,4,true,function SeaSword_Effect)
set t=null
endif set damaged = null
set damager = null endfunction =========================================================================== function InitTrig_RegisterDamage takes nothing returns nothing set gg_trg_RegisterDamage = CreateTrigger( ) call TriggerAddCondition( gg_trg_RegisterDamage, Condition( function Trig_RegisterDamage_Conditions ) ) call TriggerAddAction( gg_trg_RegisterDamage, function Trig_RegisterDamage_Actions ) endfunction )) |
03.10.2012, 22:53 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Ethernet
Я Impereon
offline
Опыт:
8,529Активность: |
Блин
Код:
|
03.10.2012, 23:07 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Arti
offline
Опыт:
11,196Активность: |
Я хочу отучится от такого способа делать спеллы :( Где циклом надо пробегать всех юнитов, что бы найти подходящего. |
03.10.2012, 23:33 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Ethernet
Я Impereon
offline
Опыт:
8,529Активность: |
Arti, а что в этом способе плохого?
|
04.10.2012, 00:03 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DimanTOoBS
offline
Опыт:
5,791Активность: |
Arti, нашёл через поиск сделанный мной пример TideBringera и переделал в хэш на ГУИ (МУИ) вот разбирайся |
04.10.2012, 00:14 | #12
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
asesmo
Я I Jag Ich Jeg Ja Minä!
offline
Опыт:
8,073Активность: |
|
04.10.2012, 05:50 | #13
+0/−1
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Sladkoegka
Забыл что хотел...
offline
Опыт:
7,437Активность: |
Arti, Блин да все правильно в моем примере,просто ты подставь в свой к код:
В первом триггере где даешь спеллбук вставь это
во втором триггере
Теперь можешь проверить-должно работать
Arti,
ЭЭЭЭ...На каждого юнита записывается уникальный GetHandleId()Юнитов может быть хоть 100500+столько же будет логических. |
04.10.2012, 06:23 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
asesmo
Я I Jag Ich Jeg Ja Minä!
offline
Опыт:
8,073Активность: |
Sladkoegka, можно не проверять булеан, просто проверять лвл скрытого спеллбука.
asesmo добавил:
Sladkoegka:
я согласен, т.к. как бы хеш и был создан для этого в 1.24 |
04.10.2012, 12:39 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Sladkoegka
Забыл что хотел...
offline
Опыт:
7,437Активность: |
asesmo,
А если юнит ударит несколько раз за 4 секунды??? |
04.10.2012, 13:17 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|