Я хочу отредактировать стандартный скрипт orc.ai, чтобы перед покупкой нового героя компьютер проверял, есть ли доступный рандомный кастомный герой из списка, и если доступен, то брал в первую очередь его, если нет, то брал стандартного героя. При этом кастомный герой может быть недоступен, т.к. его уже купил другой игрок (в карте установлен лимит на кастомных героев).
Я не знаю как это сделать технически, поэтому подумал пойти топорным методом. Когда герой появляется на карте, проверить, есть ли доступный кастомный аналог, и если есть - заменить. Набросал черновой скрипт через триггеры, перевёл его в jass. Вставил в .ai скрипт, и понял что он не работает.
function Trig_Hero_Replacement_Conditions takes nothing returns boolean
if ( not ( GetTriggerUnit() == hero_id ) ) then
return false
endif
if ( not ( GetUnitTypeId(GetTriggerUnit()) == 'Obla' ) ) then
return false
endif
return true
endfunction
function Trig_Hero_Replacement_Actions takes nothing returns nothing
call ReplaceUnitBJ( GetTriggerUnit(), 'Ogrh', bj_UNIT_STATE_METHOD_RELATIVE )
set hero_id = GetLastReplacedUnitBJ()
endfunction
//===========================================================================
function InitTrig_Hero_Replacement takes nothing returns nothing
set gg_trg_Hero_Replacement = CreateTrigger( )
call TriggerRegisterEnterRectSimple( gg_trg_Hero_Replacement, GetPlayableMapRect() )
call TriggerAddCondition( gg_trg_Hero_Replacement, Condition( function Trig_Hero_Replacement_Conditions ) )
call TriggerAddAction( gg_trg_Hero_Replacement, function Trig_Hero_Replacement_Actions )
endfunction
Наверно, потому что .ai скрипты не рассчитаны на применение функций типа Replace Unit. Либо же я где-то ошибся. Можете подсказать что не так в этом скрипте, или в целом в моём подходе?
Вот файл целиком (включая мой гениальный скрипт в самом конце):
Принятый ответ
Когда пишешь ai скрипт, в нем нельзя:
Использовать функции из blizzard.j
Использовать триггеры
Использовать code callback функции
Использовать возврат строк
Использовать функции из blizzard.j
Использовать триггеры
Использовать code callback функции
Использовать возврат строк
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Придется писать ИИ ручками с нуля.
Ред. WilliamBz
Ред. quq_CCCP
К слову можно ИИ написать и в обычном редакторе триггеров, но это муторно да и самому микро реализовать не так уж и просто.
Использовать функции из blizzard.j
Использовать триггеры
Использовать code callback функции
Использовать возврат строк
Ред. WilliamBz
Можно и else elseif итд, и прочий синтаксис, это ведь jass, просто скрипты в формате ai, с некоторыми отличиями)
ExecuteFunc кстати тоже нельзя.