Лучшие проекты:
-->
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Модератор форума: farfacer, SaMuRa][  
Ответы на вопросы
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
Группа: VIP пользователь
Сообщений: 525
Награды: 11
Репутация: 140
Статус: Offline
загрузка наград ...
Делаешь однократный таймер. сохраняешь в хеш когда он будет не нужен паузишь его и уничтожаешь и запускаешь новый.Ну это если я правильно понял.

 
SaMuRa][Дата: Понедельник, 21.04.2014, 13:26 | Сообщение # 1355
Группа: 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
Группа: VIP пользователь
Сообщений: 525
Награды: 11
Репутация: 140
Статус: Offline
загрузка наград ...
Первое  call FlushChildHashtable(udg_hash,GetHandleId(t1))  ставить только в конце кода и 1 раз когда он завершаться.
У тебя хеш таблица удаляться раньше нужного


 
SaMuRa][Дата: Понедельник, 21.04.2014, 17:16 | Сообщение # 1358
Группа: 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
Группа: 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
Группа: 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
Группа: VIP пользователь
Сообщений: 525
Награды: 11
Репутация: 140
Статус: Offline
загрузка наград ...
таймер не забывай паузить перед уничтожением.

 
Поиск:


-->