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

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

Закрытая тема
 
Dreii
define{name=Dreii age=17}
offline
Опыт: 5,246
Активность:
Движение полярки((дуга
Код:
function Trig_Jump_Conditions takes nothing returns boolean
return GetSpellAbilityId()=='A000'   
endfunction
function Trig_Jump_Timer takes nothing returns nothing 
local timer t=GetExpiredTimer() 
local integer id=GetHandleId(t) 
local unit u=LoadUnitHandle(Hash,id,0) 
local real xu=GetWidgetX(u)
local real yu=GetWidgetY(u)
local real time=LoadReal(Hash,id,3) 
local real height=LoadReal(Hash,id,4)
local real a=GetUnitFacing(u)*.0174532
local real x=GetUnitX(u)+25.*Cos(a)
local real y=GetUnitY(u)+25.*Sin(a)
call SaveReal(Hash,id,3,time+1)
call SetUnitFlyHeight(u,height,10000.) 
call SetUnitX(u,x) 
call SetUnitY(u,y) 
if time<20. then 
set height=height+15. 
 call SaveReal(Hash,id,5,height) //высота
endif 
if time<40. then 
set height=height+5. 
 call SaveReal(Hash,id,5,height) //высота
endif 
if time>=40. then 
set height=height-5. 
 call SaveReal(Hash,id,5,height) //высота
endif 
if time>=60. then 
set height=height-10.
call SaveReal(Hash,id,5,height) //высота
endif 
if time>=80. then 
call FlushChildHashtable(Hash,id) 
call PauseTimer(t) 
call DestroyTimer(t) 
call SetUnitPathing(u,false) 
call PauseUnit(u,false) 
call SetUnitFlyHeight(u,0.,10000.) 
endif 
endfunction
function Trig_Jump_Actions takes nothing returns nothing
local timer t=CreateTimer()   
local integer id=GetHandleId(t)
local unit u=GetTriggerUnit()
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
    call PauseUnitBJ( true,u)
    call SetUnitAnimation(u, "Attack Slam" )
    call UnitAddAbilityBJ( 'A001',u)
    call UnitAddAbilityBJ( 'Arav',u)
    call UnitRemoveAbilityBJ( 'Arav',u)
    call SetUnitPathing(u,false)
    call SaveUnitHandle(Hash,id,0,u) 
    call SaveReal(Hash,id,1,GetWidgetX(u)) 
    call SaveReal(Hash,id,2,GetWidgetY(u)) 
    call SaveReal(Hash,id,3,0.) //время
    call SaveReal(Hash,id,4,0.) //высота
    call TimerStart(t,.01,true,function Trig_Jump_Timer)
endfunction

все бы нчиего НО,прыгает куда то влево,а потом начинает самы прыгать в разные стороны.....

Dreii добавил:
вообще ничего не понимаю(
Старый 18.03.2011, 12:12
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
у тебя идёт проверка всех условий >> реагирует на 2 проверки в начале и в конце на 3
Старый 18.03.2011, 12:14
Dreii
define{name=Dreii age=17}
offline
Опыт: 5,246
Активность:
Clamp, мм как испарвить?
Старый 18.03.2011, 12:16
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
Dreii, мм проверка через elseif?
вообще может ещё ошибки есть, но я самое яркое заметил, не вникал
Clamp добавил:
ну там ещё пара нюансов, но я тебе направление дал, так что думай
Старый 18.03.2011, 12:20
Dreii
define{name=Dreii age=17}
offline
Опыт: 5,246
Активность:
таак,теперь прыгает хорошо,но после прыжка летит себе до конца карты....

Dreii добавил:
Всее!! Я сделал!!Спасибо)

Dreii добавил:
Блин теперь после прыжка юнит просто стоит и нельзя нчие сделать(
Старый 18.03.2011, 12:30
spellwerk

offline
Опыт: 4,869
Активность:
исправить можно выкинув половину проверок и заменив траекторию движения на параболу с ветвями вниз
Spy_ добавил:
Блин теперь после прыжка юнит просто стоит и нельзя нчие сделать(
отладочные сообщения спасут мир
Старый 18.03.2011, 12:45
Dreii
define{name=Dreii age=17}
offline
Опыт: 5,246
Активность:
Цитата:
Сообщение от Spy_
исправить можно выкинув половину проверок и заменив траекторию движения на параболу с ветвями вниз

Если ты напишеш код то я буду благодарен)
Старый 18.03.2011, 12:46
spellwerk

offline
Опыт: 4,869
Активность:
в опендоте:
local integer count
local unit u
if ( count > 50 ) then
	//....
else
	call SetUnitFlyHeight(u,625-(25-count)*(25-count),0.)
	set count = count + 1
endif
Старый 18.03.2011, 12:50
Dreii
define{name=Dreii age=17}
offline
Опыт: 5,246
Активность:
Spy_, воо вообще супер!
Только он все равно летит дальше//
Код:
if count > 50 then
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(Hash,id)
call SetUnitPathing(u,false) 
call PauseUnit(u,false) 
else
    call SetUnitFlyHeight(u,625-(25-count)*(25-count),0.)
    set count = count + 1
endif


делал так
Старый 18.03.2011, 12:57
spellwerk

offline
Опыт: 4,869
Активность:
покажи весь код
Старый 18.03.2011, 12:59
Dreii
define{name=Dreii age=17}
offline
Опыт: 5,246
Активность:
Код:
function Trig_Jump_Conditions takes nothing returns boolean
return GetSpellAbilityId()=='A000'   
endfunction
function Trig_Jump_Timer takes nothing returns nothing 
local timer t=GetExpiredTimer() 
local integer id=GetHandleId(t) 
local unit u=LoadUnitHandle(Hash,id,0) 
local real dist=LoadReal(Hash,id,1)
local real a=GetUnitFacing(u)*.0174532
local integer count
call SetUnitX(u,GetUnitX(u)+dist*Cos(a)) 
call SetUnitY(u,GetUnitY(u)+dist*Sin(a))
if count>50. then
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(Hash,id)
call UnitRemoveAbility(u,'A001')
call SetUnitPathing(u,false) 
call PauseUnit(u,false) 
else
    call SetUnitFlyHeight(u,625-(25-count)*(25-count),0.)
    set count = count + 1
endif
set t=null
set u=null
endfunction
function Trig_Jump_Actions takes nothing returns nothing
local timer t=CreateTimer()   
local integer id=GetHandleId(t)
local unit u=GetTriggerUnit()
local real dx=GetWidgetX(u)-GetSpellTargetX()
local real dy=GetWidgetY(u)-GetSpellTargetY()
    call PauseUnit(u,true)
    call SetUnitAnimation(u,"Attack Slam" )
    call UnitAddAbility(u,'A001')
    call UnitAddAbility(u,'Amrf')
    call UnitRemoveAbility(u,'Amrf')
    call SetUnitPathing(u,false)
    call SaveUnitHandle(Hash,id,0,u) 
    call SaveReal(Hash,id,1,SquareRoot(dx*dx+dy*dy)/80)
    call TimerStart(t,.01,true,function Trig_Jump_Timer)
    set t=null
    set u=null
endfunction
Старый 18.03.2011, 12:59
spellwerk

offline
Опыт: 4,869
Активность:
local integer count
ты из хэштаблицы не загружаешь/сохраняешь это значение
function Trig_Jump_Conditions takes nothing returns boolean
return GetSpellAbilityId()=='A000'   
endfunction
function Trig_Jump_Timer takes nothing returns nothing 
local timer t=GetExpiredTimer() 
local integer id=GetHandleId(t) 
local unit u=LoadUnitHandle(Hash,id,0) 
local real xu=GetWidgetX(u)
local real yu=GetWidgetY(u)
local real dist=LoadReal(Hash,id,5)
local real a=GetUnitFacing(u)*.0174532
local integer count = LoadInteger(Hash,id,StringHash("Count"))
call SetUnitX(u,GetUnitX(u)+dist*Cos(a)) 
call SetUnitY(u,GetUnitY(u)+dist*Sin(a))
if count>50. then
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(Hash,id)
call UnitRemoveAbility(u,'A001')
call SetUnitPathing(u,false) 
call PauseUnit(u,false) 
else
    call SetUnitFlyHeight(u,625-(25-count)*(25-count),0.)
    set count = count + 1
    call SaveInteger(Hash,id,StringHash("Count"),count)
endif
endfunction
function Trig_Jump_Actions takes nothing returns nothing
local timer t=CreateTimer()   
local integer id=GetHandleId(t)
local unit u=GetTriggerUnit()
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real dx=GetWidgetX(u)-GetSpellTargetX()
local real dy=GetWidgetY(u)-GetSpellTargetY()
    call PauseUnit(u,true)
    call SetUnitAnimation(u,"Attack Slam" )
    call UnitAddAbility(u,'A001')
    call UnitAddAbility(u,'Amrf')
    call UnitRemoveAbility(u,'Amrf')
    call SetUnitPathing(u,false)
    call SaveUnitHandle(Hash,id,0,u) 
    call SaveReal(Hash,id,1,GetWidgetX(u)) 
    call SaveReal(Hash,id,2,GetWidgetY(u)) 
    call SaveReal(Hash,id,4,0.)   
    call SaveReal(Hash,id,5,SquareRoot(dx*dx+dy*dy)/80)
    call SaveInteger(Hash,id,StringHash("Count"),0)
    call TimerStart(t,.01,true,function Trig_Jump_Timer)
endfunction
пробуй так
Старый 18.03.2011, 13:03
Dreii
define{name=Dreii age=17}
offline
Опыт: 5,246
Активность:
Spy_, нет,он делает дугу,но потом по земле двигаеться тоесть таймер не дестроиться((

Dreii добавил:
Spy_, попробывал как ты сказал. Он теперь рывками прыгает. Прыгнет - упадет,Прыгнет- упадет
Старый 18.03.2011, 13:10
spellwerk

offline
Опыт: 4,869
Активность:
вообщем щас карту пример сделаю
Старый 18.03.2011, 13:11
Dreii
define{name=Dreii age=17}
offline
Опыт: 5,246
Активность:
Spy_, ок.
Старый 18.03.2011, 13:13
spellwerk

offline
Опыт: 4,869
Активность:
вот
Прикрепленные файлы
Тип файла: w3x leap.w3x (16.9 Кбайт, 20 просмотров )
Старый 18.03.2011, 13:21
Dreii
define{name=Dreii age=17}
offline
Опыт: 5,246
Активность:
щя посомотрим)

Dreii добавил:
Spy_,
» раскрыть
Код:
function Trig_Jump_Conditions takes nothing returns boolean
return GetSpellAbilityId()=='A000'   
endfunction
function Trig_Jump_Timer takes nothing returns nothing 
local timer t=GetExpiredTimer() 
local integer id=GetHandleId(t) 
local unit u=LoadUnitHandle(Hash,id,0) 
local real dist=LoadReal(Hash,id,1)
local real a=GetUnitFacing(u)/57.32
local integer count=LoadInteger(Hash,id,2)
if count>50 then
        call FlushChildHashtable(Hash,id)
        call DestroyTimer(t)
        call PauseUnit(u,false)
        call SetUnitPathing(u,true)
        call IssueImmediateOrder(u,"stop")
    else
        call SetUnitX(u,GetUnitX(u)+dist*Cos(a))
        call SetUnitY(u,GetUnitY(u)+dist*Sin(a))
        call UnitAddAbility(u,'Amrf')
        call UnitRemoveAbility(u,'Amrf')
        call SetUnitFlyHeight(u,400.-(20-count)*(20-count),0.)
        call SaveInteger(Hash,id,2,count+1)
    endif
set t=null
set u=null
endfunction
function Trig_Jump_Actions takes nothing returns nothing
local timer t=CreateTimer()   
local integer id=GetHandleId(t)
local unit u=GetTriggerUnit()
local real dx=GetWidgetX(u)-GetSpellTargetX()
local real dy=GetWidgetY(u)-GetSpellTargetY()
    call PauseUnit(u,true)
    call SetUnitAnimation(u,"Attack Slam" )
    call UnitAddAbility(u,'A001')
    call UnitAddAbility(u,'Amrf')
    call UnitRemoveAbility(u,'Amrf')
    call SetUnitPathing(u,false)
    call SaveUnitHandle(Hash,id,0,u) 
    call SaveReal(Hash,id,1,SquareRoot(dx*dx+dy*dy)/80)
    call SaveInteger(Hash,id,2,0)
    call TimerStart(t,.01,true,function Trig_Jump_Timer)
    set t=null
    set u=null
endfunction

//===========================================================================
function InitTrig_Jump takes nothing returns nothing
    local integer index=0
    set gg_trg_Jump=CreateTrigger()
    loop
    exitwhen index==11
        call TriggerRegisterPlayerUnitEvent(gg_trg_Jump,Player(index),EVENT_PLAYER_UNIT_SPELL  _EFFECT,null)
        set index=index+1
    endloop
        call TriggerAddCondition(gg_trg_Jump,Condition(function Trig_Jump_Conditions))
    call TriggerAddAction(gg_trg_Jump,function Trig_Jump_Actions)
    set gg_trg_Jump=null
endfunction

Теперь все работает хорошо НО ,теперь он не долетает до тчоки каста заклинания...\\\
Старый 18.03.2011, 13:38
JimALIEN
вдупляет sc2 editor
offline
Опыт: 7,176
Активность:
расстояние дели на 50 а не на 80 (угадай зачем). Кстати способ простой но нифига не универсальный, т.к. все завязано на 1й переменной count.
А еще ты фелсиш пафинг юнита и в начале и в конце прыжка, гдето надо поменять

Отредактировано JimALIEN, 18.03.2011 в 14:42.
Старый 18.03.2011, 14:33
Dreii
define{name=Dreii age=17}
offline
Опыт: 5,246
Активность:
JimALIEN, Спасибо! Все работает отлично!
Цитата:
Сообщение от JimALIEN
универсальный

А какой универсальный
Старый 18.03.2011, 14:42
JimALIEN
вдупляет sc2 editor
offline
Опыт: 7,176
Активность:
Формулу щас врядли вспомню, но гдето вроде выкладывали прыжок, где все параметры зависели от расстояния, т.е. чем дальше юнит прыгал, тем ближе угол прыжка был к 45 градусам, а начальная скорость почти не менялась поэтому время прыжка тож зависело от расстояния. Тут же у тебя юнит всегда будет подлетать на 625 и прыжок будет длица одинаковое количество времени. Там вроде вычислений побольше, но и выглядит полуше. Щас если на память вспомню то напишу
Старый 18.03.2011, 14:57
Закрытая тема

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

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

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

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



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