Суть проблемы, таймер отвечает за время в течении которого необходимо двигать юнит, по окончанию которого юнит или должен прекратится двигаться или удалится. Проблема в том что то не удаляется, то не прекращает движение по истечению таймера, иногда не двигается. Все баги при использовании нескольких сразу объектов, а если еще точнее то первая группа двигается нормально. Но при повторном использовании возникают проблемы. В общем не правильно таймер заюзал. ЗЫ: буду благодарен если этот бредокод оптимизируют в нормальный jass код, с меня плюсик в репу ессно.
Code
function Trig_DM_Func001Func001Func002C takes nothing returns boolean if ( not ( udg_Dummy_Remove[udg_y] == true ) ) then return false endif return true endfunction
function Trig_DM_Func001Func001Func006Func003Func001Func001C takes nothing returns boolean if ( not ( udg_Dummy_shell[udg_y] == true ) ) then return false endif return true endfunction
function Trig_DM_Func001Func001Func006Func003Func001C takes nothing returns boolean if ( not ( IsPlayerEnemy(GetOwningPlayer(GetEnumUnit()), GetOwningPlayer(udg_Dummy_U[udg_y])) == true ) ) then return false endif return true endfunction
function Trig_DM_Func001Func001Func006Func003A takes nothing returns nothing if ( Trig_DM_Func001Func001Func006Func003Func001C() ) then if ( Trig_DM_Func001Func001Func006Func003Func001Func001C() ) then call PauseTimerBJ( true, udg_Dummy_timer[udg_y] ) call RemoveUnit( udg_Dummy_U[udg_y] ) set udg_Dummy_Count = ( udg_Dummy_Count - 1 ) else endif call UnitDamageTargetBJ( udg_Dummy_U[udg_y], GetEnumUnit(), udg_Dummy_DmgReal[udg_y], ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL ) else endif endfunction
function Trig_DM_Func001Func001Func006C takes nothing returns boolean if ( not ( udg_Dummy_Damager[udg_y] == true ) ) then return false endif return true endfunction
function Trig_DM_Func001Func001C takes nothing returns boolean if ( not ( TimerGetRemaining(udg_Dummy_timer[udg_y]) <= 0.00 ) ) then return false endif return true endfunction
function Trig_DM_Actions takes nothing returns nothing set udg_y = 1 loop exitwhen udg_y > udg_Dummy_Count if ( Trig_DM_Func001Func001C() ) then set udg_Dummy_Count = ( udg_Dummy_Count - 1 ) if ( Trig_DM_Func001Func001Func002C() ) then call PauseTimerBJ( true, udg_Dummy_timer[udg_y] ) call RemoveUnit( udg_Dummy_U[udg_y] ) else endif else set udg_d_p1 = GetUnitLoc(udg_Dummy_U[udg_y]) set udg_d_p2 = PolarProjectionBJ(udg_d_p1, udg_Dummy_Speed[udg_y], udg_Dummy_Ang[udg_y]) call SetUnitPositionLoc( udg_Dummy_U[udg_y], udg_d_p2 ) if ( Trig_DM_Func001Func001Func006C() ) then set udg_Dummy_UG = GetUnitsInRangeOfLocAll(udg_Dummy_DmgRange[udg_y], udg_d_p2) call ForGroupBJ( udg_Dummy_UG, function Trig_DM_Func001Func001Func006Func003A ) call GroupClear( udg_Dummy_UG ) else call DoNothing( ) endif call RemoveLocation (udg_d_p1) call RemoveLocation (udg_d_p2) endif set udg_y = udg_y + 1 endloop endfunction
//=========================================================================== function InitTrig_DM takes nothing returns nothing set gg_trg_DM = CreateTrigger( ) call TriggerRegisterTimerEventPeriodic( gg_trg_DM, 0.04 ) call TriggerAddAction( gg_trg_DM, function Trig_DM_Actions ) endfunction
О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас. My Project: Nindogatari MAL
Faion, 1)советую двигать по координатам(SetUnitX/Y) 2)не юзать DoNothing 3)как приду попробую что-то сделать) сам пока попробуй прооптимизировать условия
Так это просто конверт гуи, DoNothing он автоматом проставляет, если не затруднит, конвертнуть б это в jass, а на счет координат, с vjass не знаком вообще, и до сих пор не пойму чем лучше двигать по координатам=)
Добавлено (15-06-2010, 14:17) --------------------------------------------- Бред, не понимаю, тупит только конкретно в 1 месте, в остальных местах двигает сразу много корректно >_<
О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас. My Project: Nindogatari MAL