Вот если игрок начинает улучшать смотровую башню в сторожевую башню (для примера), как отменить это действие? Дать приказ?
Дать приказ юниту триггера "отставить" не работает. В чем может быть проблема?
Либо "отставить" не годится для отмены улучшения, либо "юнит триггера" уже теряется ибо улучшающиеся здание стало другой боевой единицей, точно не уверен в этом.
Спасибо за аргументированные комментарии и помощь заранее! :)

Принятый ответ

В итоге сложил теории и получилось реализовать ожидаемое с помощью кастом скрипта:
call IssueImmediateOrderById(tower, 851976)
(где tower - улучшаемая башня, здание, таймер оказался ненужным)
Спасибо за ответы PT153 и Steal nerves !
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
23
5 лет назад
0
Протестил, "юнит триггера" правильно юнита улавливает, значит дело в приказе. Но вот подходящего приказа "отменить улучшение" как-то не найти. Может есть что-то в коде?
0
24
5 лет назад
0
В худшем случае можно делать реплейс здания само на себя, если не найдется более вменяемого и менее костыльного способа.
0
32
5 лет назад
0
Есть же события на начало и завершения апгрейда, в гуях даже вроде было?
0
30
5 лет назад
0
quq_CCCP, так ему нужно не событие начала, а действие, которое отменит текущий апгрейд.
0
28
5 лет назад
0
Дать приказ юниту триггера "отставить" не работает. В чем может быть проблема?
В руках. У меня этим приказом улучшения строений отменяются.
0
27
5 лет назад
0
проверяй дебагом. выводи на экран. когда жмешь отмену, смотри какой приказ
2
28
5 лет назад
Отредактирован PT153
2
Я так понимаю, что ты улавливаешь улучшение по событию "Начинает улучшение"?
Это событие срабатывает ДО начала улучшения, потому приказ "Отмена" ничего не отменяет.
Есть два варианта.
1. В триггере с событием "Начинает улучшение" запустить таймер в 0.01 секунду в функцию, в которой будет приказываться "Отмена". Вместо таймера можно поставить паузу, но не рекомендую.
2. Или ловить улучшение по событию "Юнит получает приказ без цели".

function Trig_UpgradeStart_Actions takes nothing returns nothing
    local Wall t = GetUnitUserData(GetTriggerUnit())
    if not t.owner.spendGold(TowerData[t.uptype].goldcost) then  // Если не хватает ли триггерного золота на улучшение.
        call DisableTrigger(gg_trg_UpgradeCancel)
        call IssueImmediateOrderById(t.tower, Order_cancel)  // отдаём приказ "Отмена" башне. t.tower == GetTriggerUnit()
        call EnableTrigger(gg_trg_UpgradeCancel)
    endif
endfunction

function InitTrig_UpgradeStart takes nothing returns nothing
    set gg_trg_UpgradeStart = CreateTrigger()
    // Регистрация события происходит в другой функции. 
    // call TriggerRegisterPlayerUnitEvent(gg_trg_UpgradeStart, p, EVENT_PLAYER_UNIT_UPGRADE_START, null)
    call TriggerAddAction(gg_trg_UpgradeStart, function Trig_UpgradeStart_Actions)
endfunction
У меня это работает.
9
27
5 лет назад
Отредактирован MpW
9
приказ отмены ESC 851976 не равен приказу "stop" 851972
0
28
5 лет назад
Отредактирован PT153
0
Дать приказ юниту триггера "отставить" не работает. В чем может быть проблема?
В руках. У меня этим приказом улучшения строений отменяются.
Чукча писатель, чукча не читатель. Я прочитал, будто автор отдаёт приказ "Отмена", и у него это не работает.
Кто приказом "Стоп" отменяет улучшения?! Отменять нужно приказом "Отмена".

В стандартном редакторе нет приказа "Отмена". Нужен JNPG с включённым UMSWE.
Сделал наработку, где здания нельзя улучшить.
Ресурсы отнимаются, потому что при отмене улучшения возвращается только 75% от потраченных ресурсов.
Загруженные файлы
0
26
5 лет назад
0
Ресурсы отнимаются, потому что при отмене улучшения возвращается только 75% от потраченных ресурсов.
По стандарту так? Никогда не замечал.
Точнее, в сурвайвл хаосе видел, но в стандарте не припомню.
0
28
5 лет назад
Отредактирован PT153
0
По стандарту так? Никогда не замечал.
Точнее, в сурвайвл хаосе видел, но в стандарте не припомню.
Я забыл дописать "при отмене улучшения строения". По стандарту только 75% возвращается. Для апгредов возвращается 100% по стандарту, в сурве 75%.
1
23
5 лет назад
1
В итоге сложил теории и получилось реализовать ожидаемое с помощью кастом скрипта:
call IssueImmediateOrderById(tower, 851976)
(где tower - улучшаемая башня, здание, таймер оказался ненужным)
Спасибо за ответы PT153 и Steal nerves !
Принятый ответ
0
28
5 лет назад
0
таймер оказался ненужным
Я так написал, потому что сначала подумал, что я делаю отмену в событии получения приказа. А потом глянул свой код внимательнее, и увидел, что отменяю в событии с началом улучшения. Между прочим, я всё это зачеркнул.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.