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

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

Ответ
 
Темак
jass for everyone
offline
Опыт: 7,200
Активность:
1 рандомный юнит в радиусе от точки
Посдкажите, пожалуйста, наиболее простой и наименее утечный способ выбрать одного случайного юнита в радисе от позиции, а то вот
» это
function Trig takes nothing returns boolean
    return IsUnitType(GetTriggerUnit(), UNIT_TYPE_STRUCTURE)
endfunction

function Trig_s_Actions takes nothing returns nothing
    set udg_KapkanGroup = GetRandomSubGroup(1, GetUnitsInRangeOfLocMatching(512, GetRectCenter(GetPlayableMapRect()), Condition(function Trig)))
endfunction
никак не прельщает
((кат учитывая, что:
» GetRandomSubGroup это:
function GetRandomSubGroup takes integer count, group sourceGroup returns group
    local group g = CreateGroup()

    set bj_randomSubGroupGroup = g
    set bj_randomSubGroupWant  = count
    set bj_randomSubGroupTotal = CountUnitsInGroup(sourceGroup)

    if (bj_randomSubGroupWant <= 0 or bj_randomSubGroupTotal <= 0) then
        return g
    endif

    set bj_randomSubGroupChance = I2R(bj_randomSubGroupWant) / I2R(bj_randomSubGroupTotal)
    call ForGroup(sourceGroup, function GetRandomSubGroupEnum)
    return g
endfunction
» GetUnitsInRangeOfLocMatching это:
function GetRandomSubGroup takes integer count, group sourceGroup returns group
    local group g = CreateGroup()

    set bj_randomSubGroupGroup = g
    set bj_randomSubGroupWant  = count
    set bj_randomSubGroupTotal = CountUnitsInGroup(sourceGroup)

    if (bj_randomSubGroupWant <= 0 or bj_randomSubGroupTotal <= 0) then
        return g
    endif

    set bj_randomSubGroupChance = I2R(bj_randomSubGroupWant) / I2R(bj_randomSubGroupTotal)
    call ForGroup(sourceGroup, function GetRandomSubGroupEnum)
    return g
endfunction
» GetRectCenter это:
 GetRectCenter takes rect whichRect returns location
    return Location(GetRectCenterX(whichRect), GetRectCenterY(whichRect))
endfunction
))
В общем, желательно на нативках и локальных переменных.
Старый 20.04.2011, 13:44
J64_

offline
Опыт: 4,724
Активность:
Temak1:
вроде нативками никак... //а это не нативками чтоли? ;) прим. Hanabishi
ну он то хотел нативку:
native function GroupGetRandomUnit takes real x,real y,real range returns unit
Вот
unit array tempunit
group G
boolexpr B
int C
void gru_enum(){TempUnit[C++]=getfilterunit()}
unit GetRandomUnit(real x,real y,real range){
C=0
groupenumunitinrange(G,x,y,range,B)
if C==0{return null}
return TempUnit[getrandomint(0,C-1)]
}
...
void init(){
G=creategroup()
B=condition(function gru_enum)
}

Отредактировано AdamanTX, 20.04.2011 в 18:15.
Старый 20.04.2011, 15:47
Ответ

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

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

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

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



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