XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
silumin, перемещение осуществяеш:
путем создания точки(позция юнита)
двигаеш ее
относительно ее двигаеш юнита

вроде понял, еще денек другой нужен чтобы понять почему именно такие углы(геометрию надо учить больше =\)

вообщем спасибо, массив спиральных юнитов получился
тему можно закрыть
Старый 31.03.2010, 00:02
silumin

offline
Опыт: 11,153
Активность:
Цитата:
Сообщение от AlexKARASb
массив спиральных юнитов получился

Это как? ))
Вот 2 наброска в пэинте на тему "Как я решал эту задачу"...
Миниатюры
Кликните на картинку для увеличения
Название:  SP1.JPG
Просмотров: 45
Размер:  12.6 Кбайт  Кликните на картинку для увеличения
Название:  SP2.JPG
Просмотров: 53
Размер:  27.5 Кбайт  
Старый 31.03.2010, 01:18
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
Цитата:
Сообщение от silumin
Это как? ))

сделал движение н-го количества юнитов на основе твоего примера только, не локаций(udg_PL), а координат

из примеров могу сказать одно - 4(по 5 системе) по геометрии у меня оч зря стоит :D, ниче прорвемся
Старый 31.03.2010, 15:21
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
Цитата:
Сообщение от silumin
Это как? ))

Вот ты хотел узнать как:
» code

Код:
function Circus_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A00G'
endfunction

struct circus
group gr
group gf
real array x[30]
real array y[30]
real a
unit c
integer i
integer keys
integer i3
endstruct

function Circus_Moving takes nothing returns nothing
local circus cs=LoadInteger(udg_Hash,GetHandleId(GetExpiredTimer()),4)
local unit e= GetEnumUnit()
local real h1= GetUnitFlyHeight(e)-50.
local real D1= SquareRoot(2500.-h1*h1)
local real Ang2= Atan2(h1,D1)+cs.keys*0.261
local real h2 = 50.*Sin(Ang2)
local real D2 = SquareRoot(2500.-h2*h2)
if (cs.x[0]-cs.x[cs.i3])*(cs.x[0]-cs.x[cs.i3])+(cs.y[0]-cs.y[cs.i3])*(cs.y[0]-cs.y[cs.i3])<=1000000 and MapContainsCoords(GetUnitX(e),GetUnitY(e)) then
if Ang2>1.5708 and cs.keys>0 then
  set cs.keys = -1*cs.keys
endif
if Ang2<-1.5708 and cs.keys<0 then
  set cs.keys = -1*cs.keys
endif
set h2 = h2 + 50
set cs.x[cs.i3]=cs.x[cs.i3]+10*Cos(cs.a)
set cs.y[cs.i3]=cs.y[cs.i3]+10*Sin(cs.a)
call SetUnitFlyHeight(e,h2,0.)
if cs.keys>0 then
   call SetUnitX(e,cs.x[cs.i3]+D2*Cos(cs.a-1.5708))
   call SetUnitY(e,cs.y[cs.i3]+D2*Sin(cs.a-1.5708))
else
   call SetUnitX(e,cs.x[cs.i3]+D2*Cos(cs.a+1.5708))
   call SetUnitY(e,cs.y[cs.i3]+D2*Sin(cs.a+1.5708))
endif
set cs.i3=cs.i3+1
else
call RemoveUnit(e)
endif
set e=null
endfunction

function Cirsus_Move takes nothing returns nothing
local timer t=GetExpiredTimer()
local circus cs=LoadInteger(udg_Hash,GetHandleId(t),0)
call SaveInteger(udg_Hash,GetHandleId(t),4,cs)
set cs.i3=1
call ForGroup(cs.gr,function Circus_Moving)
if cs.i>=10 and CountUnitsInGroup(cs.gr)==0 then
call PauseTimer(t)
call cs.destroy()
call FlushChildHashtable(udg_Hash,GetHandleId(t))
call DestroyTimer(t)
endif
set t=null
endfunction

function Cirsus_CreateUnits takes nothing returns nothing
local timer t=GetExpiredTimer()
local circus cs=LoadInteger(udg_Hash,GetHandleId(t),0)
local unit u
if cs.i<=10 then
set u=CreateUnit(GetOwningPlayer(cs.c),'h00M',cs.x[0]+40*Cos(cs.a),cs.y[0]+40*Sin(cs.a),cs.a/0.01745)
set cs.x[cs.i]=GetUnitX(u)
set cs.y[cs.i]=GetUnitY(u)
call UnitAddAbility(u,'Arav')
call UnitRemoveAbility(u,'Arav')
call SetUnitFlyHeight(u,50.,0.)
call GroupAddUnit(cs.gr,u)
set cs.i=cs.i+1
else
call PauseTimer(t)
call RemoveSavedInteger(udg_Hash,GetHandleId(t),0)
call DestroyTimer(t)
endif
set t=null
endfunction

function Circus_Actions takes nothing returns nothing
local circus cs=circus.create()
local timer t=CreateTimer()
local timer t2=CreateTimer()
local location l=GetSpellTargetLoc()
local real x=GetLocationX(l)
local real y=GetLocationY(l)
set cs.gr=CreateGroup()
set cs.c=GetSpellAbilityUnit()
set cs.x[0]=GetUnitX(cs.c)
set cs.y[0]=GetUnitY(cs.c)
set cs.a=Atan2(y-cs.y[0],x-cs.x[0])
set cs.i=1
set cs.keys=1
set cs.gf=CreateGroup()
call SaveInteger(udg_Hash,GetHandleId(t),0,cs)
call TimerStart(t,0.03,true,function Cirsus_Move)
call SaveInteger(udg_Hash,GetHandleId(t2),0,cs)
call TimerStart(t2,0.1,true,function Cirsus_CreateUnits)
call RemoveLocation(l)
set l=null
set t=null
set t2=null
endfunction

//===========================================================================
function InitTrig_Suiton_Circus takes nothing returns nothing
    set gg_trg_Suiton_Circus = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Suiton_Circus, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Suiton_Circus, Condition( function Circus_Conditions))
    call TriggerAddAction( gg_trg_Suiton_Circus,function Circus_Actions)
endfunction

Старый 28.04.2010, 22:25
silumin

offline
Опыт: 11,153
Активность:
AlexKARASb, былобы ещё очень кстати необходимые названия глобалок, равкоды юнитов и абилок... =)
Старый 29.04.2010, 22:44
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
глобалок нет
спел любой канал с точкой 'A00G'
юнита поставь летающего 'h00M'
AlexKARASb добавил:
там в коде использованы только структуры, хеша чуток
обнуление структур не делал тк пока не было времени на этом акцент делать
Старый 29.04.2010, 22:52
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 22:52.