Есть ли способ сделать триггерно юнита рандомно нанимающегося с разными моделями(выбранным) ? Типо нанимаешь его в казарме и он появляется то с моделью пехотинца , то бугая и т.д и т.п.
Либо сделать несколько иначе - нанимать юнита(пустышку) , который при окончании наёма триггерно заменялся бы на одного из нескольких юнитов с разными моделями ? Всё упирается в то , как сделать чтобы модели выбирались рандомно.(рандомно из нескольких выбранных моделей , а не всех моделей в игре).

UPD: Вот я ступил, можно отслеживать через приказ
call TriggerRegisterPlayerUnitEvent( gg_trg_New, Player(0), EVENT_PLAYER_UNIT_ISSUED_ORDER, null )
Просто отлавливаем общий приказ, в котором айди юнита, который мы нанимаем меняем в очереди, и воля. Ну и проверяем здание отдавшее сей приказ, то ли здание, которому нужно менять.
Вот полный пример:
globals
    constant integer barrack = 'hbar'
    constant integer footman = 'hfoo'
    constant integer footman_a = 'h000'
    constant integer footman_b = 'h001'
    constant integer footman_c = 'h002'
    constant integer footman_d = 'h003'
    constant integer footman_e = 'h004'
    
    integer array   RandomTrain
    
endglobals

function AssetTrains takes nothing returns nothing
    local player p = Player(0)
    
    call DestroyTimer(GetExpiredTimer())
    
    set RandomTrain[0] = footman 
    set RandomTrain[1] = footman_a
    set RandomTrain[2] = footman_b
    set RandomTrain[3] = footman_c
    set RandomTrain[4] = footman_d
    set RandomTrain[5] = footman_e
    
    call SetPlayerTechMaxAllowed( p, footman_a, 0 )
    call SetPlayerTechMaxAllowed( p, footman_b, 0 )
    call SetPlayerTechMaxAllowed( p, footman_c, 0 )
    call SetPlayerTechMaxAllowed( p, footman_d, 0 )
    call SetPlayerTechMaxAllowed( p, footman_e, 0 )
    
    set p = null
endfunction

function Trig_New_Actions takes nothing returns nothing
     local unit u = GetTriggerUnit()
     local integer id = GetIssuedOrderId()
     local player p = GetOwningPlayer(u)
     local integer newId = 0
     if GetUnitTypeId(u) == barrack then
        set newId = RandomTrain[GetRandomInt(0,5)]
            if newId != footman then
                call SetPlayerTechMaxAllowed( p, footman, 0 )
                call SetPlayerTechMaxAllowed( p, newId, -1 )
                call IssueImmediateOrderById( u, 851976 )
                call IssueImmediateOrderById( u, newId )
                call SetPlayerTechMaxAllowed( p, footman, -1 )
                call SetPlayerTechMaxAllowed( p, newId, 0 )
            endif
     endif
     
     set u = null
     set id = 0
     set p = null
     set newId = 0
endfunction


function InitTrig_New takes nothing returns nothing
    set gg_trg_New = CreateTrigger(  )
    call TimerStart( CreateTimer(), 1., false, function AssetTrains )
    // call AssetTrains()
    call TriggerAddAction( gg_trg_New, function Trig_New_Actions )
    call TriggerRegisterPlayerUnitEvent( gg_trg_New, Player(0), EVENT_PLAYER_UNIT_ISSUED_ORDER, null ) 
endfunction
Надеюсь, что ты наалисишься. Если будут зулусы в коде, дай знать.
Ну в общем, я сделал всё что мог, чтобы дать вам чёткий ответ.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
23
Похожие вопросы:

ответ
Есть способность "Тёмный", если дать её юниту, то он заменится на юнит указанный в способности.У такого варианта наименьшее число неудобств.
ответ
Через триггеры и способности. Дать спосбность морфа и приказать ее использовать. Предварительно создать новую альтернативную единицу с другой моделью
Для героев:
Перевоплощение - Иллидан
Превратиться в кибергоблина (Проверено - работает)
ответ
В программе War3ModelEditor можно автоматически рассчитать границы. Но перед этим нужно вывести хотя бы одну точку на необходимое расстояние.
После чего точку можно удалить.
ответ
Nelloy, если найдёт где в памяти хранится модель после чего сам создаст модель из файла и заменит модель юнита на новую то можно
Pergin, гугли memory hack war3
это сложно и требует от тебя больших знаний в джасс и понимания работы движка игры
без этого даже не пытайся
либо делай через морф
как морфить одного юнита в другого написано в статьях
ответ
  1. Хорошая модель должна иметь минимальное необходимое количество полигонов. Что будет если заспавнить много юнитов можешь проверить и сам.
  1. 8 Мб - лимит для патчей до версии 1.26. В последнем патче карта может весить 100+ Мб. О скорости скачивания ничего не могу сказать.

29
Просто сделай найм даммика, при этом создай несколько версий этого юнита с разными моделями.
Забей типы в массив, и триггерно создавай случайно при помощи RandomInt в позиции дамика, сам дамик после сего - удаляй.
Или жди новый патч, в котором добавят функцию по смене моделей для объекта.
4
Есть функция в гуи ReplaceUnit (мгновенно заменяет текущий тип юнита на другой). И событие, которое реагирует на то, что юнит натренился в казарме и вышел.
Кинг выше сказал про массив. По сути твой триггер прост, как Hellо, world.
Событие: юнит натренировался
Условие: Натренированный юнит = нужный тебе тип юнита
Действия:
*Рекомендую заранее заполнить массив*
Делаешь Реплейс нашего юнита на элемент массива с индексом от 0 (или 1, как больше нравится) до макс значения.
32
морфить даммика. или просто спаунить триггерно юнита.
назначить одному юниту несколько моделей можно только через анимации этой модели - как это сделано у башен альянса
32
Alexander122, реплейс совершенно ненужен, просто создавай случайного юнита при найме даммика. Все возможные случайные юниты нужно будет сделать в редакторе обьектов за ранее чтобы было из чего выбирать, так же есть функция которая выбирает вертен тип случайного нейтрального крипа для подходящей местности с заданым уровнем, может быть полезно.
12
quq_CCCP:
Alexander122, реплейс совершенно ненужен, просто создавай случайного юнита при найме даммика. Все возможные случайные юниты нужно будет сделать в редакторе обьектов за ранее чтобы было из чего выбирать, так же есть функция которая выбирает вертен тип случайного нейтрального крипа для подходящей местности с заданым уровнем, может быть полезно.
Можешь подробнее описать триггер ?
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.