|
Ответы на вопросы
|
|
| Imba | Дата: Воскресенье, 20.04.2014, 15:01 | Сообщение # 1351 |
|
=◕◡◕=
Группа: Элита
Сообщений: 1153
Награды: 27
Репутация: 1554
Статус: Offline
загрузка наград ...
| есть же действие запаузить таймер....(есть также полное удаление таймера)
Кликни на баннер!
|
| |
| |
| No_one | Дата: Воскресенье, 20.04.2014, 15:30 | Сообщение # 1352 |
 Навеки ваш, Painkonan.
Группа: Элита
Сообщений: 913
Награды: 11
Репутация: 587
Статус: Offline
загрузка наград ...
| Imba, пробовал полностью удалять (с условием, что у врага уровень пасивы не равен 0), он все равно работает. а если запаузить, то как узнать сколько времени прошло и осталось? вручную считать?
Автор проекта DotS. Участник команды animewar.net
|
| |
| |
| Imba | Дата: Воскресенье, 20.04.2014, 15:51 | Сообщение # 1353 |
|
=◕◡◕=
Группа: Элита
Сообщений: 1153
Награды: 27
Репутация: 1554
Статус: Offline
загрузка наград ...
| Есть условие Таймер - истекшнее время или как-то так. (но помо-емоу оно фэйловое) можно подсчитать через переменную
Кликни на баннер!
|
| |
| |
| SaMuRa][ | Дата: Понедельник, 21.04.2014, 13:21 | Сообщение # 1354 |
![SaMuRa][](/avatar/23/9887-668272.jpeg)
Группа: VIP пользователь
Сообщений: 525
Награды: 11
Репутация: 140
Статус: Offline
загрузка наград ...
| Делаешь однократный таймер. сохраняешь в хеш когда он будет не нужен паузишь его и уничтожаешь и запускаешь новый.Ну это если я правильно понял.
|
| |
| |
| SaMuRa][ | Дата: Понедельник, 21.04.2014, 13:26 | Сообщение # 1355 |
![SaMuRa][](/avatar/23/9887-668272.jpeg)
Группа: VIP пользователь
Сообщений: 525
Награды: 11
Репутация: 140
Статус: Offline
загрузка наград ...
| однократный таймер TimerStart(t,скорость,false,function ...) true - таймер многократный, false - таймер однократный
|
| |
| |
| No_one | Дата: Понедельник, 21.04.2014, 15:33 | Сообщение # 1356 |
 Навеки ваш, Painkonan.
Группа: Элита
Сообщений: 913
Награды: 11
Репутация: 587
Статус: Offline
загрузка наград ...
| Код function remove takes nothing returns nothing local timer t1 = GetExpiredTimer() local unit d = LoadUnitHandle(udg_hash,GetHandleId(t1),1) //local timer t1 = LoadTimerHandle(udg_hash, GetHandleId(t1), 0) call DisplayTimedTextToPlayer(GetOwningPlayer(udg_st[0]),0,0,3.00,"таймер прошел") call UnitRemoveAbility( d, 'A003' ) call DestroyTimer(t1) call FlushChildHashtable(udg_hash,GetHandleId(t1)) set t1 = null set d = null endfunction
function Trig_VisZem_Actions takes nothing returns nothing local timer t1 = CreateTimer() local unit d = GetSpellAbilityUnit() local unit u = GetSpellTargetUnit() local integer lvl = GetUnitAbilityLevel(d,'A004') local real X=GetUnitX(u) local real Y=GetUnitY(u) local real i = 1.00*(3+lvl) call SaveTimerHandle(udg_hash,GetHandleId(t1),0,t1) call SaveUnitHandle(udg_hash, GetHandleId(t1),1, d) call UnitAddAbility( d, 'A003' ) call SetUnitAbilityLevel(d, 'A003', lvl) call TimerStart(t1, i, false, function remove)
if (GetUnitAbilityLevel(d,'A003') != 0) then set t1 = LoadTimerHandle(udg_hash, GetHandleId(t1), 0) call PauseTimer(t1) call DestroyTimer(t1) call FlushChildHashtable(udg_hash,GetHandleId(t1)) set t1 = CreateTimer() call SaveTimerHandle(udg_hash,GetHandleId(t1),0,t1) call DisplayTimedTextToPlayer(GetOwningPlayer(udg_st[0]),0,0,3.00,"не равно 0") call SaveUnitHandle(udg_hash, GetHandleId(t1),1, d) call UnitAddAbility( d, 'A003' ) call SetUnitAbilityLevel(d, 'A003', lvl) call TimerStart(t1, i, false, function remove) endif set t1 = null set d = null set u = null endfunction
То, что у меня написано - совершенно неправильно, потому что я не знаю относительно чего сохранять таймер t1 в хэш. для теста я выводил код. каждый раз создается отдельный таймер, и я не знаю, как его отследить.
Автор проекта DotS. Участник команды animewar.net
Сообщение отредактировал painkonan - Понедельник, 21.04.2014, 17:03 |
| |
| |
| SaMuRa][ | Дата: Понедельник, 21.04.2014, 17:09 | Сообщение # 1357 |
![SaMuRa][](/avatar/23/9887-668272.jpeg)
Группа: VIP пользователь
Сообщений: 525
Награды: 11
Репутация: 140
Статус: Offline
загрузка наград ...
| Первое call FlushChildHashtable(udg_hash,GetHandleId(t1)) ставить только в конце кода и 1 раз когда он завершаться. У тебя хеш таблица удаляться раньше нужного
|
| |
| |
| SaMuRa][ | Дата: Понедельник, 21.04.2014, 17:16 | Сообщение # 1358 |
![SaMuRa][](/avatar/23/9887-668272.jpeg)
Группа: VIP пользователь
Сообщений: 525
Награды: 11
Репутация: 140
Статус: Offline
загрузка наград ...
| Обнесении что именно делает способность а то я смотрю и не могу понять.
|
| |
| |
| No_one | Дата: Понедельник, 21.04.2014, 17:45 | Сообщение # 1359 |
 Навеки ваш, Painkonan.
Группа: Элита
Сообщений: 913
Награды: 11
Репутация: 587
Статус: Offline
загрузка наград ...
| Там еще ошибка, я даю способность и проверяю - есть ли она у юнита. Я старый вариант скопировал случайно. Приду домой - попробую. А суть такова: кастуем способность, даем врагу пассивную способность ( в данном случае даю ее применяющему, чтобы проверить на баги ), затем удаляю пасиву через некоторое время(i). Проблема в том, что если применить еще раз, то старый Таймер работает сам по себе, и идет не состыковка, если цель способности - та же самая в течении 4-7 секунд (i)
Автор проекта DotS. Участник команды animewar.net
|
| |
| |
| SaMuRa][ | Дата: Понедельник, 21.04.2014, 22:24 | Сообщение # 1360 |
![SaMuRa][](/avatar/23/9887-668272.jpeg)
Группа: VIP пользователь
Сообщений: 525
Награды: 11
Репутация: 140
Статус: Offline
загрузка наград ...
| Вот построение попробуй такое.
Цитата function Spell1 takes nothing returns nothing local timer t = GetExpiredTimer() local integer h = GetHandleId(t) local unit caster = LoadUnitHandle(udg_hash,h,1) local unit target = LoadUnitHandle(udg_hash,h,2) local integer counter = LoadInteger(udg_hash,h,3)
if counter>0 then call SaveInteger(udg_hash,h,3,counter-1) else call DestroyTimer(t) call FlushChildHashtable(udg_hash,h) endif
set caster = null set target = null set t = null endfunction
function Spell takes nothing returns nothing local unit caster = GetSpellAbilityUnit() local unit target = GetSpellTargetUnit() local timer t = CreateTimer() local integer h = GetHandleId(t)
call SaveUnitHandle(udg_hash,h,1,caster) call SaveUnitHandle(udg_hash,h,2,target) call SaveInteger(udg_hash,h,3,125) // 125 это 5 секунд с периодом 5/0.04 = 125
call TimerStart(t,0.04,true,function Spell1)
set caster = null set target = null set t = null endfunction
|
| |
| |
| No_one | Дата: Вторник, 22.04.2014, 00:40 | Сообщение # 1361 |
 Навеки ваш, Painkonan.
Группа: Элита
Сообщений: 913
Награды: 11
Репутация: 587
Статус: Offline
загрузка наград ...
| SaMuRa][, такая же проблема. если в течении этих 5 секунд применить заклинание на цель еще раз, то длительность сократится надо что-то с этим условием сделать if (GetUnitAbilityLevel(caster,'A003') != 0) then т.к. я в этот код добавляю это: call UnitAddAbility( caster, 'A003' ) а через 5 сек убираю call UnitRemoveAbility( caster, 'A003' )
Автор проекта DotS. Участник команды animewar.net
|
| |
| |
| No_one | Дата: Четверг, 24.04.2014, 15:29 | Сообщение # 1362 |
 Навеки ваш, Painkonan.
Группа: Элита
Сообщений: 913
Награды: 11
Репутация: 587
Статус: Offline
загрузка наград ...
| видимо придется отменять применение заклинания, если юнит уже под действием этой способности. я уже все перепробовал, не знаю больше что делать.
Автор проекта DotS. Участник команды animewar.net
|
| |
| |
| SaMuRa][ | Дата: Четверг, 24.04.2014, 16:39 | Сообщение # 1363 |
![SaMuRa][](/avatar/23/9887-668272.jpeg)
Группа: VIP пользователь
Сообщений: 525
Награды: 11
Репутация: 140
Статус: Offline
загрузка наград ...
| Сделай через отслежку бафа. Если на юните есть баф то нечего не делать если нету то убрать скил.
|
| |
| |
| No_one | Дата: Четверг, 24.04.2014, 17:33 | Сообщение # 1364 |
 Навеки ваш, Painkonan.
Группа: Элита
Сообщений: 913
Награды: 11
Репутация: 587
Статус: Offline
загрузка наград ...
| SaMuRa][, отлично) все работает, спасибо, вот, правда не знаю другую функцию отслежки бафа, поэтому написал через BJ
Код function remove takes nothing returns nothing local timer t = GetExpiredTimer() local integer h = GetHandleId(t) local unit caster = LoadUnitHandle(udg_hash,h,1) local unit target = LoadUnitHandle(udg_hash,h,2) local integer counter = LoadInteger(udg_hash,h,3)
if counter>0 or ( UnitHasBuffBJ(target, 'B000') == true ) then call SaveInteger(udg_hash,h,3,counter-1) else call DestroyTimer(t) call UnitRemoveAbility( target, 'A003' ) call FlushChildHashtable(udg_hash,h) endif set caster = null set target = null set t = null endfunction
function Trig_VisZem_Actions takes nothing returns nothing local unit caster = GetSpellAbilityUnit() local unit target = GetSpellTargetUnit() local timer t = CreateTimer() local integer h = GetHandleId(t) local integer lvl = GetUnitAbilityLevel(caster,'A004') local real X=GetUnitX(caster) local real Y=GetUnitY(caster) local integer i = 1*(3+lvl) local integer counter = 0 local unit b = CreateUnit(GetOwningPlayer(caster),'e00C',X,Y,0)
call UnitApplyTimedLife(b,'BTLF', 0.2) call UnitAddAbility(b, 'A002') call SetUnitAbilityLevel(b, 'A002', lvl) call IssueTargetOrder(b, "slow", target) call SaveUnitHandle(udg_hash,h,1,caster) call SaveUnitHandle(udg_hash,h,2,target) call SaveInteger(udg_hash,h,3,25*i)
call UnitAddAbility( target, 'A003' ) call SetUnitAbilityLevel(target, 'A003', lvl)
call TimerStart(t,0.04,true,function remove)
set caster = null set target = null set b = null set t = null endfunction
Автор проекта DotS. Участник команды animewar.net
Сообщение отредактировал painkonan - Четверг, 24.04.2014, 17:34 |
| |
| |
| SaMuRa][ | Дата: Четверг, 24.04.2014, 18:12 | Сообщение # 1365 |
![SaMuRa][](/avatar/23/9887-668272.jpeg)
Группа: VIP пользователь
Сообщений: 525
Награды: 11
Репутация: 140
Статус: Offline
загрузка наград ...
| таймер не забывай паузить перед уничтожением.
|
| |
| |