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

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

Ответ
 
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
Аналог вейта
Добрый день честной народ
Хочю спросить у вас совета
вот в переодическом триггере я изменяю высоты юнитам(цели и кастеру, неважно) и у меня сложность осталась в одном:
1)// переодический таймер (1с)
2)call SetUnitFlyHeight(c,200*RDSn,500.)
3)// тут мне нужно подождать пока не достигнет юнит нужной высоты(а именно 200*RDSn) и только потом проводить остальные действия
4)call UnitDamageTarget(c,t,60,true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,null)
5)call SetUnitFlyHeight(t,0,500.)
6)call SetUnitFlyHeight(c,0,300.)
мне один пользователь пытался посоветовать использовать не переодический таймер, но к сожалению я не вразумел как именно
прошу вас объснить как правильно решать эту ситуацию(просто триггер слип мне использовать сказали нежелательно, что прирывает поток)
хотел бы узнать еще что это за поток(видимо значений) и почему при вейте он прирывается
Старый 09.02.2010, 22:01
DioD

offline
Опыт: 45,134
Активность:
что мешает использовать два таймера?
Старый 09.02.2010, 22:05
adic3x

offline
Опыт: 108,439
Активность:
или я не понял сути вопроса?
Старый 09.02.2010, 22:07
DioD

offline
Опыт: 45,134
Активность:
это заметили еще очень и очень давно.
дабы не оффтоп если лень использовать два таймера, можно поставить костыль и счётчик внутри одного...
Старый 09.02.2010, 22:09
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
~DioD, первый переодический таймер я использовал с помощью хеша, и использовать данные во второй у меня не получается
ну вот код:
» раскрыть
Код:
function RDS_Timer2 takes nothing returns nothing
local timer tim2=GetExpiredTimer()
endfunction

function RDS_Timer takes nothing returns nothing
local timer tim=GetExpiredTimer()
local timer tim2=CreateTimer()
local integer i=GetHandleId(tim)
local unit c=LoadUnitHandle(udg_Hash,i,130)
local unit t=LoadUnitHandle(udg_Hash,i,131)
local real ht=GetUnitFlyHeight(t)
call UnitAddAbility(c,'Amrf')
call UnitRemoveAbility(c,'Amrf')
call UnitAddAbility(t,'Amrf')
call UnitRemoveAbility(t,'Amrf')
if ht >= 800 then
call SetUnitFlyHeight(c,200*RDSn,500.)
call TimerStart(tim2,1,false,function RDS_Timer2)
call UnitDamageTarget(c,t,60,true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,null)
call SetUnitFlyHeight(t,0,500.)
call SetUnitFlyHeight(c,0,300.)
call PauseTimer(tim)
set RDSn=1
call FlushChildHashtable(udg_Hash,i)
call DestroyTimer(tim)
set ht=0
else
call SetUnitFlyHeight(c,ht,500)
call UnitDamageTarget(c,t,60,true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,null)
call SetUnitFlyHeight(t,200*RDSn,300)
set RDSn=RDSn+1
endif
endfunction

function RDS_Action takes nothing returns nothing
local timer tim=CreateTimer()
local integer i=GetHandleId(tim)
local unit c=GetSpellAbilityUnit()
local unit t=GetSpellTargetUnit()
call SaveUnitHandle(udg_Hash,i,130,c)
call SaveUnitHandle(udg_Hash,i,131,t)
call TimerStart(tim,1.0,true,function RDS_Timer)
endfunction


к сожалению я не имею представления что такое костыль, +какой счетчик тоже не понял =\

~ADOLF, уже эту статью про создание стомпа читал, и реализовал, немного не понял для чего статья вроде бы там нет задержки для определенного условия

Отредактировано AlexKARASb, 09.02.2010 в 22:40.
Старый 09.02.2010, 22:24
adic3x

offline
Опыт: 108,439
Активность:
ну а проверять условие с каллбек функции таймера, и если оно не выполнено то поднимать юнита, в противном случае останавливать таймер?
Старый 09.02.2010, 22:40
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
ну тогда будет выглядеть наверно рывками я так думаю ну попробую
Старый 09.02.2010, 22:43
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
Добрый всем вечер
В этот раз хочу спросить как составить правильно аналог вейта с условием(wait for condition)
» простой пример

триг №1
Юнит поднял предмет
Условие: .....
Действия:
*вкл. триггер №2
*вейт пока не выполнится что-то ждем проверка в 0.1с (только как пример)
триг №2
написать одынычку когда долетит спел

вот разъясните пожалуйста
если создать в триггере таймер переодический который бы возвращал тру, то как написать в действиях вернул если таймер тру то дальше дейтсвия
постарайтесь понять пожалуйста мою невнятную лексику и объяснить как можно проще
Старый 15.02.2010, 22:07
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
Добрый день
у меня еще один вопросец
в локальном таймере если поставить call PauseTimer() после этого действия в таймере будут выполнятся?(просто интересно переодичность то прекратится, а действия можно ли продолжить?)
Старый 16.02.2010, 13:47
XOR

offline
Опыт: 38,159
Активность:
Если я правильно тебя понял,действие, вызываемое таймером "дойдет" до конца и само больше не запустится.
Старый 16.02.2010, 13:58
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
XiMiKs, спасибо, то что надо
Старый 16.02.2010, 14:00
YellowStar
poon
offline
Опыт: 15,144
Активность:
МэдЛион делал тру наработку где можно было использовать вэиты 0.01 . валялась на кампах. пойдет для тех кто 'боится' таимеров.
Старый 16.02.2010, 15:54
DioD

offline
Опыт: 45,134
Активность:
для тех кто боиться таймеров (буков цифр и строк) подойдёт палата в кащенке.
вообще как бы как бы эта система тоже на таймере, который как раз 0.01 вроде бы...
Старый 16.02.2010, 16:04
YellowStar
poon
offline
Опыт: 15,144
Активность:
знаю. кстати как вариант вэит до звука. может он меньше 0.1 реагирует?
Старый 16.02.2010, 16:12
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
narayan, использовать я не боюсь -.-, скорее не умею

Ответте пожалуйста на один вопрос:
вот в функции мне надо подождать пока глобальная переменная станет = 0:
» primer
Код:
function Trig_visualTEST_Actions takes nothing returns nothing
    local timer t = CreateTimer()
    local integer i = 0
    local real r = 0.00
    local real array x
    local real array y
.................................... какие-то действия
\\ждать пока глобалка используящаяся в других триггерах не станет = 0 
ну и дальше выполнять обнуления
    loop
        exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
        call DestroyEffect( e[i-1] )
        call DestroyTextTagBJ( t[i-1] )
        set x[i-1] = 0
        set y[i-1] = 0
        set i = (i-1)
        set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop
    set i = 0
    set r = 0.00

вы говорите использовать таймеры
мне значит надо создать локал таймер, а вот дальше у меня вопрос ну таймер найдет нужное, а как поставлю паузу в Actions пока не вернет мне таймер нужное? или последующие действия мне нужно делать в таймере(но тогда возникает вопрос я же создал локи, тоесть те что создал в actions я не смогу удалить)
Попробуйте понять мою невнятную лексику и обьяснить мне
Старый 16.02.2010, 20:23
XOR

offline
Опыт: 38,159
Активность:
Ну делай глобальный таймер.. Ты хочешь динамически остановить функцию что ли? Нельзя
Старый 16.02.2010, 20:29
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
XiMiKs, обьясни пожалуйста
вот к функции выше в моем посте, я добавю таймер локальный не локальный неважно
я напишу в таймере если глобалка равна нужному то ...
теперь после то значит при помощи хеша мне надо перенести все локалки что я создал в Actions и в таймере их обнулить(хм а тогда все упроситьтся :D call Flush, надеюсь так можно=\)?

или как мне надо это сделать("или как" не принимается :D)
Старый 16.02.2010, 20:33
XOR

offline
Опыт: 38,159
Активность:
Может ты сам вначале будешь пробовать? из того бреда, что я понял, да.
Старый 16.02.2010, 20:43
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
иногда я так пробую что парсер и хелпер не выдерживают и вырубаются :D

AlexKARASb добавил:
XiMiKs, спасибо все вышло на глобалках
Старый 16.02.2010, 21:25
Ответ

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

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

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

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



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