Можете подсказать, какой у орков стринг приказа вылезти из постройки, как при клике на его иконку во время стройки. Гугл не помог, "stop" не сработал.
Заранее спасибо.

Не могу найти в списке функций GetConstructingUnit или что нибудь такое.
ApaxHoqpuJL, как не можешь. там в гуи есть такие только без Get. эта переменная на jass.

ApaxHoqpuJL, еще можно запретить строить на начальном этапе - проверить приказ стройки. проверяешь какое здание строит. id приказ => id здание.
во время события приказа в точку можно отдать приказ стоп, однако, "stop" не может сбить приказ в точку (даже стоп не помогает, не знаю почему. юнит просто бежит выполнять приказ в точку. замечал два раза такое).
Он просто не сбивает. Решение находил такое: я отдавал приказ двигаться в тек позицию юнита, и юнит останавливался и не бежал туда. Единственное, что замечано - что статические повороты делает, хотя не так существенно.
call IssuePointOrder(GetTriggerUnit(), "move", GetUnitX(GetTriggerUnit()), GetUnitY(GetTriggerUnit()) )
позже нашел другой способ у СССР-а - пауза. не делает развороты не нужные
сall PauseUnit(GetTriggerUnit(), true) //<= вкл паузу
call IssueImmediateOrder(GetTriggerUnit(), "stop")
сall PauseUnit(GetTriggerUnit(), false) //<= выкл паузу
и одновременно выдать текстовое оповещение игроку: "вы это здание не можете строить"
`
ОЖИДАНИЕ РЕКЛАМЫ...
26
call IssueImmediateOrderById(GetTriggerUnit(), 851976)
GetTriggerUnit() не припомню на кого назначать, либо на здание, либо на строителя.
3
8gabriel8, Хм. Не срабатывает. Вот код:
    private function Actions takes nothing returns nothing  //GLITCHED: removes the building with the worker inside
        call IssueImmediateOrderById(GetConstructingStructure(), 851976)
        call IssueImmediateOrderById(GetTriggerUnit(), 851976)
        call DisplayTextToPlayer(GetOwningPlayer(GetTriggerUnit()), 0, 0, ("|c00FFFF00" + "Алтарь уже собран!" + "|r")) //LOC
        call TriggerSleepAction(.2)
        call RemoveUnit(GetConstructingStructure())
Попробовал оба приказа, попробовал подождать перед удалением постройки, не помогает. Сообщение отображается нормально.
27
ApaxHoqpuJL, а проверь дебаг на юните. выводи имя юнита. что за событие используешь?
код
function Trig_D_Actions takes nothing returns nothing
    call TriggerSleepAction(0) // <= надо делать задержку
    call IssueImmediateOrderById(GetTriggerUnit(), 851976)
endfunction

//===========================================================================
function InitTrig_D takes nothing returns nothing
    set gg_trg_D = CreateTrigger(  )
    call TriggerRegisterPlayerUnitEventSimple( gg_trg_D, Player(0), EVENT_PLAYER_UNIT_CONSTRUCT_START )
    call TriggerAddAction( gg_trg_D, function Trig_D_Actions )
endfunction
3
Событие: "EVENT_PLAYER_UNIT_CONSTRUCT_START"
Дебаг показывает что GetTriggerUnit() и GetConstructingStructure() оба возвращают строящееся здание.
Не могу найти в списке функций GetConstructingUnit или что нибудь такое.
27
вот карта нужно делать задержку таймером или вэйтом, походу здание еще не успевает создаться. Поэтому невозможно дать приказ, ускорить строительство через триг и прочее в этом момент. не первый случай. пробовал убрать вэйт, тк не хочет отменять
Загруженные файлы
27
Не могу найти в списке функций GetConstructingUnit или что нибудь такое.
ApaxHoqpuJL, как не можешь. там в гуи есть такие только без Get. эта переменная на jass.

ApaxHoqpuJL, еще можно запретить строить на начальном этапе - проверить приказ стройки. проверяешь какое здание строит. id приказ => id здание.
во время события приказа в точку можно отдать приказ стоп, однако, "stop" не может сбить приказ в точку (даже стоп не помогает, не знаю почему. юнит просто бежит выполнять приказ в точку. замечал два раза такое).
Он просто не сбивает. Решение находил такое: я отдавал приказ двигаться в тек позицию юнита, и юнит останавливался и не бежал туда. Единственное, что замечано - что статические повороты делает, хотя не так существенно.
call IssuePointOrder(GetTriggerUnit(), "move", GetUnitX(GetTriggerUnit()), GetUnitY(GetTriggerUnit()) )
позже нашел другой способ у СССР-а - пауза. не делает развороты не нужные
сall PauseUnit(GetTriggerUnit(), true) //<= вкл паузу
call IssueImmediateOrder(GetTriggerUnit(), "stop")
сall PauseUnit(GetTriggerUnit(), false) //<= выкл паузу
и одновременно выдать текстовое оповещение игроку: "вы это здание не можете строить"
Принятый ответ
3
Steal nerves,
ApaxHoqpuJL, как не можешь. там в гуи есть такие только без Get. эта переменная на jass.
Это же все таки GetTriggerUnit(), как оказалось.
Новый способ работает даже лучше, спасибо еще раз!
27
ApaxHoqpuJL, конечно лучше. отмена строительства возвращает 75% от цены. можно конечно настроить в константах
28
В LTW (и в моей карте) при неверном расположении здания оно удаляется сразу, как начинает строиться. Ранее использовал способ с отдачей приказа движения, но возникали баги с золотом (золото отнимается на этапе отдачи приказа, и, из-за перехвата приказа, оно иногда не возвращалось), а ещё этот способ сбивает очередь приказов.
27
золото отнимается на этапе отдачи приказа, и, из-за перехвата приказа, оно иногда не возвращалось
вроде норм работает у меня. пока не замечал такого. но надо будет прочекать
а ещё этот способ сбивает очередь приказов
вроде так и должно быть. но для меня это как то не существенно, тут ничего не поделаешь. в очередь через триггеры не вставишь же
26
А это не ограничение на одну единицу здания? Если да, то мне такой способ кажется красивее, чтобы наличие иконки в меню строительства не путало:
Да и он обходит проблему 75% возврата.
Загруженные файлы
28
вроде норм работает у меня. пока не замечал такого. но надо будет прочекать
Если ставить приказы в очередь, а в очереди будет неверное место постройки, голда не вернётся.
Вот карта, где используется способ отмены приказом move (смотри триггер Builder's Abilities\BuildOrder). Там этот баг наблюдается, только что проверял.
Запретная местность в карте находится за пределами сетки игрока, а также если башня блокирует проход.
8gabriel8:
А это не ограничение на одну единицу здания? Если да, то мне такой способ кажется красивее
Безусловно, если дело лишь в количестве строений, то правильно и проще будет поставить лимит на количество. Если же дело в местности, то только через удаление строения.
Загруженные файлы
27
PT153, я посмотрел интересно.
кстати, смотри. я тестил. вот с "move" в позицию юнита золото не возвращает за несколько здании. а вот выше способ с паузой - все норм возвращает.
28
ApaxHoqpuJL, я сделал тесты, и вот пара выводов.
  1. Способ с приказом move лучше не использовать, почему, я описал выше.
  2. Способ через паузу. Если поставить приказы в очередь, среди которых будет постройка на неверной местности, ресурсы за башню вернутся, а сам воин всё равно побежит строить. Итог - бесплатное строение.
  3. И способ, который использую я (самый надёжный): удаление строения во время начала постройки.
28
а вот выше способ с паузой - все норм возвращает.
Он у меня вообще не работает.
UPD: смотрю пример, видимо где-то что у меня в карте мешает.
27
PT153, это не потому что у вас раб принадлежит к расе нежити. строительство там автоматом идет.
тфу нежить тут не при чем. тоже самое будет
28
тфу нежить тут не при чем. тоже самое будет
Да-да, я вот думаю, что же в той карте, что я кинул ранее, ломает.

Итак, я разобрался, что же там ломало.
Вот верные итоги.
  1. Способ с приказом move лучше не использовать, почему, я описал выше.
  2. Способ через паузу работает, если верно приписать условия в триггере. Лучше указать в условии проверку id приказа на равенство равкодов тех зданий, что юнит может строить. Можно сделать и по-другому: исключить все остальные приказы в точку. Это возможные способности у юнита в точку, приказы "smart", "patrol", "move" и приказ 851973 (этот приказ отдаётся при стане и паузе).
  3. И способ, который использую я (самый надёжный): удаление строения во время начала постройки.

Ломал именно приказ 851973, потому что у меня были проверки только на "smart", "patrol" и "move". Я до конца думал, что приказ 851973 немедленный, то есть не отдаётся в точку, то есть триггер не должен срабатывать. Но на самом деле приказ 851973 либо ловится всеми событиями приказа, либо при паузе отдаётся в точку.
Когда я делал эту версию карты (полтора года назад), я даже не знал об этом приказе.
27
PT153, лучше еще на время выключать триггер, а то вместе с текущий приказом - приказ стана 851973 срабатывает в дебагах. Я вообще не понимал, почему это срабатывает, если условие = равкод здания, следовательно, условие триггера должно вернуть false. Но оно работает, и я не обращал внимание, пока до меня не дошло
выкл триггер
вкл паузу
приказ "stop" //в паузе отдает приказ 851973
выкл паузу
вкл триггер
Чтобы оставить комментарий, пожалуйста, войдите на сайт.