А что если не использовать цикл, а просто в таймерной функции использовать x_start + set_dist*Cos(Rn*step) ,y_start + set_dist*Sin(Rn*step) т.е. декорации будут идти по кругу) Всего будет четыре 1 с угла 45*, 2 с угла 315*, 3 с угла 225*, 4 с 135* шаг 5* Вопрос в одном, плавно ли они будут перемещаться, для этого будет фиксированное создание при помощи CreateDeadDestructable(), и быстрое удаление предыдущей при помощи RemoveDestructable() и все это в шаге таймера 0.1 сек.
Naturekid, ну да, а мы хотели увидеть целые часы построенные лишь на одном триггере, на котором висит одна функция под таймером, и которая манипулирует другими функциями? И в карте такая карусель, и ниты и декорации двигаются. Допустим Rn=5.00 set_dist=700.000 step=1.00 шаг step идёт от 1 до 360/5(72) И манипулирует декорацией так.
function DestructableAutoRun takes nothing returns nothing if udg_Logic == -1 then // <Декорация 1> if udg_d_step[1] <= 72 and udg_d_step[1] > 1 then set udg_d_step[1] = udg_d_step[1] - 1 else set udg_d_step[1] = 72 endif // </Декорация 1>
// <Декорация 2> if udg_d_step[2] <= 72 and udg_d_step[2] > 1 then set udg_d_step[2] = udg_d_step[2] - 1 else set udg_d_step[2] = 72 endif // </Декорация 2>
// <Декорация 3> if udg_d_step[3] <= 72 and udg_d_step[3] > 1 then set udg_d_step[3] = udg_d_step[3] - 1 else set udg_d_step[3] = 72 endif // </Декорация 3>
// <Декорация 4> if udg_d_step[4] <= 72 and udg_d_step[4] > 1 then set udg_d_step[4] = udg_d_step[4] - 1 else set udg_d_step[4] = 72 endif // </Декорация 4> endif //- 1 if udg_Logic == 1 then // <Декорация 1> if udg_d_step[1] < 72 and udg_d_step[1] >= 1 then set udg_d_step[1] = udg_d_step[1] + 1 else set udg_d_step[1] = 1 endif // </Декорация 1>
// <Декорация 2> if udg_d_step[2] < 72 and udg_d_step[2] >= 1 then set udg_d_step[2] = udg_d_step[2] + 1 else set udg_d_step[2] = 1 endif // </Декорация 2>
// <Декорация 3> if udg_d_step[3] < 72 and udg_d_step[3] >= 1 then set udg_d_step[3] = udg_d_step[3] + 1 else set udg_d_step[3] = 1 endif // </Декорация 3>
// <Декорация 4> if udg_d_step[4] < 72 and udg_d_step[4] >= 1 then set udg_d_step[4] = udg_d_step[4] + 1 else set udg_d_step[4] = 1 endif // </Декорация 4> endif //+1
//Данна функция для управления песевдо декорациями. endfunction
function DestructableAutoRun - вертит ящики(дамми юниты переделанные под декорацию ящиков) function DestructableResouceStart - создает ящики, но перед созданием мы устанавливаем некоторые значения.
Добавлено (15 Апреля 2013, 00:41:48) ---------------------------------------------
Код
function PS takes unit u, real x, real y returns real local real dx = x - GetUnitX( u ) local real dy = y - GetUnitY( u ) return SquareRoot( dx * dx + dy * dy ) endfunction
function FiendsSet takes nothing returns nothing //позиции set udg_mUnitPosX[1] = udg_PosX[1] set udg_mUnitPosY[1] = udg_PosY[1] set udg_mUnitPosX[2] = udg_PosX[2] set udg_mUnitPosY[2] = udg_PosY[2] set udg_mUnitPosX[3] = udg_PosX[3] set udg_mUnitPosY[3] = udg_PosY[3] set udg_mUnitPosX[4] = udg_PosX[4] set udg_mUnitPosY[4] = udg_PosY[4] //шаги set udg_m_steps[1] = 1 set udg_m_steps[2] = 2 set udg_m_steps[3] = 3 set udg_m_steps[4] = 4 endfunction
function FiendsMove takes nothing returns nothing //Вычисляем шаги -1 логики if udg_Logic == -1 then ////============#Пешка 1#================= if PS( udg_unit[3], udg_PosX[udg_m_steps[1]], udg_PosY[udg_m_steps[1]] ) <=20. then if udg_m_steps[1] <=4 and udg_m_steps[1] >1 then set udg_m_steps[1] = udg_m_steps[1] -1 else set udg_m_steps[1] = 4 endif endif ////============#Пешка 1#=================
////============#Пешка 2#================= if PS( udg_unit[4], udg_PosX[udg_m_steps[2]], udg_PosY[udg_m_steps[2]] ) <=20. then if udg_m_steps[2] <=4 and udg_m_steps[2] >1 then set udg_m_steps[2] = udg_m_steps[2] -1 else set udg_m_steps[2] = 4 endif endif ////============#Пешка 2#=================
////============#Пешка 3#================= if PS( udg_unit[5], udg_PosX[udg_m_steps[3]], udg_PosY[udg_m_steps[3]] ) <=20. then if udg_m_steps[3] <=4 and udg_m_steps[3] >1 then set udg_m_steps[3] = udg_m_steps[3] -1 else set udg_m_steps[3] = 4 endif endif ////============#Пешка 3#=================
////============#Пешка 4#================= if PS( udg_unit[6], udg_PosX[udg_m_steps[4]], udg_PosY[udg_m_steps[4]] ) <=20. then if udg_m_steps[4] <=4 and udg_m_steps[4] >1 then set udg_m_steps[4] = udg_m_steps[4] -1 else set udg_m_steps[4] = 4 endif endif ////============#Пешка 4#================= endif //=============================== //Вычисляем шаги 1 логики if udg_Logic == 1 then ////============#Пешка 1#================= if PS(udg_unit[3], udg_PosX[udg_m_steps[1]], udg_PosY[udg_m_steps[1]] ) <=20. then if udg_m_steps[1] <4 and udg_m_steps[1] >=1 then set udg_m_steps[1] = udg_m_steps[1] + 1 else set udg_m_steps[1] = 1 endif endif ////============#Пешка 1#=================
////============#Пешка 2#================= if PS( udg_unit[4], udg_PosX[udg_m_steps[2]], udg_PosY[udg_m_steps[2]] ) <=20. then if udg_m_steps[2] <4 and udg_m_steps[2] >=1 then set udg_m_steps[2] = udg_m_steps[2] + 1 else set udg_m_steps[2] = 1 endif endif ////============#Пешка 2#=================
////============#Пешка 3#================= if PS( udg_unit[5], udg_PosX[udg_m_steps[3]], udg_PosY[udg_m_steps[3]] ) <=20. then if udg_m_steps[3] <4 and udg_m_steps[3] >=1 then set udg_m_steps[3] = udg_m_steps[3] + 1 else set udg_m_steps[3] = 1 endif endif ////============#Пешка 3#=================
function DuosReturn takes nothing returns nothing if GetUnitX(udg_unit[1])!= 263.7 or GetUnitY(udg_unit[1])!= 1.4 then call SetUnitX(udg_unit[1],263.7) call SetUnitY(udg_unit[1],1.4) call IssueImmediateOrder(udg_unit[1],"stop") endif endfunction
function AliceReturn takes nothing returns nothing if GetUnitX(udg_unit[2])!= 253.8 or GetUnitY(udg_unit[1])!= 306.8 then call SetUnitX(udg_unit[2],253.8) call SetUnitY(udg_unit[2],306.8) call IssueImmediateOrder(udg_unit[2],"stop") call SetUnitFacing(udg_unit[2],270.) endif endfunction
function CheckAlice takes nothing returns nothing if GetUnitAbilityLevel(udg_unit[102],'B000') > 0 then call UnitRemoveAbility(udg_unit[102],'B000') set udg_Logic = -1 endif if GetUnitAbilityLevel(udg_unit[102],'B001') > 0 then call UnitRemoveAbility(udg_unit[102],'B001') set udg_Logic = 1 endif if GetUnitAbilityLevel(udg_unit[102],'B002') > 0 then call UnitRemoveAbility(udg_unit[102],'B002') set udg_Logic = 0 endif endfunction
function DestructableResouceStart takes nothing returns nothing set udg_Rn = 5 set udg_d_step[1] = 9 set udg_d_step[2] = 27 set udg_d_step[3] = 45 set udg_d_step[4] = 63 set udg_init_x = 256 set udg_init_y = -2.2 set udg_set_dist = 700
//Данна функция для установки карусели псевдо-декораций <img rel="usm" src="http://warcraft3ft.info/image/smiles/biggrin.gif" border="0" align="absmiddle" alt=":D" /> endfunction
function DestructableAutoRun takes nothing returns nothing if udg_Logic == -1 then // <Декорация 1> if udg_d_step[1] <= 72 and udg_d_step[1] > 1 then set udg_d_step[1] = udg_d_step[1] - 1 else set udg_d_step[1] = 72 endif // </Декорация 1>
// <Декорация 2> if udg_d_step[2] <= 72 and udg_d_step[2] > 1 then set udg_d_step[2] = udg_d_step[2] - 1 else set udg_d_step[2] = 72 endif // </Декорация 2>
// <Декорация 3> if udg_d_step[3] <= 72 and udg_d_step[3] > 1 then set udg_d_step[3] = udg_d_step[3] - 1 else set udg_d_step[3] = 72 endif // </Декорация 3>
// <Декорация 4> if udg_d_step[4] <= 72 and udg_d_step[4] > 1 then set udg_d_step[4] = udg_d_step[4] - 1 else set udg_d_step[4] = 72 endif // </Декорация 4> endif //- 1 if udg_Logic == 1 then // <Декорация 1> if udg_d_step[1] < 72 and udg_d_step[1] >= 1 then set udg_d_step[1] = udg_d_step[1] + 1 else set udg_d_step[1] = 1 endif // </Декорация 1>
// <Декорация 2> if udg_d_step[2] < 72 and udg_d_step[2] >= 1 then set udg_d_step[2] = udg_d_step[2] + 1 else set udg_d_step[2] = 1 endif // </Декорация 2>
// <Декорация 3> if udg_d_step[3] < 72 and udg_d_step[3] >= 1 then set udg_d_step[3] = udg_d_step[3] + 1 else set udg_d_step[3] = 1 endif // </Декорация 3>
// <Декорация 4> if udg_d_step[4] < 72 and udg_d_step[4] >= 1 then set udg_d_step[4] = udg_d_step[4] + 1 else set udg_d_step[4] = 1 endif // </Декорация 4> endif //+1
function Trig_OneTriggerAliceWorld_Actions takes nothing returns nothing set udg_Logic = -1 // Установка логики 1 0 -1 set udg_unit[1] = CreateUnit(Player(0),'Hkal',263.7,1.4,0.) // Дуос set udg_unit[2] = CreateUnit(Player(0),'n000',253.8,306.8,270.) // Alice set udg_unit[102] = CreateUnit(Player(0),'Hjai',-854.3,50.1,GetRandomReal(0., 360.)) // Alice правит миром, а инфо - полное говно. set udg_unit[3] = CreateUnit(Player(0),'hfoo',-46.5,326.4,45.) // Пешка первая set udg_unit[4] = CreateUnit(Player(0),'hfoo',545.5,315.5,315.) // Пешка вторая set udg_unit[5] = CreateUnit(Player(0),'hfoo',514.5,-257.7,225.) // Пешка тертья set udg_unit[6] = CreateUnit(Player(0),'hfoo',-1.6,-240.2,135.) // Пешка четвёртая set udg_PosX[1] = -46.5 // пешка 1 x set udg_PosY[1] = 326.4 // пешка 1 y set udg_PosX[2] = 545.5 // пешка 2 x set udg_PosY[2] = 315.5 // пешка 2 y set udg_PosX[3] = 514.5 // пешка 3 x set udg_PosY[3] = -257.7 // пешка 3 y set udg_PosX[4] = -1.6 // пешка 4 x set udg_PosY[4] = -240.2 // пешка 4 y call FiendsSet() // Настройка пешек call DestructableResouceStart() // Установка карусели декорации. call PlayMusic(gg_snd_alice_world) // начало веселья call TimerStart(CreateTimer(),.03,true,function work_wolfy) // начало веселья endfunction
//=========================================================================== function InitTrig_OneTriggerAliceWorld takes nothing returns nothing set gg_trg_OneTriggerAliceWorld = CreateTrigger( ) call TriggerAddAction( gg_trg_OneTriggerAliceWorld, function Trig_OneTriggerAliceWorld_Actions ) endfunction