Добавлено (07-07-2011, 23:16) --------------------------------------------- Ещё раз прошу помощи.
Code
function MC_Timer01 takes nothing returns nothing local timer t = GetExpiredTimer() local unit u = LoadUnitHandle(Hash,GetHandleId(t),0) local location ps = LoadLocationHandle(Hash,GetHandleId(t),1) local location pu = LoadLocationHandle(Hash,GetHandleId(t),2) local integer d = LoadInteger(Hash,GetHandleId(t),3) local integer nc = LoadInteger(Hash,GetHandleId(t),4) local real x local real y local location l local unit array c if GetUnitAbilityLevel(u, 'A001') == 1 then if nc == 18 then call FlushChildHashtable(Hash,GetHandleId(t)) call DestroyTimer(t) call RemoveLocation(ps) call RemoveLocation(pu) set u = null set c[nc] = null set ps = null set pu = null set t = null else set d = d + 38 set x = GetLocationX(pu) + d * Cos(bj_RADTODEG * Atan2(GetLocationY(ps) - GetLocationY(pu), GetLocationX(ps) - GetLocationX(pu)) * bj_DEGTORAD) set y = GetLocationY(pu) + d * Cos(bj_RADTODEG * Atan2(GetLocationY(ps) - GetLocationY(pu), GetLocationX(ps) - GetLocationX(pu)) * bj_DEGTORAD) set l = Location(x,y) set c[nc] = CreateUnitAtLoc(GetOwningPlayer(u), 'h003', l, bj_RADTODEG * Atan2(GetLocationY(ps) - GetLocationY(pu), GetLocationX(ps) - GetLocationX(pu))) set nc = nc + 1 call SaveInteger(Hash,GetHandleId(t),3,d) call SaveInteger(Hash,GetHandleId(t),4,nc) call RemoveLocation(ps) call RemoveLocation(pu) call RemoveLocation(l) set u = null set c[nc] = null set ps = null set pu = null set l = null endif endif endfunction
function MC_Timer00 takes nothing returns nothing local timer t = GetExpiredTimer() local unit u = LoadUnitHandle(Hash,GetHandleId(t),0) local location ps = LoadLocationHandle(Hash,GetHandleId(t),1) local location pu = LoadLocationHandle(Hash,GetHandleId(t),2) call FlushChildHashtable(Hash,GetHandleId(t)) call DestroyTimer(t) set t = CreateTimer() call SaveUnitHandle(Hash,GetHandleId(t),0,u) call SaveLocationHandle(Hash,GetHandleId(t),1,ps) call SaveLocationHandle(Hash,GetHandleId(t),2,pu) call SaveInteger(Hash,GetHandleId(t),3,0) call SaveInteger(Hash,GetHandleId(t),4,0) call TimerStart(t,0.03,true,function MC_Timer01) call RemoveLocation(ps) call RemoveLocation(pu) set t = null set u = null set ps = null set pu = null endfunction
function Trig_Spell_MC_Actions takes nothing returns nothing local timer t = CreateTimer() call SaveUnitHandle(Hash,GetHandleId(t),0,GetSpellAbilityUnit()) call SaveLocationHandle(Hash,GetHandleId(t),1,GetSpellTargetLoc()) call SaveLocationHandle(Hash,GetHandleId(t),2,GetUnitLoc(GetSpellAbilityUnit())) call TimerStart(t,0.55,false,function MC_Timer00) set t = null endfunction
В указаном направлении создаётся линия из дамми. Но линия должна создаваться от позиции кастера, а она создаётся от центра карты, в чём проблема?
function InitTrig_Spell_MC takes nothing returns nothing local integer index = 0 set gg_trg_Spell_MC = CreateTrigger( ) loop call TriggerRegisterPlayerUnitEvent(gg_trg_Spell_MC, Player(index), EVENT_PLAYER_UNIT_SPELL_EFFECT, null) set index = index + 1 exitwhen index == 11 endloop call TriggerAddCondition( gg_trg_Spell_MC, Condition( function Trig_Spell_MC_Conditions ) ) call TriggerAddAction( gg_trg_Spell_MC, function Trig_Spell_MC_Actions ) endfunction
И ещё вопрос: Можно ли добавить инитов в группу и делать с ними действия не вызывая другую функцию? Я делал так:
Code
local group g = CreateGroup() call GroupEnumUnitsInRangeOfLoc(g, GetUnitLoc(LoadUnitHandle(Hash,GetHandleId(t),1)), 30, null) if IsUnitEnemy(FirstOfGroup(g), GetOwningPlayer(LoadUnitHandle(Hash,GetHandleId(t),0))) == true then call UnitDamageTarget(LoadUnitHandle(Hash,GetHandleId(t),0), FirstOfGroup(g), 3, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS) endif call DestroyGroup(g) set g = null
Но функция работает только с первым юнитом из группы.
local group g = CreateGroup() call GroupEnumUnitsInRangeOfLoc(g, GetUnitLoc(LoadUnitHandle(Hash,GetHandleId(t),1)), 30, null) if IsUnitEnemy(FirstOfGroup(g), GetOwningPlayer(LoadUnitHandle(Hash,GetHandleId(t),0))) == true then call UnitDamageTarget(LoadUnitHandle(Hash,GetHandleId(t),0), FirstOfGroup(g), 3, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS) endif call DestroyGroup(g)
тут как цель у
Code
UnitDamageTarget
ты используешь
Code
FirstOfGroup(g)
, так чего удивляешься что работает только на 1-ой цели? Надо лупу-залупу использовать, чтоб без потерь.
Или проблема с ивентом(проверь через гуи, какой создается триггер при направлении и проверки через условии со схожыми данными), или я не знаю) И вообще скажи что ты собственно этим кодом пытаешься сделать, очень сложно воспринимается.