проверьте код :) - Форум


Правила форума ·

  • Страница 1 из 1
  • 1
Архив - только для чтения
проверьте код :)

H_A_PK

#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

Ty3uK

#2
А запилить одним таймером религия не позволяет? И функции загрузки значений какие-то странные D:
Аниме - такая вещь, которая балансирует на грани "надоевшего" и "нового" из-за Наруто в основном. © [DUOS]
GUI Must Die v1.1 | Arena Multiboard

H_A_PK

#3
Quote (Ty3uK)
И функции загрузки значений какие-то странные D:

дык я х разве помню :D
Quote (Ty3uK)
А запилить одним таймером религия не позволяет?

можно и одним, но этот вариант самым простым спомобои просится в голову
Ползут 2 пирожка.
Первый: Я тебя щас трахну.
Второй: Почему?
Первый: Потому что я с яйцами :D

CLOCK

#4
А че ты call FlushChildHashtable не используешь? Утечка же будет
GetHandleID отдельно делай, так как функция запускается миллион раз
чтобы запомнить integer нужно использовать функцию call SaveInteger(Hash,h,1,integer) , а загрузить call LoadInteger(Hash,h,1)
Да вобще используй JNPG и усе

H_A_PK

#5
Quote (CLOCK)
А че ты call FlushChildHashtable не используешь? Утечка же будет

потому что не помнил как правельно пишется название этой функции ) вара у меня нету
Quote (CLOCK)
GetHandleID отдельно делай, так как функция запускается миллион раз

поясните =)
Ползут 2 пирожка.
Первый: Я тебя щас трахну.
Второй: Почему?
Первый: Потому что я с яйцами :D

CLOCK

#6
Quote
поясните =)

Мда уж))
Если функцией(твоей дмгперсек) будут пользоваться 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)

откуда ты все это грузишь? оО

H_A_PK

#7
Quote (CLOCK)

откуда ты все это грузишь? оО

из таймера же
Quote (CLOCK)
Если функцией(твоей дмгперсек) будут пользоваться 12 игроков, то она будет постепенно вызывать утечку. Ее вобще нужно обнулять. Ну еще чтобы код был читабельнее 10 раз)

да ты мне про GetHandleId поясни, понятно же что утечки будут, каких образом
Quote (CLOCK)
Кстати сначала паузишь таймер, а потом дестрой и уже обнуляешь

тоже не понимаю) почему его нельзя сразу уничтожить и обнулить, нафига паузить
Ползут 2 пирожка.
Первый: Я тебя щас трахну.
Второй: Почему?
Первый: Потому что я с яйцами :D

CLOCK

#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 для проверки действий, если же сообщение не дошло до игрока, значит действие не произошло

H_A_PK

#9
CLOCK, и зачем ты мне дал код где всё тоже самое ?
помимо пауз на тайммер и каких-то проверок, которые даже ничем не помогут потому что у меня и варкрафта-то нету
тут даже нету FlushChildHashtable, который сам сказал мне до этого использовать

Добавлено (31.05.12, 02:01)
---------------------------------------------
Я вообще не понимаю, Филип Киркоров наверное бы лучше мне объяснил всю соль, ну да ладно похоже я сразу всё понял, просто ты решил благородно помочь мне и написал за меня код, да ещё и с проверками, накой хер я не пойму
спасибо CLOCK, smile

Ползут 2 пирожка.
Первый: Я тебя щас трахну.
Второй: Почему?
Первый: Потому что я с яйцами :D

CLOCK

#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)
---------------------------------------------
Спасибо в карман не положишь joy Шутка))

H_A_PK

#11
Quote (CLOCK)
call FlushChildHashtable(udg_Hash,1)
call BJDebugMsg("12")
call FlushChildHashtable(udg_Hash,2)
call BJDebugMsg("13")

не там ты их поставил, потому и не заметил, их надо поставить в функцию ends когда будут не нужны данные
Ползут 2 пирожка.
Первый: Я тебя щас трахну.
Второй: Почему?
Первый: Потому что я с яйцами :D
  • Страница 1 из 1
  • 1
Поиск: