Borodach | Дата: Суббота, 07 Апреля 2012, 13:06:41 | Сообщение # 1 |
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
| Вот есть герой, применяет способность и создается дамми который крутится вокруг героя, потом еще 1 создается и они должны двигаться противоположено. То есть 1 юнит: летает с любым углом 2 юнита: 1 под углом 180 а другой 0 3 юнита: 1 под углом 120, 2 - 120 и 3 - 120 4 юнита уже по 90 Пробовал: (360/количество)*№ юнита + 3. Но почему то криво...
Karamba
|
|
|
|
Borodach | Дата: Воскресенье, 08 Апреля 2012, 03:08:07 | Сообщение # 3 |
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
| Code function Trig_BloodDecay_Conditions takes nothing returns boolean return GetSpellAbilityId()==BloodDecayId() endfunction
function MoveBloodToHero takes nothing returns nothing local timer t=GetExpiredTimer() local integer id=GetHandleId(t) local unit u=LoadUnitHandle(udg_H,id,0) local unit d=LoadUnitHandle(udg_H,id,1) local integer count=LoadInteger(udg_H,GetHandleId(u),-1) local integer i=LoadInteger(udg_H,id,1) local real x1=GetWidgetX(u) local real y1=GetWidgetY(u) local real x2=GetWidgetX(d) local real y2=GetWidgetY(d) local real dist=Dist(x1,y1,x2,y2) local real a=Atan2(y2-y1,x2-x1) local real array temp set x2=x2-(dist/20)*Cos(a) set y2=y2-(dist/20)*Sin(a) if dist>120. then call SetUnitX(d,x2) call SetUnitY(d,y2) else //Тут должно выполнятся круговое движение //перепробовал кучу вариантов, уже запутался что к чему endif call SaveInteger(udg_H,id,1,i+3) endfunction
function Trig_BloodDecay_Actions takes nothing returns nothing local unit u=GetTriggerUnit() local group g=CreateGroup() local unit e local timer t local integer id=0 local integer count=LoadInteger(udg_H,GetHandleId(u),-1) local unit d call GroupEnumUnitsInRange(g,GetSpellTargetX(),GetSpellTargetY(),350.,null) loop set e=FirstOfGroup(g) exitwhen e==null or count==5 if GetWidgetLife(e)<=0. then set t=CreateTimer() set id=GetHandleId(t) set d=CreateUnit(GetOwningPlayer(u),'n002',GetWidgetX(e),GetWidgetY(e),0.) set count=count+1 call SaveInteger(udg_H,GetHandleId(u),-1,count) call SaveUnitHandle(udg_H,id,0,u) call SaveUnitHandle(udg_H,id,1,d) call SaveInteger(udg_H,GetHandleId(d),1,count) call TimerStart(t,.04,true,function MoveBloodToHero) call RemoveUnit(e) endif call GroupRemoveUnit(g,e) endloop endfunction
//=========================================================================== function InitTrig_BloodDecay takes nothing returns nothing set gg_trg_BloodDecay=CreateTrigger() call TriggerRegisterAnyUnitEventBJ(gg_trg_BloodDecay,EVENT_PLAYER_UNIT_SPELL_EFFECT) call TriggerAddCondition(gg_trg_BloodDecay,Condition(function Trig_BloodDecay_Conditions)) call TriggerAddAction(gg_trg_BloodDecay,function Trig_BloodDecay_Actions) endfunction Добавлено (08 Апрель 2012, 03:08:07) --------------------------------------------- Так пробовал все равно не то... Code function Trig_BloodDecay_Conditions takes nothing returns boolean return GetSpellAbilityId()==BloodDecayId() endfunction
function MoveBloodToHero takes nothing returns nothing local timer t=GetExpiredTimer() local integer id=GetHandleId(t) local unit u=LoadUnitHandle(udg_H,id,0) local unit d=LoadUnitHandle(udg_H,id,1) local integer count=LoadInteger(udg_H,GetHandleId(u),-1) local integer i=LoadInteger(udg_H,GetHandleId(d),2) local real x1=GetWidgetX(u) local real y1=GetWidgetY(u) local real x2=GetWidgetX(d) local real y2=GetWidgetY(d) local real dist=Dist(x1,y1,x2,y2) local real a=Atan2(y2-y1,x2-x1) local real array data set x2=x2-(dist/20)*Cos(a) set y2=y2-(dist/20)*Sin(a) if i>360 then set i=0 endif if dist>120. then call SetUnitX(d,x2) call SetUnitY(d,y2) else set data[1]=GetWidgetX(d) set data[2]=GetWidgetY(d) set data[4]=(360/count)*LoadInteger(udg_H,GetHandleId(d),1)+i set data[7] = PolarX(x1,80.,data[4]) set data[8] = PolarY(y1,80.,data[4]) set data[5] = PolarX(data[1],Dist(data[1],data[2],data[7],data[8])/6,GetAngle(data[1],data[2],data[7],data[8])) set data[6] = PolarY(data[2],Dist(data[1],data[2],data[7],data[8])/6,GetAngle(data[1],data[2],data[7],data[8])) call SetUnitX(d,data[5]) call SetUnitY(d,data[6]) endif call SaveInteger(udg_H,GetHandleId(d),2,i+3) endfunction
function Trig_BloodDecay_Actions takes nothing returns nothing local unit u=GetTriggerUnit() local group g=CreateGroup() local unit e local timer t local integer id=0 local integer count=LoadInteger(udg_H,GetHandleId(u),-1) local unit d call GroupEnumUnitsInRange(g,GetSpellTargetX(),GetSpellTargetY(),350.,null) loop set e=FirstOfGroup(g) exitwhen e==null or count==5 if GetWidgetLife(e)<=0. then set t=CreateTimer() set id=GetHandleId(t) set d=CreateUnit(GetOwningPlayer(u),'n002',GetWidgetX(e),GetWidgetY(e),0.) set count=count+1 call SaveInteger(udg_H,GetHandleId(u),-1,count) call SaveUnitHandle(udg_H,id,0,u) call SaveUnitHandle(udg_H,id,1,d) call SaveInteger(udg_H,GetHandleId(d),1,count) call TimerStart(t,.04,true,function MoveBloodToHero) call RemoveUnit(e) endif call GroupRemoveUnit(g,e) endloop endfunction
//=========================================================================== function InitTrig_BloodDecay1 takes nothing returns nothing set gg_trg_BloodDecay1=CreateTrigger() call TriggerRegisterAnyUnitEventBJ(gg_trg_BloodDecay1,EVENT_PLAYER_UNIT_SPELL_EFFECT) call TriggerAddCondition(gg_trg_BloodDecay1,Condition(function Trig_BloodDecay_Conditions)) call TriggerAddAction(gg_trg_BloodDecay1,function Trig_BloodDecay_Actions) endfunction
Karamba
|
|
|
|
Extremator | Дата: Воскресенье, 08 Апреля 2012, 08:26:07 | Сообщение # 4 |
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
| ( 360 / число даммиков ) * номер даммика = угол
( 360 / число даммиков ) * номер даммика + N = угол с вращениеи
ну и переменную создашь для вращения... реальное число... и плюсуешь потихоньку его N = (N + 3.00) каждый раз...
|
|
|
|