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

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

Ответ
 
Motorhead

offline
Опыт: 247
Активность:
помогите с кодом
Я новичок в картостроительстве, услышал про такую плохую вещь как утечки. Я конешно почитал как от них избавляться, но есть сомнения....Долго проверять мапу - нет времени, вообщем сделал я триггер где над разлагающимися трупами создаётся эффект мух, а потом удаляется. Есть ли утечки?
вот собственно код:

Код:
function Trig_dead_units_Conditions takes nothing returns boolean
    if ( not ( IsUnitType(GetTriggerUnit(), UNIT_TYPE_HERO) == false ) ) then
        return false
    endif
    return true
endfunction

function DeleteEffect takes nothing returns nothing
   local timer t = GetExpiredTimer()

   call DestroyEffectBJ( get_object_eparam(t , "timer_for_effect"))
   call DestroyTimer(t)
   call flush_object(t)
endfunction

function NextsActions takes nothing returns nothing
   local timer t = GetExpiredTimer()
   local timer t2 = CreateTimer()
   local unit u
   local location p

   set u = get_object_uparam(t, "timer_for_unit" )
   set p = GetUnitLoc(u)

   call AddSpecialEffectLocBJ( p , "Doodads\\LordaeronSummer\\Props\\Flies\\Flies.mdl" )
   call DestroyTimer(t)
   call flush_object(t)
   call RemoveLocation(p)

   call TimerStart(t2, 60.000 , false, function DeleteEffect)
   call set_object_iparam(t2, "timer_for_effect1", H2I(GetLastCreatedEffectBJ()))

   set u = null
   set p = null
endfunction

function Trig_dead_units_Actions takes nothing returns nothing
    local unit u = GetTriggerUnit()
    local timer t = CreateTimer()
    call TimerStart(t, 40.000 , false, function NextsActions)
    call set_object_iparam(t, "timer_for_unit", H2I(u))
    set u = null    
endfunction

//===========================================================================
function InitTrig_dead_units takes nothing returns nothing
    set gg_trg_dead_units = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_dead_units, EVENT_PLAYER_UNIT_DEATH )
    call TriggerAddCondition( gg_trg_dead_units, Condition( function Trig_dead_units_Conditions ) )
    call TriggerAddAction( gg_trg_dead_units, function Trig_dead_units_Actions )
endfunction



Отредактировано ZlaYa1000, 26.04.2007 в 03:15.
Старый 24.04.2007, 22:43
Motorhead

offline
Опыт: 247
Активность:
Неужели такой сложный код? =)
Старый 25.04.2007, 21:27
RED28
Kicked by %
offline
Опыт: 1,936
Активность:
новичок говоришь?=)
Старый 26.04.2007, 02:17
DeT

offline
Опыт: 5,715
Активность:
хз...мб есть с location'ами
а так-вроде все чистенько
Старый 26.04.2007, 15:09
DioD

offline
Опыт: 45,184
Активность:
  1. Таймер следует обнулять так как это не наплывающее событие линк утерян не будет.
  2. Кешевые записи следует высвобождать так как это масс строки
Старый 26.04.2007, 15:26
Motorhead

offline
Опыт: 247
Активность:
Таймер я вроде вообще уничтожаю. Поясни плз в каком месте обнулять и почему(не понял).
Кэш вроде тоже очищаю))) В какой функции я забыл?
ЗЫ: заранее спс.

Motorhead добавил:
call flush_object(t) Разве не полностью удаляет все записи с данным объектом?
Старый 26.04.2007, 18:54
Garret
Недоброе творится
offline
Опыт: 3,893
Активность:
локалка остаётся наверное (таймер)
Старый 26.04.2007, 20:13
DeT

offline
Опыт: 5,715
Активность:
Garret диодег сказал уше

DeT добавил:
Флаш обжект -очистка связанный с ним записей кеша но не самого объекта!!!
Старый 26.04.2007, 22:07
DioD

offline
Опыт: 45,184
Активность:
локалки и кеш это разные высоты в одной плоскости, кеш может хранить записи для несуществующих объектов, а вот несуществующие объекты в кеше безполезны и зависают в нём фактически навсегда.
Если ты уверен что в коде нет утечек, можно кеш и не обнулять, получиться что записи будут обновляться по мере поступления новых запусков
Старый 27.04.2007, 03:11
Motorhead

offline
Опыт: 247
Активность:
Цитата:
Сообщение от DioD
Если ты уверен что в коде нет утечек, можно кеш и не обнулять, получиться что записи будут обновляться по мере поступления новых запусков


Я и не уверен , поэтому к вам и обратился. Терь попробую обнулить таймер...
Старый 27.04.2007, 18:02
Ответ

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

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

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

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



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