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

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

Ответ
 
timon1994
только учусь
offline
Опыт: 952
Активность:
Не работает код на jass
Код:
function SnowAttackKnockBack takes unit u1, unit u2, real dist returns nothing
    local real deltaY=(dist*(GetUnitY(u2)-GetUnitY(u2)))/DistanceBetweenPoints(GetUnitLoc(u1), GetUnitLoc(u2))
    local real deltaX=(dist*(GetUnitX(u2)-GetUnitX(u2)))/DistanceBetweenPoints(GetUnitLoc(u1), GetUnitLoc(u2))
    local location loc=GetUnitLoc(u2)
    call MoveLocation(loc, GetUnitX(u2)+deltaX, GetUnitY(u2)+deltaY)
    call SetUnitPositionLoc(u2, loc)
    call RemoveLocation(loc)
endfunction

function Trig_SnowAttack_Actions takes nothing returns nothing
    local real speed=10
    local real lim=(110+GetUnitAbilityLevel(GetAttacker(), 'A001')*4)/speed
    local real i=0
    loop
        exitwhen i>=lim
        call SnowAttackKnockBack (GetAttacker(), GetTriggerUnit(), speed) 
    endloop
    call DisplayTimedTextToPlayer(GetOwningPlayer(GetAttacker()), 30, 30, 10, "ASDFASDF") 
endfunction

function Trig_SnowAttack_Conditions takes nothing returns boolean
    return GetRandomReal (0, 100)<=12
endfunction
//=============================================
function InitTrig_SnowAttack takes nothing returns nothing
    set gg_trg_SnowAttack = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_SnowAttack, EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerAddCondition( gg_trg_SnowAttack, Condition( function Trig_SnowAttack_Conditions ) )
    call TriggerAddAction( gg_trg_SnowAttack, function Trig_SnowAttack_Actions )
endfunction

суть - шанс оттолкнуть юнита (как у баратрума в доте).
просьба не орать "юзай поиск", хочу сделать сам
я знаю, я там несколько моментов упустил (пауза между отталкиваниями, проверка на наличие пассивки и т.д.), но где все-таки ошибка?
Старый 26.03.2009, 13:04
Dragon27

offline
Опыт: 6,779
Активность:
GetUnitY(u2)-GetUnitY(u2)
тебе не кажется, что это возвратит НОЛЬ?
Старый 26.03.2009, 13:30
Manhant
Убежал
offline
Опыт: 14,787
Активность:
во-первых, лучше не используй DistanceBetweenPoints,а ошибка в том что ты не увеличиваешь i перед endloop делай i=i+1
и измени это call DisplayTimedTextToPlayer(GetOwningPlayer(GetAttacker()), 30, 30, 10, "ASDFASDF"<<<<< текст конвертированный из трига поменяй на свой)

manhant добавил:
Dragon27 согласен лучше замени на GetUnitY(u2)-"твое число"

Отредактировано alexkill, 26.03.2009 в 16:19.
Старый 26.03.2009, 13:34
SRes
1110101000
offline
Опыт: 9,997
Активность:
Код:
local location loc=GetUnitLoc(u2)
call MoveLocation(loc, GetUnitX(u2)+deltaX, GetUnitY(u2)+deltaY)
call SetUnitPositionLoc(u2, loc)
call RemoveLocation(loc)

Утечка, лока не обнуляеться.
Код:
local real deltaY=(dist*(GetUnitY(u2)-GetUnitY(u2)))/DistanceBetweenPoints(GetUnitLoc(u1), GetUnitLoc(u2))
local real deltaX=(dist*(GetUnitX(u2)-GetUnitX(u2)))/DistanceBetweenPoints(GetUnitLoc(u1), GetUnitLoc(u2))
call MoveLocation(loc, GetUnitX(u2)+deltaX, GetUnitY(u2)+deltaY)

А это работает ? Или юнит не двигается? И почему не заюзать :
Код:
x = x + dist * Cos(angle * bj_DEGTORAD)
y = y + dist * Sin(angle * bj_DEGTORAD)

? Если я понял что это должно делать.

Отредактировано SRes, 26.03.2009 в 13:45.
Старый 26.03.2009, 13:38
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
» code
Код:
globals
    real a
    real dist
    real index
    unit target
endglobals

function SnowAttackKnockBack takes nothing returns nothing
    local real d=(dist*2-index)/2//или на 4
    local location loc=Location(GetUnitX(target)+d*Cos(a*bj_DEGTORAD),GetUnitY(target)+d*Sin(a*bj_D  EGTORAD))
    if index>0 then
        call SetUnitPositionLoc(target,loc)
        set index=index-10
    else
        call DestroyTimer(GetExpiredTimer())
    endif
    call RemoveLocation(loc)
    set location loc=null
endfunction

function Trig_SnowAttack_Actions takes nothing returns nothing
    local real u1=GetAttacker()
    local real u2=GetTriggerUnit()
    local real x1=GetUnitX(u1)
    local real x2=GetUnitX(u2)
    local real y1=GetUnitY(u1)
    local real y2=GetUnitY(u2)
    set a=bj_RADTODEG*Atan2(y2-y1,x2-x1)
    set dist=110+GetUnitAbilityLevel(GetAttacker(), 'A001')*5
    call TimerStart(CreateTimer(),0.01,true,function SnowAttackKnockBack)
    call DisplayTimedTextToPlayer(GetOwningPlayer(GetAttacker()), 30, 30, 10, "ASDFASDF") 
endfunction

function Trig_SnowAttack_Conditions takes nothing returns boolean
    return true//GetRandomReal (0, 100)<=12//Разблокировать когда все протестишь
endfunction

//=============================================
function InitTrig_SnowAttack takes nothing returns nothing
    set gg_trg_SnowAttack = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_SnowAttack, EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerAddCondition( gg_trg_SnowAttack, Condition( function Trig_SnowAttack_Conditions ) )
    call TriggerAddAction( gg_trg_SnowAttack, function Trig_SnowAttack_Actions )
endfunction


Думаю будет работать.
Старый 26.03.2009, 16:00
timon1994
только учусь
offline
Опыт: 952
Активность:
Цитата:
GetUnitY(u2)-GetUnitY(u2)
тебе не кажется, что это возвратит НОЛЬ?

да, лоханулсяD:
Цитата:
А это работает ? Или юнит не двигается? И почему не заюзать :

синусы не знаюD:
Hellfim, спасибо, сейчас попробую
Старый 26.03.2009, 16:22
timon1994
только учусь
offline
Опыт: 952
Активность:
у меня почему-то карта не запускается, посмотрите плз!
Прикрепленные файлы
Тип файла: w3x типаDOTA.w3x (42.8 Кбайт, 16 просмотров )
Старый 26.03.2009, 16:34
SRes
1110101000
offline
Опыт: 9,997
Активность:
Все запускается.
Старый 26.03.2009, 16:49
timon1994
только учусь
offline
Опыт: 952
Активность:
а у тебя какой патч? у меня 1.23
Старый 26.03.2009, 16:50
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
timon1994, возможно нужен JNPG

Hellfim добавил:
Т.е. он нужен, но у тебя его нету.
Старый 26.03.2009, 16:52
timon1994
только учусь
offline
Опыт: 952
Активность:
Hellfim, он у меня есть.
Старый 26.03.2009, 16:53
SRes
1110101000
offline
Опыт: 9,997
Активность:
Путь должен быть онли инглиш !
Старый 26.03.2009, 17:32
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
timon1994, я забыл присвоить переменной target значение юнита. Но триггер не работает, он даже не создается -.-
Старый 26.03.2009, 17:37
Manhant
Убежал
offline
Опыт: 14,787
Активность:
timon1994 сначало сохрани синтаксис вДжасса потом запускай должен(каждый раз сохраняй карту перед проверкой) или у тебя такаяже проблема как и у меня,мой JNPG не проверяет vJass Systax поэтому я немогу им пользоватся =(.
Старый 26.03.2009, 18:01
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
мой JNPG не проверяет vJass Systax поэтому я немогу им пользоватся =(

в пути к карте есть русские символы?
Старый 26.03.2009, 21:35
timon1994
только учусь
offline
Опыт: 952
Активность:
Цитата:
Путь должен быть онли инглиш !

Цитата:
в пути к карте есть русские символы

ага, вот где проблема, спасибо!
Hellfim, я подправил ошибки, которые в твоем коде были, но вот это:
Код:
local real u1=GetAttacker()
    local real u2=GetTriggerUnit()

смешно=)

timon1994 добавил:
Цитата:
я подправил ошибки, которые в твоем коде были

но он не пашет

timon1994 добавил:
почему это он не создается?
Старый 27.03.2009, 14:57
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
timon1994, омг =) Просто несколько раз переделывал код и запутался с копипастом -.- Прошу прощения.
Старый 27.03.2009, 15:14
timon1994
только учусь
offline
Опыт: 952
Активность:
да ниче страшного=)
переменной target нужно присваивать GetTriggerUnit(), я прав?
и разве к глобалкам не надо прибавлять udg_?
Старый 27.03.2009, 16:58
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
timon1994, я в исправленном коде присваивал u2, но все зависит кто должен отлететь =), если напавший, то u1, если тот, на кого напали, то u2. udg надо прибавлять только в обычном WE. В JNPG, если объявляешь переменную как
Код:
globals
    unit t=null
endglobals


То обращаться надо просто
Код:
call KillUnit(t)
Старый 27.03.2009, 17:03
timon1994
только учусь
offline
Опыт: 952
Активность:
Код:
globals
    real a
    real dist
    real index
    unit target=GetTriggerUnit()
endglobals

function SnowAttackKnockBack takes nothing returns nothing
    local real d=(dist*2-index)/2//или на 4
    local location loc
  //  set target=GetTriggerUnit()
    set loc=Location(GetUnitX(target)+d*Cos(a*bj_DEGTORAD),GetUnitY(target)+d*Sin(a*bj_D  EGTORAD))
    if index>0 then
        call SetUnitPositionLoc(target,loc)
        set index=index-10
    else
        call DestroyTimer(GetExpiredTimer())
    endif
    call RemoveLocation(loc)
    set loc=null
endfunction

function Trig_SnowAttack_Actions takes nothing returns nothing
    local unit u1=GetAttacker()
    local unit u2=GetTriggerUnit()
    local real x1=GetUnitX(u1)
    local real x2=GetUnitX(u2)
    local real y1=GetUnitY(u1)
    local real y2=GetUnitY(u2)
    set a=bj_RADTODEG*Atan2(y2-y1,x2-x1)
    set dist=110+GetUnitAbilityLevel(GetAttacker(), 'A001')*5
    call TimerStart(CreateTimer(),0.01,true,function SnowAttackKnockBack)
    call DisplayTimedTextToPlayer(GetOwningPlayer(GetAttacker()), 30, 30, 10, "ASDFASDF") 
endfunction

function Trig_SnowAttack_Conditions takes nothing returns boolean
    return true//GetRandomReal (0, 100)<=12//Разблокировать когда все протестишь
endfunction

//=============================================
function InitTrig_SnowAttack takes nothing returns nothing
    set gg_trg_SnowAttack = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(gg_trg_SnowAttack, EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerAddCondition(gg_trg_SnowAttack, Condition(function Trig_SnowAttack_Conditions ) )
    call TriggerAddAction(gg_trg_SnowAttack, function Trig_SnowAttack_Actions )
endfunction

я своим ненаметанным глазом ошибок не вижу, только unit target=GetTriggerUnit() сомнительно
Старый 27.03.2009, 17:40
Ответ

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

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

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

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



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