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

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

Ответ
 
Brilock

offline
Опыт: 1,750
Активность:
Выбрать юнита с наименьшим хп
К примеру, триггером выбрал группу юнитов и теперь мне надо выбрать из этой группы юнита с наименьшим хп. Как это реализовать?
Старый 22.01.2013, 10:01
Zkay

offline
Опыт: 5,576
Активность:
Смотри скриншот.
Миниатюры
Кликните на картинку для увеличения
Название:  screenshot.jpg
Просмотров: 61
Размер:  56.9 Кбайт  

Отредактировано Zkay, 22.01.2013 в 10:26.
Старый 22.01.2013, 10:20
DimanTOoBS

offline
Опыт: 5,791
Активность:
Zkay, 3 цикла? да ты проггер высшего уровня...
oberon521,
set Unit = null
pick every units in Group
if Unit = null then Unit = Picked Unit
esle if Hp(Picked Unit) < Hp(Unit) then Unit = Picked Unit
Старый 22.01.2013, 11:25
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,595
Активность:
Zkay, Тупо и глупо так юзать циклы, ForGroup и глобалки работают быстрее....
Старый 22.01.2013, 15:40
Темак
jass for everyone
offline
Опыт: 7,200
Активность:
Zkay:
Нет. Просто я умею ими работать.
кто тебе такую глупость сказал?
Старый 22.01.2013, 23:19
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
Вот. Вставь в корень игры и юзай через CS...
А блин погоди, домой приду, перепишу на обычный джасс и добавлю 1 функцию, а то работать не будет...
globals
    unit n = null
endglobals

function CopyGroup takes group g returns group
    set bj_groupAddGroupDest = CreateGroup()
    call ForGroup(g, function GroupAddGroupEnum)
    return bj_groupAddGroupDest
endfunction

function GetStrongestUnitInGroup takes group g returns unit
    local real l = 0
    local real lm = 0
    if CountUnitsInGroup(g) > 1 then
        set bj_lastCreatedGroup = CopyGroup(g)
        loop
            set bj_lastCreatedUnit = FirstOfGroup(bj_lastCreatedGroup)
            set lm = GetUnitState(bj_lastCreatedUnit,UNIT_STATE_LIFE)/GetUnitState(bj_lastCreatedUnit,UNIT_STATE_MAX_LIFE​)*100
            exitwhen bj_lastCreatedUnit == null
            if lm < l then
                set l = lm
                set n = bj_lastCreatedUnit
            endif
            call GroupRemoveUnit(bj_lastCreatedGroup, bj_lastCreatedUnit)
        endloop
    else
        set n = FirstOfGroup(g)
    endif
    return n
endfunction
Вот так юзать:
CS(set UNIT = GetStrongestUnitInGroup(твоя группа, глобалку с приставкой "udg_")

Отредактировано Vadik29, 23.01.2013 в 15:32.
Старый 23.01.2013, 07:48
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
Zkay, Наглости тебе не занимать, и не тебе нас судить, какие мы. Советую всегда с себя начинать.
Старый 23.01.2013, 15:17
ScorpioT1000
Работаем
online
Опыт: отключен
Уберите из кода *100, дети учительницы по экономике.
ScorpioT1000 добавил:
globals
    unit n = null
endglobals
а вот это говнокод, за такое руки отрывают обычно
Старый 24.01.2013, 16:52
Ответ

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

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

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

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



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