Сейчас 03:28:49 Среда, 27 ноября, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
[Вопрос] Круговое дижение
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
 

DreiiДата: Суббота, 07 Апреля 2012, 13:49:48 | Сообщение # 2
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
Quote (Borodach)
Пробовал: (360/количество)*№ юнита + 3. Но почему то криво...

код in studio


 

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) каждый раз...
 

  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz