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

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

Ответ
 
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
Обьяснение\обучение глобалок на Jass
Пытаясь понять как пользоватся с глобалками столкнулся с очень странными вещами
вот код примитивного триггера
Просто для разминки решил сделать так: 1)юнит каст спел; 2)включается таймер(2\с); 3)если переменная такая-то то остановить таймер удалить юнита
» раскрыть
Код:
function TimerTorrent takes nothing returns nothing
local timer t=GetExpiredTimer()
if udg_Real>1 then
set udg_unit=CreateUnit(Player(0),"h002",GetLocationX(udg_Loc1),GetLocationY(udg_Loc1), bj_UNIT_FACING)
endif
set udg_Real=1
call PauseTimer(t)
call DestroyTimer(t)
set t = null
endfunction
function Torrent_Actions takes nothing returns nothing
local timer t=CreateTimer()
set udg_Loc1=GetSpellTargetLoc()
call TimerStart(t,2,true, function TimerTorrent)
endfunction

который написал я неправильно(мда мда мда)
и вот альтернатива на ГУИ; таймер вызывающийся другим триггером
» раскрыть
Код:
function Trig_GUITORRENT_Func001C takes nothing returns boolean
    if ( not ( udg_Real > 0.00 ) ) then
        return false
    endif
    return true
endfunction
function Trig_Tor_Actions takes nothing returns nothing
    if ( Trig_GUITORRENT_Func001C() ) then
        call RemoveUnit( udg_unit )
        call DisableTrigger( GetTriggeringTrigger() )
    else
        call CreateNUnitsAtLoc( 1, 'h002', Player(0), udg_Loc1, bj_UNIT_FACING )
        set udg_unit = GetLastCreatedUnit()
        set udg_Real = 1.00
    endif
endfunction

В ГУИ создается if в таймере и к нему ф-ция возвращающая булин, как это написать на jass в одной ф-ции

Отредактировано ScorpioT1000, 03.02.2010 в 17:33.
Старый 03.02.2010, 16:55
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
в первом примере ты удаляешь таймер при первом вызове.
Старый 03.02.2010, 18:13
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
омг я лол не тот триггер скинул Т_Т
обновлю 1пост к вечеру пока времени нет
сор за тупость в первом посту
Старый 03.02.2010, 18:58
DioD

offline
Опыт: 45,134
Активность:
чтобы написать одной функцией потребуется целый букет знаний и вообще это не очень хорошая идея так как поглощает значительно больше ресурсов чем индивидуальные вызовы.
Старый 03.02.2010, 19:04
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
DioD, саарказм, или в серьез написал? тяжко тя понять
глубоко извиняюсь за тему
пойду почитаю про jass в туториалах вексориана наконец узнал кто это
тему наверно закройте ато от меня один флуд

Отредактировано AlexKARASb, 03.02.2010 в 22:21.
Старый 03.02.2010, 19:23
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
вот переписал
Сделать пытался что: юнит каст спел, присвоить itor(integer) двум, запуск таймера, при первом запуске таймера условие если itor>1 создать юнита в противном случае удалить юнита, стоп таймер, далее присвоить значение itor к нулю, и при втором запуске произойдет то что в элс
в контейнере глобалс integer itor и unit utor
Код:
function TorrentTimer takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer i=GetHandleId(t)
local real X=LoadReal(udg_Hash,i,40)
local real Y=LoadReal(udg_Hash,i,41)
if itor>1 then
set utor=CreateUnit(Player(0),'h002',X,Y,bj_UNIT_FACING)
else
call RemoveUnit(utor)
call PauseTimer(t)
call DestroyTimer(t)
endif
set itor=0
endfunction

function Torrent_Actions takes nothing returns nothing
    local timer t=CreateTimer()
    local location l=GetSpellTargetLoc()
    local real X=GetLocationX(l)
    local real Y=GetLocationY(l)
    local integer i=GetHandleId(t)
    call SaveReal(udg_Hash,i,40,X)
    call SaveReal(udg_Hash,i,41,Y)
    set itor=2
    call TimerStart(t,2,true, function TorrentTimer)
endfunction

обьясните пожалуйста какую ошибку я допустил =\
Старый 03.02.2010, 23:02
Zombak2500

offline
Опыт: 1,855
Активность:
я так понял uter глобалка, поставь udg_uter в коде
Zombak2500 добавил:
и itor тоже
Старый 04.02.2010, 09:07
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
Zombak2500, читал бы лучше мой пост:
Цитата:
в контейнере глобалс integer itor и unit utor

при обьявленых глобалках приставка удг не ставится
Старый 04.02.2010, 16:33
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
Почему когда я создаю контейнер
globals
real torrent
endglobals
та любую переменную в ней карта не запускается?
возможна ли проблема в моем genpack'e?
AlexKARASb добавил:
омг проблема была в Паке -пи**ц-
антивирус блокировал часть пака -.-
омг так я тупо неделю тратил время зря
Старый 04.02.2010, 23:45
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
Добрый всем день. Ответьте пожалуста на пару моих вопросов
вопросец по глобалкам:
как создать правильно массив
globals
unit array ar
endglobals
так?

и второй при цыкле когда я создаю юнита и сетаю его, как правильно выбрать под массив?
Код:
loop
        exitwhen in > n
        call CreateNUnitsAtLoc(1,'h003',GetOwningPlayer(c),Location(Xc+sh*in*Cos(ang),Yc+sh*i  n*Sin(ang)),GetUnitFacing(c))
        set ar[???] = GetLastCreatedUnit()
        set in=in+1
        call TriggerSleepAction(0.01)
    endloop


все дотилемпал в [in]

AlexKARASb добавил:
возник маленький вопрос
мне надо создавать юнитов с задержкой, если в цикле я ставлю вейт перестает удалятся юнит
как избежать этого?

Отредактировано AlexKARASb, 06.02.2010 в 16:16.
Старый 06.02.2010, 16:41
Enein
Silenced by ZlaYa1000
offline
Опыт: 43,453
Активность:
как избежать этого?
юзай таймеры. слип в лупе не работает
Enein добавил:
так?
так
Старый 06.02.2010, 16:43
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
Enein, ясно
а кол-во таймеров в триггере неограничено?
спасибо помог

Отредактировано AlexKARASb, 06.02.2010 в 18:17.
Старый 06.02.2010, 17:51
Ответ

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

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

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

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



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