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

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

Закрытая тема
 
Gres
Кораэлестраз
offline
Опыт: 18,575
Активность:
Передача числа в цикл!
Как передать значение локальной переменной Integer в функцию цикла?
» Часть кода

Код:
function Trig_Z1_matching takes nothing returns boolean
    return ( ( IsUnitDeadBJ(GetFilterUnit()) == false ) and  (IsUnitIllusionBJ(GetFilterUnit()) == false) and ( GetUnitAbilityLevelSwapped('Aloc', GetFilterUnit()) < 1 )  )
endfunction

function Trig_Z1_nUnits takes integer Nomber returns nothing
    if ( GetOwningPlayer(GetEnumUnit()) == Player(0) )  then
        set udg_UnitRed[Nomber] = ( udg_UnitRed[Nomber] + 1 )
    else
    endif
    if ( GetOwningPlayer(GetEnumUnit()) == Player(1) ) then
        set udg_UnitBlue[Nomber] = ( udg_UnitBlue[Nomber] + 1 )
    else
    endif
endfunction

function Trig_Z1_Actions takes nothing returns nothing
local integer Nomber = 1
    call ForGroupBJ( GetUnitsInRangeOfLocMatching(udg_RadiusContgol, GetUnitLoc(UnitControl), Condition(function Trig_Z1_matching)), function Trig_Z1_nUnits(Nomber) )

Старый 19.04.2009, 14:06
adic3x

offline
Опыт: 108,439
Активность:
поместить в глобалку
Старый 19.04.2009, 14:10
Gres
Кораэлестраз
offline
Опыт: 18,575
Активность:
Цитата:
Сообщение от ADOLF
поместить в глобалку

Забыл написать... Глобалки и Кэш мне не подходят!

ЯТП что по другому нельзя да? =(
Старый 19.04.2009, 14:15
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
Глобалки и Кэш мне не подходят!

почему?
Старый 19.04.2009, 14:18
Gres
Кораэлестраз
offline
Опыт: 18,575
Активность:
ну какбэ объяснить то...

В общем я вызываю функцию(Trig_Z1_Actions) в которую передаю индекс нужного мне массива(Nomber), а в цикле идет подсчет юнитов число которых записывается в целочисленный массив с индексом который я передаю в вышеупомянутую функцию(udg_UnitRed[номер])... но из функции я незнаю как передать в цикл!

Gres добавил:
И эта функция может вызываться раз по 5 в сек! с разным значением Nomber...
Старый 19.04.2009, 20:33
J
expert
offline
Опыт: 48,447
Активность:
и? передавай через глобалку
Старый 19.04.2009, 20:41
Gres
Кораэлестраз
offline
Опыт: 18,575
Активность:
Всмысле перед запуском цикла глобалке присваивать и в цикле принимать? дык а если следом я опять запущу функцию только уже с другим параметром Nomber, тогда тот что запущен первый был тоже начнет принимать значение вновь запущенного цикла!
Старый 20.04.2009, 06:14
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Код:
globals
     integer Number=0
     real RadiusContgol=0.
     unit UnitControl=null
     unit array UnitRed
     unit array UnitBlue
     filterfunc Checker=null
     ....
endglobals

function Trig_Z1_matching takes nothing returns boolean
    local integer i=Number    // Ловим значение глобальной переменной
    if( GetUnitState(GetFilterUnit(),UNIT_STATE_LIFE)>.0 and IsUnitIllusion(GetFilterUnit())==false  and GetUnitAbilityLevel(GetFilterUnit(),'Aloc') < 1 ) then
        if ( GetOwningPlayer(GetEnumUnit()) == Player(0) )  then
            set UnitRed[i] = UnitRed[i] + 1
        elseif ( GetOwningPlayer(GetEnumUnit()) == Player(1) ) then
            set UnitBlue[i] = UnitBlue[i] + 1
        endif
    endif
endfunction

function Trig_Z1_Actions takes nothing returns nothing
    local location loc=GetUnitLoc(UnitControl)
    ....
    set Checker=Filter(function Trig_Z1_matching)  // Делается один раз
    set Number = 1
    call GetUnitsInRangeOfLocMatching(RadiusContgol, loc, Checker)
    ....
    call RemoveLocation(loc)
    set loc=null
    call DestroyFilter(Checker)
    set Checker=null
endfunction

Отредактировано FellGuard, 20.04.2009 в 06:52.
Старый 20.04.2009, 06:35
Gres
Кораэлестраз
offline
Опыт: 18,575
Активность:
я ощущаю в твоих словах истину, мастер FellGuard!!! Сегодня же попробую! =)

Gres добавил:
вот это не совсем понял:
Код:
set Checker=Filter(function Trig_Z1_matching)  // Делается один раз

всмысле нужно вынести в отдельную функцию и присваивать при инициализации?
Старый 20.04.2009, 07:51
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
Цитата:
всмысле нужно вынести в отдельную функцию и присваивать при инициализации?

А ты догадливый, однако... Ну, и сам понимаешь, что точки и BJ надо убирать. Вообще. Из кода. Юзай координаты и нативки.
Старый 20.04.2009, 11:01
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
Всмысле перед запуском цикла глобалке присваивать и в цикле принимать? дык а если следом я опять запущу функцию только уже с другим параметром Nomber, тогда тот что запущен первый был тоже начнет принимать значение вновь запущенного цикла!

паралельного исполнения в жассе нету по определению
Старый 20.04.2009, 13:35
Закрытая тема

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

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

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

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



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