XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
Klop
Папа римский
offline
Опыт: 13,006
Активность:
Определение утечек
Вообщем очередной нубский вопрос,как определить наличие утечек,вот где нашёл такую функцию,но немного переделал её получилось так
function Check_Actions takes nothing returns nothing
    local timer Timer = CreateTimer()
    local string S
    local integer i = 0
    if INT != GetHandleId(Timer) then
       set INT = GetHandleId(Timer)
       call DisplayTextToPlayer(Player(0),0,0,I2S(INT-1048500))
    endif
    call DestroyTimer(Timer)
    set Timer = null
endfunction
Так вот есть спелл,перед применением пр старте игры показывает значение INT = 200,после применение 201,потом 202 и потом 200 как это понять,присутствуют утечки или нет?? и так чередуется постоянно потом снова 201 202 200 цикл какойто,бывает больше (X,X+1,200)
Старый 06.11.2010, 06:52
ScorpioT1000
Работаем
offline
Опыт: отключен
счетчик хендлов вроде один для всех наследуемых типов
ScorpioT1000 добавил:
ты уверен, что кроме этого 100% ничего не создается?
Старый 06.11.2010, 06:59
Klop
Папа римский
offline
Опыт: 13,006
Активность:
ScorpioT1000, карта пуста на ней только стартовая позиция 6 вражеских юнитов и герой , 3 триггера)
Старый 06.11.2010, 07:01
ScorpioT1000
Работаем
offline
Опыт: отключен
DisplayTextToPlayer(Player(0),0,0,I2S(INT-1048500))
ScorpioT1000 добавил:
создается новая стринга из числа
ScorpioT1000 добавил:
хотя тут не особо влиять должно
Старый 06.11.2010, 07:14
Klop
Папа римский
offline
Опыт: 13,006
Активность:
ScorpioT1000
вот переписал так всё тоже самое
function Check_Actions takes nothing returns nothing
    local timer Timer = CreateTimer()
    local string s
    local integer i = 0
    if INT != GetHandleId(Timer) then
       set INT = GetHandleId(Timer)
       set s = I2S(INT-1048500)
       call DisplayTextToPlayer(Player(0),0,0,s)
       set s = null
    endif
    call DestroyTimer(Timer)
    set Timer = null
endfunction
Возможно у меня в спелле задержка 1 секунда потом только удаляется таймер и Группа,может ли это влиять,но я подумал если они оба удаляется позже тогда было 200 201 200,а не 200 201 202 200
Старый 06.11.2010, 07:26
ScorpioT1000
Работаем
offline
Опыт: отключен
сама операция
I2S(INT-1048500)
порождает новую строку, если такой еще не было, попробуй вызвать сначала это при загрузке:
function preinit takes nothing returns nothing
    local integer i=150
    local string z
    loop
        exitwhen i > 300
        set z = I2S(i)
        set i=i+1
    endloop
endfunction
Старый 06.11.2010, 08:01
Klop
Папа римский
offline
Опыт: 13,006
Активность:
ScorpioT1000, всёравно),всётаки это что то со спеллом
Spell:
function FrozenTears_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'AHtc'
endfunction

function FrozenTearsFilter takes nothing returns boolean
   local timer t = GetExpiredTimer()
   local unit u = LoadUnitHandle(h,GetHandleId(t),1)
   local boolean b = IsUnitAlly(GetFilterUnit(),GetOwningPlayer(u)) == false and GetUnitState(GetFilterUnit(),UNIT_STATE_LIFE)>0
   set u = null
   set t = null
   return b
endfunction

function FrozenTearsDamage takes nothing returns nothing
   local timer t = GetExpiredTimer()
   local unit u = LoadUnitHandle(h,GetHandleId(t),1)
   call UnitDamageTarget(u,GetEnumUnit(),200,false,true,ATTACK_TYPE_MAGIC,DAMAGE_TYPE_MAGIC,WEAPON_TYPE_WHOK​NOWS)
   set t = null
   set u = null
endfunction

function FrozenTearsGroup takes nothing returns nothing
   local timer t = GetExpiredTimer()
   local unit u = LoadUnitHandle(h,GetHandleId(t),1)
   local group g = LoadGroupHandle(h,GetHandleId(t),2)
   call ForGroup(g,function FrozenTearsDamage)
   call FlushChildHashtable(h,GetHandleId(t))
   call DestroyTimer(t)
   call DestroyGroup(g)
   set g = null
   set t = null
   set u = null
endfunction

function FrozenTearsDammy takes nothing returns nothing
   local timer t = GetExpiredTimer()
   local unit u = LoadUnitHandle(h,GetHandleId(t),1)
   local real x = GetUnitX(GetEnumUnit())
   local real y = GetUnitY(GetEnumUnit())
   local unit d = CreateUnit(GetOwningPlayer(u),'d000',x,y,0)
   call UnitApplyTimedLife(d,'BTFL',1.00)
   call SetUnitFlyHeight(d,0,1000)
   call TimerStart(t,1.00,false,function FrozenTearsGroup)
   set d = null
   set t = null
   set u = null
endfunction

function FrozenTearsTimer takes nothing returns nothing
   local timer t = GetExpiredTimer()
   local unit u = LoadUnitHandle(h,GetHandleId(t),1)
   local real x = GetUnitX(u)
   local real y = GetUnitY(u)
   local boolexpr b = Condition(function FrozenTearsFilter)
   local group g = CreateGroup()
   call GroupEnumUnitsInRange(g,x,y,400,b)
   call ForGroup(g,function FrozenTearsDammy)
   call SaveGroupHandle(h,GetHandleId(t),2,g)
   //call DestroyGroup(g)
   //call DestroyTimer(t)
   call DestroyBoolExpr(b)
   set u = null
   set t = null
   set g = null
   set b = null
endfunction

function FrozenTears_Actions takes nothing returns nothing
   local timer t = CreateTimer()
   local unit u = GetTriggerUnit()
   call SaveUnitHandle(h,GetHandleId(t),1,u)
   call TimerStart(t,0.01,false,function FrozenTearsTimer)
   set u = null
   set t = null
endfunction

//===========================================================================
function InitTrig_FrozenTears takes nothing returns nothing
    local trigger  t = CreateTrigger()
    call EventUnit(t,EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition(t,Condition( function FrozenTears_Conditions ) )
    call TriggerAddAction(t,function FrozenTears_Actions )
    set t = null
endfunction

Mr_KLOP добавил:
Вообще сделал так, внёс функцию Check в нестандартный код и в конце спелла вызываю эту функцию утечек не обнаружено,дело сделано,ошибкой было отдельный периодический триггер с той функцией
Mr_KLOP добавил:
тему можно закрывать
Старый 06.11.2010, 09:23
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 16:07.