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

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

Ответ
 
PiCkUpEr_AsT

offline
Опыт: 1,060
Активность:
Взрыв отталкивающий от точки
Код:
function Blast_Wave_Arrow_Timer takes nothing returns boolean
    local trigger t=GetTriggeringTrigger()
    local integer table=GetHandleId(t)
    local unit target=(LoadUnitHandle(udg_h,(table),(17)))
    local unit u=(LoadUnitHandle(udg_h,(table),(18)))
    local real angle=(LoadReal(udg_h,(table),(13)))
    local real x=GetUnitX(target)
    local real y=GetUnitY(target)
    local real speed=25.0
    local unit loc
    if GetTriggerEvalCount(t)>13 then
        call FlushChildHashtable(udg_h,(table))
        call SaveInteger(udg_h,(GetHandleId((target))),((4260)),(2))
        call DestroyTrigger(t)
    else
        call DestroyEffect(AddSpecialEffect("Environment\\SmallBuildingFire\\SmallBuildingFire2.mdl",x,y))
        if((LoadInteger(udg_h,(GetHandleId((target))),((4261))))==1)==false then
            call SetUnitX(target,x+speed*Cos(angle))
            call SetUnitY(target,y+speed*Sin(angle))
            //call SetUnitPosition(target,x+speed*Cos(angle),y+speed*Sin(angle))
        endif
    endif
    set t=null
    set target=null
    set loc=null
    set u=null
    return false
endfunction

function Blast_Wave_Arrow_Act takes nothing returns nothing
    local trigger t=CreateTrigger()
    local integer table=GetHandleId(t)
    local unit target=GetEnumUnit()
    local real x=GetSpellTargetX()
    local real y=GetSpellTargetY()
    local real angle=bj_RADTODEG *Atan2(y-GetUnitY(target),x-GetUnitX(target))
    call DestroyEffect(AddSpecialEffectTarget("Environment\\SmallBuildingFire\\SmallBuildingFire2.mdl",target,"chest"))
    call UnitDT(GetTriggerUnit(),target,3,50.+GetHeroAgi(GetTriggerUnit(),true))
    call SaveInteger(udg_h,(GetHandleId((target))),((4260)),(1))
    call SaveUnitHandle(udg_h,(table),(17),(target))
    call SaveUnitHandle(udg_h,(table),(18),(GetTriggerUnit()))
    call SaveReal(udg_h,(table),(13),angle*1.)
    call TriggerRegisterTimerEvent(t,0.04,true)
    call TriggerAddCondition(t,Condition(function Blast_Wave_Arrow_Timer))
    set t=null
    set target=null
endfunction


Старый 01.12.2011, 10:55
asesmo
Я I Jag Ich Jeg Ja Minä!
offline
Опыт: 8,073
Активность:
И в чем собственно проблема?
Старый 01.12.2011, 11:03
PiCkUpEr_AsT

offline
Опыт: 1,060
Активность:
"взрыв отталкивающий ОТ ТОЧКИ" на скрине видно(стрелки ещё нарисовал для наглядности), что некоторым юнитам угол движения неправильно задан
Старый 01.12.2011, 11:18
Lipen

offline
Опыт: 1,550
Активность:
PiCkUpEr_AsT:
косинус и синус считается с угла, а не с радиан
Как раз таки Sin() и Cos() берут радианы. А вот SinBJ & CosBJ - градусы.
function SinBJ takes real degrees returns real
    return Sin(degrees * bj_DEGTORAD)
endfunction
Сделай так:
local real angle = Atan2(y-GetUnitY(target), x-GetUnitX(target))
Старый 01.12.2011, 13:02
Ответ

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

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

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

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



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