Приказ отмены постройки орков
Можете подсказать, какой у орков стринг приказа вылезти из постройки, как при клике на его иконку во время стройки. Гугл не помог, "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) //<= выкл паузу
и одновременно выдать текстовое оповещение игроку: "вы это здание не можете строить"



Просмотров: 877

» Лучшие комментарии


8gabriel8 #1 - 1 год назад 4   
call IssueImmediateOrderById(GetTriggerUnit(), 851976)
GetTriggerUnit() не припомню на кого назначать, либо на здание, либо на строителя.
ApaxHoqpuJL #2 - 1 год назад 0
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())
Попробовал оба приказа, попробовал подождать перед удалением постройки, не помогает. Сообщение отображается нормально.
МрачныйВорон #3 - 1 год назад 0
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
ApaxHoqpuJL #4 - 1 год назад (отредактировано ) 0
Событие: "EVENT_PLAYER_UNIT_CONSTRUCT_START"
Дебаг показывает что GetTriggerUnit() и GetConstructingStructure() оба возвращают строящееся здание.
Не могу найти в списке функций GetConstructingUnit или что нибудь такое.
МрачныйВорон #5 - 1 год назад (отредактировано ) 4   
вот карта нужно делать задержку таймером или вэйтом, походу здание еще не успевает создаться. Поэтому невозможно дать приказ, ускорить строительство через триг и прочее в этом момент. не первый случай. пробовал убрать вэйт, тк не хочет отменять
Прикрепленные файлы
ApaxHoqpuJL #6 - 1 год назад (отредактировано ) 0
Steal nerves, Хм, забавно. Все получилось, спасибо большое.
МрачныйВорон #7 - 1 год назад (отредактировано ) 1   

Не могу найти в списке функций 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) //<= выкл паузу
и одновременно выдать текстовое оповещение игроку: "вы это здание не можете строить"
ApaxHoqpuJL #8 - 1 год назад (отредактировано ) 0
Steal nerves,
ApaxHoqpuJL, как не можешь. там в гуи есть такие только без Get. эта переменная на jass.
Это же все таки GetTriggerUnit(), как оказалось.
Новый способ работает даже лучше, спасибо еще раз!
МрачныйВорон #9 - 1 год назад 0
ApaxHoqpuJL, конечно лучше. отмена строительства возвращает 75% от цены. можно конечно настроить в константах
PT153 #10 - 1 год назад (отредактировано ) 0
В LTW (и в моей карте) при неверном расположении здания оно удаляется сразу, как начинает строиться. Ранее использовал способ с отдачей приказа движения, но возникали баги с золотом (золото отнимается на этапе отдачи приказа, и, из-за перехвата приказа, оно иногда не возвращалось), а ещё этот способ сбивает очередь приказов.
МрачныйВорон #11 - 1 год назад (отредактировано ) 0
золото отнимается на этапе отдачи приказа, и, из-за перехвата приказа, оно иногда не возвращалось
вроде норм работает у меня. пока не замечал такого. но надо будет прочекать
а ещё этот способ сбивает очередь приказов
вроде так и должно быть. но для меня это как то не существенно, тут ничего не поделаешь. в очередь через триггеры не вставишь же
8gabriel8 #12 - 1 год назад (отредактировано ) 3   
А это не ограничение на одну единицу здания? Если да, то мне такой способ кажется красивее, чтобы наличие иконки в меню строительства не путало:
Да и он обходит проблему 75% возврата.
Прикрепленные файлы
PT153 #13 - 1 год назад (отредактировано ) 0
вроде норм работает у меня. пока не замечал такого. но надо будет прочекать
Если ставить приказы в очередь, а в очереди будет неверное место постройки, голда не вернётся.
Вот карта, где используется способ отмены приказом move (смотри триггер Builder's Abilities\BuildOrder). Там этот баг наблюдается, только что проверял.
Запретная местность в карте находится за пределами сетки игрока, а также если башня блокирует проход.
8gabriel8:
А это не ограничение на одну единицу здания? Если да, то мне такой способ кажется красивее
Безусловно, если дело лишь в количестве строений, то правильно и проще будет поставить лимит на количество. Если же дело в местности, то только через удаление строения.
Прикрепленные файлы
МрачныйВорон #14 - 1 год назад 0
PT153, я посмотрел интересно.
кстати, смотри. я тестил. вот с "move" в позицию юнита золото не возвращает за несколько здании. а вот выше способ с паузой - все норм возвращает.
PT153 #15 - 1 год назад (отредактировано ) 0
ApaxHoqpuJL, я сделал тесты, и вот пара выводов.
  1. Способ с приказом move лучше не использовать, почему, я описал выше.
  2. Способ через паузу. Если поставить приказы в очередь, среди которых будет постройка на неверной местности, ресурсы за башню вернутся, а сам воин всё равно побежит строить. Итог - бесплатное строение.
  3. И способ, который использую я (самый надёжный): удаление строения во время начала постройки.
МрачныйВорон #16 - 1 год назад 0
PT153, вот пример
Прикрепленные файлы
PT153 #17 - 1 год назад (отредактировано ) 0
а вот выше способ с паузой - все норм возвращает.
Он у меня вообще не работает.
UPD: смотрю пример, видимо где-то что у меня в карте мешает.
МрачныйВорон #18 - 1 год назад (отредактировано ) 0
PT153, это не потому что у вас раб принадлежит к расе нежити. строительство там автоматом идет.
тфу нежить тут не при чем. тоже самое будет
PT153 #19 - 1 год назад (отредактировано ) 0
тфу нежить тут не при чем. тоже самое будет
Да-да, я вот думаю, что же в той карте, что я кинул ранее, ломает.

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

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