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

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

Ответ
 
Windrunner
Верь мне!
offline
Опыт: 4,565
Активность:
Не правильно работает код

globals
unit array arrow
real array targetx
real array targety
integer number = 0
location array targetloc
endglobals

function DistanceBetweenCoords takes real x1, real y1, real x2, real y2 returns real
return SquareRoot((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)) 
endfunction

function Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A000'
endfunction

function moving takes integer i returns nothing
local unit u = arrow[i]
local real ux = GetUnitX(u)
local real uy = GetUnitY(u)
local real tx = targetx[i]
local real ty = targety[i]
local location loc1 = GetUnitLoc(u)
local location loc2 = targetloc[i]
local real a  = bj_RADTODEG * Atan2(targety[number] - GetUnitY(arrow[number]),targetx[number] - GetUnitX(arrow[number]))
set a = DistanceBetweenPoints(loc1,loc2)
BJDebugMsg(R2S(a))
if (DistanceBetweenPoints(loc2,loc1) >= 200) then
call SetUnitX(u,GetUnitX(u) + 40 * Cos(a * .0174532))
call SetUnitY(u,GetUnitY(u) + 40 * Sin(a * .0174532))
else
arrow[number] = arrow[i]
targetx[number] = tx
targety[number] = ty
targetloc[number] = loc2
number = number - 1
BJDebugMsg("11")
endif
endfunction

function looping takes nothing returns nothing
local integer i = 1
loop
exitwhen i > number
call moving(i)
i = i + 1
endloop
endfunction

function Actions takes nothing returns nothing
set number = number + 1
arrow[number] = CreateUnit(GetOwningPlayer(GetSpellAbilityUnit()),'hfoo',GetUnitX(GetSpellAbilityUnit()),GetUnitY(Ge​tSpellAbilityUnit()),GetUnitFacing(GetSpellAbilityUnit()))
targetx[number] = GetSpellTargetX()
targety[number] = GetSpellTargetY()
targetloc[number] = GetSpellTargetLoc()
endfunction

//===========================================================================
function InitTrig_arrow takes nothing returns nothing
    local timer t = CreateTimer()
    TimerStart(t,0.05,true,function looping)
    set gg_trg_arrow = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_arrow, EVENT_PLAYER_UNIT_SPELL_CAST )
    call TriggerAddCondition( gg_trg_arrow, Condition( function Conditions ) )
    call TriggerAddAction( gg_trg_arrow, function Actions )
endfunction
Юнит при использовании способности вместо движения к точке применения способности летит по окружности постепенно увеличивая радиус помогите почему он не правильно работает?
Карта прилагается
Пожайлуста помогите мне
Windrunner добавил:
З.Ы. Тригер недоделан нету урона и тд мне важно сейчас разобратся с движением=)

Отредактировано ShadoW DaemoN, 27.11.2009 в 18:08.
Старый 27.11.2009, 13:59
RazArt

offline
Опыт: 11,197
Активность:
Код:
function PolarX takes location loc, real dist, real angle returns real
    return GetLocationX(loc) + dist * Cos(angle * bj_DEGTORAD)
endfunction

function PolarY takes location loc, real dist, real angle returns real
    return GetLocationY(loc) + dist * Sin(angle * bj_DEGTORAD)
endfunction

function moving takes integer i returns nothing
//---
local real a=AngleBetweenPoints(loc1, loc2)
//---
call SetUnitPositionLoc( u, Location(PolarX(UnitPoint, 40, a),PolarY(UnitPoint, 40, a)))
//---
endfunction

Так мне кажется лучше будет, а спел щас напишу

Отредактировано RazArt, 27.11.2009 в 14:25.
Старый 27.11.2009, 14:17
Windrunner
Верь мне!
offline
Опыт: 4,565
Активность:
RazArt, ну мб напишешь как ето юзать то?=) и как вообще будет спелл выглядеть чтобы все работало?
Старый 27.11.2009, 15:24
RazArt

offline
Опыт: 11,197
Активность:
Старый 27.11.2009, 16:34
Ответ

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

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

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

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



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