lawson, у меня есть скил. При юзе любого скила от героя отлетаю снаряды.Т.к. событие это юз любого скила,а длительность полёта ровно 1 сек. скил может быть багнутым.Я не хочу просто отключать скил на нужное время,а хочу сделать его муишным.Если перевести гуи в код,то вот что есть у меня без локальных переменных:
Code
function Trig_Start5_Conditions takes nothing returns boolean if ( not ( GetUnitTypeId(GetSpellAbilityUnit()) == 'E006' ) ) then return false endif if ( not ( GetUnitAbilityLevelSwapped('A01J', GetSpellAbilityUnit()) >= 1 ) ) then return false endif return true endfunction
function Trig_Start5_Func003Func001C takes nothing returns boolean if ( not ( GetUnitTypeId(GetEnumUnit()) == 'h00F' ) ) then return false endif return true endfunction
function Trig_Start5_Func003A takes nothing returns nothing if ( Trig_Start5_Func003Func001C() ) then call RemoveUnit( GetEnumUnit() ) else endif endfunction
function Trig_Start5_Func007C takes nothing returns boolean if ( not ( udg_X9 <= ( 15 + ( 5 * GetUnitAbilityLevelSwapped('A01J', udg_Caster4) ) ) ) ) then return false endif return true endfunction
function Trig_Start5_Actions takes nothing returns nothing call DisableTrigger( GetTriggeringTrigger() ) set bj_wantDestroyGroup = true call ForGroupBJ( GetUnitsInRectAll(GetPlayableMapRect()), function Trig_Start5_Func003A ) set udg_X9 = GetRandomInt(1, 100) set udg_X10 = 35 set udg_Caster4 = GetSpellAbilityUnit() if ( Trig_Start5_Func007C() ) then set bj_forLoopAIndex = 1 set bj_forLoopAIndexEnd = udg_X10 loop exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd call CreateNUnitsAtLoc( 1, 'h00F', GetOwningPlayer(udg_Caster4), GetUnitLoc(udg_Caster4), ( GetUnitFacing(udg_Caster4) + ( 10.00 * I2R(GetForLoopIndexA()) ) ) ) set udg_DummyFire[GetForLoopIndexA()] = GetLastCreatedUnit() set bj_forLoopAIndex = bj_forLoopAIndex + 1 endloop call EnableTrigger( gg_trg_Move5 ) call TriggerSleepAction( 1.00 ) call DisableTrigger( gg_trg_Move5 ) set bj_forLoopAIndex = 1 set bj_forLoopAIndexEnd = udg_X10 loop exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd call RemoveUnit( udg_DummyFire[GetForLoopIndexA()] ) set bj_forLoopAIndex = bj_forLoopAIndex + 1 endloop call EnableTrigger( GetTriggeringTrigger() ) else endif endfunction
//=========================================================================== function InitTrig_Start5 takes nothing returns nothing set gg_trg_Start5 = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ( gg_trg_Start5, EVENT_PLAYER_UNIT_SPELL_EFFECT ) call TriggerAddCondition( gg_trg_Start5, Condition( function Trig_Start5_Conditions ) ) call TriggerAddAction( gg_trg_Start5, function Trig_Start5_Actions ) endfunction
и
Code
function Trig_Move5_Func001Func005Func001C takes nothing returns boolean if ( not ( IsUnitType(GetEnumUnit(), UNIT_TYPE_STRUCTURE) == false ) ) then return false endif if ( not ( IsUnitAliveBJ(GetEnumUnit()) == true ) ) then return false endif if ( not ( IsUnitAlly(GetEnumUnit(), GetOwningPlayer(udg_Caster4)) == true ) ) then return false endif if ( not ( GetOwningPlayer(GetEnumUnit()) != GetOwningPlayer(udg_Caster4) ) ) then return false endif return true endfunction
SunCreep, Гуи в жасс. Бросай этим заниматся(если не для изучения функций) И что тут сложного кроме как координат?! Снаряды это спец эффекты или даммики?
Добавлено (10-08-2011, 00:23) --------------------------------------------- [DS], Да че ты паришся на хгм много таких статей, нубы их не читают им легче создать тему типа, помогите сделать скил на жассе а потом спрашивать что каждая функция обозначает.
координаты?Сложно?Может я не о том думаю? Дамми,и к стати больно нагружают комп в момент жизни. Ещё раз говорю у меня проблема с тем,что я не умею пользоваться MuI,то бишь подключать к глобальным переменным локальные.
[DS], дело не в массивах.Дело в том,что я хочу именно используя локальные переменные,я хочу сделать именно этим способом.Но видимо придётся на массивах.
Простой пример (создания и переноса локалок) если скил делается в 2 трига: должна быть переменная типа хэш-таблица(Н) и при ините карты set udg_H=InitHashtable()
local unit u=GetTriggerUnit() - локальная u будет тот кто применил скил. local integer id - локальная целочисленная старт таймер 0.03 многократный set id=GetHandleId (последний созданый таймер) - локальная ид будет равна номеру таймера call SaveUnitHandle(udg_H,id,1,u) - сохраняет юнита u в хэш, дальше обнуление локалки. 2 триг с:истечение таймера из 1 д: сначала нужен номер под которым сохранили (то есть этого таймера), local integer id=GetHandleId(GetExpieredTimer) - номер таймера по событию, а именно то число под которым и сохранили. local unit u=LoadUnitHandle(udg_H,id,1) - создаем локальну юнита и загружаем в нее сохраненного юнита. После можем делать с юнитом что хотим. 1)это способ переноса локальных из трига в триг 2) все же без локального таймера, мало эфективно 3 писал по памяти 4 надеюсь поможет сделать шаг в жасс