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

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

Ответ
 
LostCoast

offline
Опыт: 2,633
Активность:
Совмещение спеллов
Всем привет. Мне нужно из двух спелов сделать один. Суть спелла:создается дамни-юнит(снаряд) и летит по прямой,в первом спелле есть конечная точка(т.е. снаряд летит и снижается до земли(до точки каста), второй всегда летит прямо, не снижаясь, и при столкновении с возвышенность взрывается). Суть первого спелла в том что снаряд может лететь не только по прямой но и в гору и с гору вниз, второй только прямо. Мне нужно чтобы у первого спелла не было конечной точки, т.е. что он также летел прямо как второй скил, но при этом чтобы он мог лететь в гору вверх и с горы вниз. Поиском не нашёл данного скила, только по отдельности. В карте есть эти два скила.
Миниатюры
Кликните на картинку для увеличения
Название:  пример.png
Просмотров: 30
Размер:  33.3 Кбайт  
Прикрепленные файлы
Тип файла: w3x exm.w3x (23.1 Кбайт, 10 просмотров )
[+] замечание от Hanabishi: Название темы не отражает суть вопроса.
Старый 18.05.2011, 14:48
Suite
┌_____┐
offline
Опыт: 11,222
Активность:
а абилки в гуи? Если в жаз то спел в студию
Старый 18.05.2011, 16:31
LostCoast

offline
Опыт: 2,633
Активность:
конечно в jass'e

» Первый скилл

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

function GetLocZ takes real x, real y returns real
    local integer i = 0
    call MoveLocation(udg_L[i],x,y)
    return GetLocationZ(udg_L[i])
endfunction

function MoveUnit takes unit u, real x, real y, real z returns nothing
    if x != 0.00 then
    call SetUnitX(u,x)
    endif
    if y != 0.00 then
    call SetUnitY(u,y)
    endif
    if z != 0.00 then
    call SetUnitFlyHeight(u,z,0.00)
    endif
endfunction

function Move_B takes nothing returns nothing
    local timer t = GetExpiredTimer()     
    local integer i = GetHandleId(t)
    local real xs = LoadReal(udg_Table,i,1)
    local real ys = LoadReal(udg_Table,i,2)
    local real zs = LoadReal(udg_Table,i,3)
    local unit u = LoadUnitHandle(udg_Table,i,4)
    local real xu  = GetUnitX(u)
    local real yu  = GetUnitY(u)
    local real zu  = GetUnitFlyHeight(u)+GetLocZ(xu,yu)
    local real xun = xu-xs
    local real yun = yu-ys
    local real zun = ((zu-zs)-GetLocZ(xun,yun))
    if zun <= 0.00 then
        call KillUnit(u)
        call FlushChildHashtable(udg_Table,i)
        call DestroyTimer(t)
    else
        call MoveUnit(u,xun,yun,zun)
    endif
    set u = null 
endfunction


function Trig_create_b_Actions takes nothing returns nothing
    local timer t = CreateTimer()
    local integer i = GetHandleId(t)
    local real xu = GetUnitX(GetTriggerUnit())
    local real yu = GetUnitY(GetTriggerUnit())
    local real zu = GetLocZ(xu,yu)
    local real xt = GetLocationX( GetSpellTargetLoc())
    local real yt = GetLocationY( GetSpellTargetLoc())
    local real zt = GetLocZ(xt,yt)
    local real a  = Atan2(yt-yu,xt-xu)
    local real xr = xu+50.00*Cos(a)
    local real yr = yu+50.00*Sin(a)
    local real zr = ((zu-GetLocZ(xr,yr))+60.00)+GetLocZ(xr,yr)
    local real d  = SquareRoot(((xt-xr)*(xt-xr))+((yt-yr)*(yt-yr))+((zt-zr)*(zt-zr)))
    local real xs = xu-(xu+50.00*Cos(a))
    local real ys = yu-(yu+50.00*Sin(a))
    local real zs = (zr-zt)/(d/50.00)
    local unit r  = CreateUnit(GetTriggerPlayer(),'h000',xr,yr,bj_RADTODEG*a)
    call UnitAddAbility( r, 'Amrf' )      
    call UnitRemoveAbility( r, 'Amrf' )
    call SetUnitFlyHeight(r,zr-GetLocZ(xr,yr),0.00)
    call SaveReal(udg_Table,i,1,xs)
    call SaveReal(udg_Table,i,2,ys)
    call SaveReal(udg_Table,i,3,zs)
    call SaveUnitHandle(udg_Table,i,4,r)
    call TimerStart(t, 0.025, true, function Move_B)
    set r = null
endfunction

//===========================================================================
function InitTrig_skill_1 takes nothing returns nothing
    set gg_trg_skill_1 = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_skill_1, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_skill_1, Condition( function Trig_create_b_Conditions ) )
    call TriggerAddAction( gg_trg_skill_1, function Trig_create_b_Actions )
endfunction



» Второй скилл

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

function Trig_bullet_Move takes nothing returns nothing
    local timer t = GetExpiredTimer()     
    local integer i = GetHandleId(t)
    local unit f = LoadUnitHandle(udg_Table,i, 3)
    local real zl = LoadReal(udg_Table,i, 6)
    local real uX = GetUnitX(f)
    local real uY = GetUnitY(f)
    local real ang = LoadReal(udg_Table,i,11) 
    
    local location Point = Location(uX+20*Cos(ang*bj_DEGTORAD),uY+20*Sin(ang*bj_DEGTORAD))

    set uX = GetLocationX(Point)
    set uY = GetLocationY(Point)
    
    call SetUnitPositionLoc(f, Point)
    call SetUnitFlyHeight(f, zl-GetLocationZ(Point), 0)

    if (zl-GetLocationZ(Point)<0) then
      call KillUnit(f)
      call DestroyTimer(t)
    endif
    call SaveReal(udg_Table,i, 6, zl)

endfunction

function Trig_bullet_Actions takes nothing returns nothing
    local timer t = CreateTimer()
    local integer i = GetHandleId(t)
    local unit uu = GetTriggerUnit()
    local location cr = GetUnitLoc(uu)
    local location ttr = GetSpellTargetLoc()
    local real ang = AngleBetweenPoints(cr, ttr)
    local unit Fell
    local real zl


    set Fell = CreateUnitAtLoc( GetOwningPlayer(uu),'h000', cr, GetUnitFacing(uu) )
    set cr = GetUnitLoc(Fell)

    call UnitAddAbility( Fell, 'Amrf' )      
    call UnitRemoveAbility( Fell, 'Amrf' )
    call SetUnitPathing( Fell, false )
    call SetUnitPositionLoc( Fell, cr )

    set zl = GetLocationZ(cr)+80
    
    call SetUnitFlyHeight(Fell,zl,0.00)

    call SaveReal(udg_Table,i, 6, zl)
    call SaveReal(udg_Table,i, 11, ang)
    call SaveUnitHandle(udg_Table,i, 3, Fell)

    call TimerStart(t, 0.025, true, function Trig_bullet_Move)

    call RemoveLocation(cr)
    call RemoveLocation(ttr)
endfunction

//===========================================================================
function InitTrig_skill_2 takes nothing returns nothing
    set gg_trg_skill_2 = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_skill_2, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_skill_2, Condition( function Trig_bullet_Conditions ) )
    call TriggerAddAction( gg_trg_skill_2, function Trig_bullet_Actions )
endfunction

Старый 18.05.2011, 16:59
DotaMaster666
Silenced by GadenbIsh
offline
Опыт: 1,259
Активность:
function GetLocZ takes real x, real y returns real
local integer i = 0
call MoveLocation(udg_L[i],x,y)
return GetLocationZ(udg_L[i])
endfunction
Это писалось в трезвом виде?
Старый 18.05.2011, 17:18
LostCoast

offline
Опыт: 2,633
Активность:
не совсем)
я хотел от vjass избавится, ну и избавился обычной глобалкой, а массив делал чисто ради эксперимента)
Старый 18.05.2011, 17:20
DotaMaster666
Silenced by GadenbIsh
offline
Опыт: 1,259
Активность:
я хотел от vjass избавится, ну и избавился обычной глобалкой, а массив делал чисто ради эксперимента)
Я так понимаю, это сейчас тоже пишется в нетрезвом виде?)
Старый 18.05.2011, 17:25
LostCoast

offline
Опыт: 2,633
Активность:
да не)короче не обращай внимание)скил работает )лучше помоги сделать то что я хочу)
Старый 18.05.2011, 17:30
Ответ

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

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

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

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



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