Добавлен crusader556
Есть ли способ сделать триггерно юнита рандомно нанимающегося с разными моделями(выбранным) ? Типо нанимаешь его в казарме и он появляется то с моделью пехотинца , то бугая и т.д и т.п.
Либо сделать несколько иначе - нанимать юнита(пустышку) , который при окончании наёма триггерно заменялся бы на одного из нескольких юнитов с разными моделями ? Всё упирается в то , как сделать чтобы модели выбирались рандомно.(рандомно из нескольких выбранных моделей , а не всех моделей в игре).
Либо сделать несколько иначе - нанимать юнита(пустышку) , который при окончании наёма триггерно заменялся бы на одного из нескольких юнитов с разными моделями ? Всё упирается в то , как сделать чтобы модели выбирались рандомно.(рандомно из нескольких выбранных моделей , а не всех моделей в игре).
Принятый ответ
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
Надеюсь, что ты наалисишься. Если будут зулусы в коде, дай знать.
Ну в общем, я сделал всё что мог, чтобы дать вам чёткий ответ.
Ну в общем, я сделал всё что мог, чтобы дать вам чёткий ответ.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Волчачка
Забей типы в массив, и триггерно создавай случайно при помощи RandomInt в позиции дамика, сам дамик после сего - удаляй.
Или жди новый патч, в котором добавят функцию по смене моделей для объекта.
Отредактирован Alexander122
Кинг выше сказал про массив. По сути твой триггер прост, как Hellо, world.
Событие: юнит натренировался
Условие: Натренированный юнит = нужный тебе тип юнита
Действия:
*Рекомендую заранее заполнить массив*
Делаешь Реплейс нашего юнита на элемент массива с индексом от 0 (или 1, как больше нравится) до макс значения.
назначить одному юниту несколько моделей можно только через анимации этой модели - как это сделано у башен альянса
Проще говоря тот же пехотинец , только нанимаешь его и у него разные модели(хотя бы 5 моделек)(сойдет если делать через разных юнитов)(типо юнит даммик заменяется триггерно на одного из 5 выбранных юнитов)
Нанял, а он уже другой. Кликнул по пехотинцу, а он уже бугай или страж ночных эльфов, но нанимается.
Отредактирован crusader556
событие
боевая единица входит в игровой мир
условие
триггерный юнит=Тот даммик которого нанимаю в казарме
Действие
удалить даммика
заменить его на одного из 5 рандомных(специально сделанных , не из нейтралов или уже сущевствующих) юнитов.
Отредактирован Волчачка
Мы будет проверять с помощью GetTrainedUnitType(), а в самой казарме скроем 5 тех юнитов на найм, при помощи блокировки исследований, триггерно конечно же.
Для этого у нас есть реакция на событие:
Однако, я с подобным вообще не возился, успех не гарантирован. Проблема возникает уже с очередью)
Событие: Инициализация карты
Действия: (тут действие на стартовое золото)
Игрок - Заблокировать для Игрока 1 Пехотница
Ждать 2 сек.
Боевая единица - Дать приказ Твоей_Казарме тренировать Пехотинца
Отредактирован Волчачка
Вот полный пример:
Ну в общем, я сделал всё что мог, чтобы дать вам чёткий ответ.