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

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

Ответ
 
CeraRalaz
...
offline
Опыт: 48,115
Активность:
Динамическая смена модели
Можно ли динамически сменить модель у юнита,не заменяя сам юнит?
Старый 23.08.2008, 12:37
Ksax
Взрываю ваше вображение!
offline
Опыт: 4,349
Активность:
Токо если способностями. Типа перевоплощения или превращения. Тут есть простор для фантазии. А тригерами нельзя.

Ksax добавил:
Вот примерная команда:
Выдаеш спобность,
Активация,
Удаление спсобности,
И будь счатлив. Это тригерами выдача способности перевоплощение!
Внимание нужно два юнита которые только различаются модэлями.

Ksax добавил:
Когда я сказал тригерами нельзя я имел в виду без способностей.
Старый 23.08.2008, 12:44
Sailar

offline
Опыт: 8,555
Активность:
Берёш скрываеш юнита. Запоминаеш его лв,спелы и.т.д в переменные и на его месте создаёш новово. Грузиш в него всё от старого.
Старый 23.08.2008, 13:43
CeraRalaz
...
offline
Опыт: 48,115
Активность:
Sailar,это кэшем тока.Муторно.
Ksax,Дзирт,ну да,типа так,тока чтоб другие способности и итэмы сохранились.
Старый 23.08.2008, 14:07
Ksax
Взрываю ваше вображение!
offline
Опыт: 4,349
Активность:
CeraRalaz Перевоплощение идет проверено!
Старый 23.08.2008, 14:10
Ksax
Взрываю ваше вображение!
offline
Опыт: 4,349
Активность:
Sailar Как ты сказал очень долго.
CeraRalaz Для активации перевоплащения может понадобится jass.
Старый 23.08.2008, 14:50
Dragon Knight
Меткий стрелок!!!
offline
Опыт: 4,138
Активность:
Есть одно хорошее действие:
Боевая единица - Replace (unit) with a 'UnitId' using Старая связь боевой единицы life and mana.
И не надо ни каких способностей.
Прикрепленные файлы
Тип файла: w3x Morph.w3x (23.9 Кбайт, 39 просмотров )

Отредактировано Dragon Knight, 14.09.2008 в 12:03.
Старый 23.08.2008, 14:55
House MD
I'm not all guys
offline
Опыт: 14,862
Активность:
Dragon Knight реплейс надо использовать в последнюю очередь, когда другого выбора не осталось. Это даже хуже, чем тёмный.
Старый 23.08.2008, 15:00
Ksax
Взрываю ваше вображение!
offline
Опыт: 4,349
Активность:
Dragon Knight А по твоему предметы перенесутся?
Старый 23.08.2008, 15:49
Dragon Knight
Меткий стрелок!!!
offline
Опыт: 4,138
Активность:
А для чего кеш или переменные существуют?
Старый 23.08.2008, 16:35
Лось

offline
Опыт: 7,223
Активность:
Реплэйс юнит переносит и предметы, но само нормально это преврашение в медведа.
Старый 23.08.2008, 16:48
Dragon Knight
Меткий стрелок!!!
offline
Опыт: 4,138
Активность:
Чем нормально?Создавать способность!
Или на лишний триггер места жалко?
Старый 23.08.2008, 16:56
Sailar

offline
Опыт: 8,555
Активность:
Dragon Knight
Код:
function ReplaceUnitBJ takes unit whichUnit, integer newUnitId, integer unitStateMethod returns unit
    local unit    oldUnit = whichUnit
    local unit    newUnit
    local boolean wasHidden
    local integer index
    local item    indexItem
    local real    oldRatio

    // If we have bogus data, don't attempt the replace.
    if (oldUnit == null) then
        set bj_lastReplacedUnit = oldUnit
        return oldUnit
    endif

    // Hide the original unit.
    set wasHidden = IsUnitHidden(oldUnit)
    call ShowUnit(oldUnit, false)

    // Create the replacement unit.
    if (newUnitId == 'ugol') then
        set newUnit = CreateBlightedGoldmine(GetOwningPlayer(oldUnit), GetUnitX(oldUnit), GetUnitY(oldUnit), GetUnitFacing(oldUnit))
    else
        set newUnit = CreateUnit(GetOwningPlayer(oldUnit), newUnitId, GetUnitX(oldUnit), GetUnitY(oldUnit), GetUnitFacing(oldUnit))
    endif

    // Set the unit's life and mana according to the requested method.
    if (unitStateMethod == bj_UNIT_STATE_METHOD_RELATIVE) then
        // Set the replacement's current/max life ratio to that of the old unit.
        // If both units have mana, do the same for mana.
        if (GetUnitState(oldUnit, UNIT_STATE_MAX_LIFE) > 0) then
            set oldRatio = GetUnitState(oldUnit, UNIT_STATE_LIFE) / GetUnitState(oldUnit, UNIT_STATE_MAX_LIFE)
            call SetUnitState(newUnit, UNIT_STATE_LIFE, oldRatio * GetUnitState(newUnit, UNIT_STATE_MAX_LIFE))
        endif

        if (GetUnitState(oldUnit, UNIT_STATE_MAX_MANA) > 0) and (GetUnitState(newUnit, UNIT_STATE_MAX_MANA) > 0) then
            set oldRatio = GetUnitState(oldUnit, UNIT_STATE_MANA) / GetUnitState(oldUnit, UNIT_STATE_MAX_MANA)
            call SetUnitState(newUnit, UNIT_STATE_MANA, oldRatio * GetUnitState(newUnit, UNIT_STATE_MAX_MANA))
        endif
    elseif (unitStateMethod == bj_UNIT_STATE_METHOD_ABSOLUTE) then
        // Set the replacement's current life to that of the old unit.
        // If the new unit has mana, do the same for mana.
        call SetUnitState(newUnit, UNIT_STATE_LIFE, GetUnitState(oldUnit, UNIT_STATE_LIFE))
        if (GetUnitState(newUnit, UNIT_STATE_MAX_MANA) > 0) then
            call SetUnitState(newUnit, UNIT_STATE_MANA, GetUnitState(oldUnit, UNIT_STATE_MANA))
        endif
    elseif (unitStateMethod == bj_UNIT_STATE_METHOD_DEFAULTS) then
        // The newly created unit should already have default life and mana.
    elseif (unitStateMethod == bj_UNIT_STATE_METHOD_MAXIMUM) then
        // Use max life and mana.
        call SetUnitState(newUnit, UNIT_STATE_LIFE, GetUnitState(newUnit, UNIT_STATE_MAX_LIFE))
        call SetUnitState(newUnit, UNIT_STATE_MANA, GetUnitState(newUnit, UNIT_STATE_MAX_MANA))
    else
        // Unrecognized unit state method - ignore the request.
    endif

    // Mirror properties of the old unit onto the new unit.
    //call PauseUnit(newUnit, IsUnitPaused(oldUnit))
    call SetResourceAmount(newUnit, GetResourceAmount(oldUnit))

    // If both the old and new units are heroes, handle their hero info.
    if (IsUnitType(oldUnit, UNIT_TYPE_HERO) and IsUnitType(newUnit, UNIT_TYPE_HERO)) then
        call SetHeroXP(newUnit, GetHeroXP(oldUnit), false)

        set index = 0
        loop
            set indexItem = UnitItemInSlot(oldUnit, index)
            if (indexItem != null) then
                call UnitRemoveItem(oldUnit, indexItem)
                call UnitAddItem(newUnit, indexItem)
            endif

            set index = index + 1
            exitwhen index >= bj_MAX_INVENTORY
        endloop
    endif

    // Remove or kill the original unit.  It is sometimes unsafe to remove
    // hidden units, so kill the original unit if it was previously hidden.
    if wasHidden then
        call KillUnit(oldUnit)
        call RemoveUnit(oldUnit)
    else
        call RemoveUnit(oldUnit)
    endif

    set bj_lastReplacedUnit = newUnit
    return newUnit
endfunction


Смотри и делай выводы почему это нестоит юзать. Фактически равноценно то что я предложил но только утечик будет больше. Просто неменяя юнита больше никак не делать. Спелл тоже меняет.

Зато хп манау запоминает впринцепи бонус модом можно и сделать без превращения это сохранить хп и ману.
Старый 23.08.2008, 16:58
Uk_gruby

offline
Опыт: 6,948
Активность:
Вроде бы можно юзать через пустую подель как дамми создаешь герй пустого дамми и прикрепляешь к костям модель одного а потом когда надо изменить модель другого
Старый 23.08.2008, 17:16
Dragon Knight
Меткий стрелок!!!
offline
Опыт: 4,138
Активность:
Sailar дак там половина не нужна!
Старый 23.08.2008, 17:36
Scorched

offline
Опыт: 7,912
Активность:
Цитата:
Сообщение от Dragon Knight
дак там половина не нужна!

это то, что делает триггер, если ты не понял)
Цитата:
Сообщение от Uk_gruby
прикрепляешь к костям модель

меня поддержали)
Старый 23.08.2008, 18:18
Dragon Knight
Меткий стрелок!!!
offline
Опыт: 4,138
Активность:
Там все виды действий!А тебе нужна только одна "Старая связь боевой единицы"
Старый 23.08.2008, 18:25
Sailar

offline
Опыт: 8,555
Активность:
Эта стандартная BJ Функция Replase создаёт утечки нетолько своей ненадабностью многих функций но и совсем неоптимизирована. Вобщем это зло. Впринцепи я бы мог сделать такую систему что бы можно было триггерно менять модель и хп, мп, урон, защита передавались новому юниту. Но это может позже + это врядли актуально все морф юзают.
Старый 23.08.2008, 18:43
CeraRalaz
...
offline
Опыт: 48,115
Активность:
Нет,я таки не понял,как сделать так,чтобы сохранились изученные скиллы.Хп,МП не надо,условимся на полном.
Старый 24.08.2008, 17:02
Scorched

offline
Опыт: 7,912
Активность:

Записать в переменные какие скиллы изучены, и изучить их у нового героя. Единственное, что у меня не получилось перенести на нового героя, когда я парился с этим в свое время - постоянные бонусы хп и мп типа "учебник здоровья" :(
Старый 24.08.2008, 17:11
Ответ

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

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

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

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



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