проверьте код :)
|
|
#1
Code globals hashtable hs = InitHashtable() endglobals
function ac2 takes nothing return nothing local timer t = GetExperedTimer() local timer t2 = LoadHandleTimer(hs, GetHandleId(t),1)
call DestroyTimer(t2) call DestroyTimer(t)
set t = null set t2 = null endfunction
function ac1 takes nothing return nothing local timer t = GetExperedTimer() local unit u = LoadHandleUnit(hs, GetHandleId(t),2) local integer i = LoadHandleInt(hs, GetHandleId(t),1) local player p = LoadHandlePlayer(hs, GetHandleId(t),3)
call DamageUnit(p,i,u)
set u = null set t = null endfunction
function DamagePerSecond takes unit u, integer damag, integer sec, integer period, player p return timer local timer t = CreateTimer() local timer t2 = CreateTimer()
call SaveHandleInt(hs, GetHandleId(t),damag,1) call SaveHandleUnit(hs, GetHandleId(t),u,2) call SaveHandleTimer(hs, GetHandleId(t2),t,1) call SaveHandlePlayer(hs, GetHandleId(t),p,3)
call TimerStart(t, true, period, function ac1) call TimerStart(t2, false, sec, function ac2)
set t = null set t2 = null return t endfunction
функция DamagePerSecond наносит юниту урон каждые period по damag урону и перестаёт наносить урон через sec секунд
Ползут 2 пирожка. Первый: Я тебя щас трахну. Второй: Почему? Первый: Потому что я с яйцами :D
|
#2
А запилить одним таймером религия не позволяет? И функции загрузки значений какие-то странные D:
Аниме - такая вещь, которая балансирует на грани "надоевшего" и "нового" из-за Наруто в основном. © [DUOS] GUI Must Die v1.1 | Arena Multiboard
|
#3
Quote (Ty3uK) И функции загрузки значений какие-то странные D: дык я х разве помню :DQuote (Ty3uK) А запилить одним таймером религия не позволяет? можно и одним, но этот вариант самым простым спомобои просится в голову
Ползут 2 пирожка. Первый: Я тебя щас трахну. Второй: Почему? Первый: Потому что я с яйцами :D
|
#4
А че ты call FlushChildHashtable не используешь? Утечка же будет GetHandleID отдельно делай, так как функция запускается миллион раз чтобы запомнить integer нужно использовать функцию call SaveInteger(Hash,h,1,integer) , а загрузить call LoadInteger(Hash,h,1) Да вобще используй JNPG и усе
|
#5
Quote (CLOCK) А че ты call FlushChildHashtable не используешь? Утечка же будет потому что не помнил как правельно пишется название этой функции ) вара у меня нетуQuote (CLOCK) GetHandleID отдельно делай, так как функция запускается миллион раз поясните =)
Ползут 2 пирожка. Первый: Я тебя щас трахну. Второй: Почему? Первый: Потому что я с яйцами :D
|
#6
Мда уж)) Если функцией(твоей дмгперсек) будут пользоваться 12 игроков, то она будет постепенно вызывать утечку. Ее вобще нужно обнулять. Ну еще чтобы код был читабельнее 10 раз) Кстати сначала паузишь таймер, а потом дестрой и уже обнуляешь Quote local unit u = LoadHandleUnit(hs, GetHandleId(t),2) local integer i = LoadInteger(hs, GetHandleId(t),1) local player p = LoadHandlePlayer(hs, GetHandleId(t),3) откуда ты все это грузишь? оО
|
#7
Quote (CLOCK) откуда ты все это грузишь? оО из таймера жеQuote (CLOCK) Если функцией(твоей дмгперсек) будут пользоваться 12 игроков, то она будет постепенно вызывать утечку. Ее вобще нужно обнулять. Ну еще чтобы код был читабельнее 10 раз) да ты мне про GetHandleId поясни, понятно же что утечки будут, каких образомQuote (CLOCK) Кстати сначала паузишь таймер, а потом дестрой и уже обнуляешь тоже не понимаю) почему его нельзя сразу уничтожить и обнулить, нафига паузить
Ползут 2 пирожка. Первый: Я тебя щас трахну. Второй: Почему? Первый: Потому что я с яйцами :D
|
#8
Писал от руки так как вар гонит только JassShopPro вроде как все норм Code function Ends takes nothing returns nothing local timer end=GetExpiredTimer() local integer h=GetHandleId(end) local timer t=LoadTimerHandle(udg_Hash,h,1) call PauseTimer(t) call PauseTimer(end) call DestroyTimer(t) call DestroyTimer(end) set end=null set t=null endfunction
function Damage takes nothing returns nothing local timer t=GetExpiredTimer() local integer h=GetHandleId(t) local real damage=LoadReal(udg_Hash,h,1) call BJDebugMsg("8") local unit caster=LoadUnitHandle(udg_Hash,h,1) call BJDebugMsg("9") local unit target=LoadUnitHandle(udg_Hash,h,2) call BJDebugMsg("START ATTACK") call UnitDamageTarget(caster,target,damage,true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WOOD_HEAVY_BASH) call BJDebugMsg("ATTACK") call BJDebugMsg(R2S(damage)) call FlushChildHashtable(udg_Hash,1) call BJDebugMsg("12") call FlushChildHashtable(udg_Hash,2) call BJDebugMsg("13") set caster=null set target=null set t=null endfunction
function DamagePerSecond takes unit caster,unit target,real damage,real period,real duration returns nothing local timer t=CreateTimer() call BJDebugMsg("1") local timer end=CreateTimer() call BJDebugMsg("2") local integer h=GetHandleId(t) call BJDebugMsg("3") call SaveReal(udg_Hash,h,1,damage) call BJDebugMsg("4") call SaveUnitHandle(udg_Hash,h,1,caster) call BJDebugMsg("5") call SaveUnitHandle(udg_Hash,h,2,target) call BJDebugMsg("6") call SaveTimerHandle(udg_Hash,h,1,t) call BJDebugMsg("7") call TimerStart(t,period,true,function Damage) call TimerStart(end,duration,false,function Ends) set t=null endfunction
function СAST takes nothing returns nothing local unit u=GetSpellAbilityUnit() local unit t=GetTriggerUnit() local real r=100.00 local real period=2. local real dur=3. call DamagePerSecond(u,t,r,period,dur) endfunction Добавлено (31.05.12, 01:18) --------------------------------------------- BJDEBGMSG для проверки действий, если же сообщение не дошло до игрока, значит действие не произошло
|
#9
CLOCK, и зачем ты мне дал код где всё тоже самое ? помимо пауз на тайммер и каких-то проверок, которые даже ничем не помогут потому что у меня и варкрафта-то нету тут даже нету FlushChildHashtable, который сам сказал мне до этого использоватьДобавлено (31.05.12, 02:01) --------------------------------------------- Я вообще не понимаю, Филип Киркоров наверное бы лучше мне объяснил всю соль, ну да ладно похоже я сразу всё понял, просто ты решил благородно помочь мне и написал за меня код, да ещё и с проверками, накой хер я не пойму спасибо CLOCK,
Ползут 2 пирожка. Первый: Я тебя щас трахну. Второй: Почему? Первый: Потому что я с яйцами :D
|
#10
Есть Flush Немного внятнее почитай Quote call FlushChildHashtable(udg_Hash,1) call BJDebugMsg("12") call FlushChildHashtable(udg_Hash,2) Добавлено (31.05.12, 21:54) ---------------------------------------------
Quote и зачем ты мне дал код где всё тоже самое ? Дело в том что у тебя названия функци неизвестные))Добавлено (31.05.12, 22:01) --------------------------------------------- Спасибо в карман не положишь Шутка))
|
#11
Quote (CLOCK) call FlushChildHashtable(udg_Hash,1) call BJDebugMsg("12") call FlushChildHashtable(udg_Hash,2) call BJDebugMsg("13") не там ты их поставил, потому и не заметил, их надо поставить в функцию ends когда будут не нужны данные
Ползут 2 пирожка. Первый: Я тебя щас трахну. Второй: Почему? Первый: Потому что я с яйцами :D
|
#12
H_A_PK, Разницы нету... Ну общ закрывай, тема вроде как исчерпана
|
#13
поф клозаю
Ползут 2 пирожка. Первый: Я тебя щас трахну. Второй: Почему? Первый: Потому что я с яйцами :D
|