Добавлен
Всем доброго времени суток! Хотелось бы задать вопрос по искусственному интеллекту. Просматривал темы про jass, но там не нашел ничего похожего. В чем собственно вопрос: Задался целью заставить ии в сражениях покупать резаков так же, как он это делает с дирижаблями гоблинов. Посмотрел common.ai. Там для дирижаблей юзается переменная Zeppelin и следующие куски кода:
native PurchaseZeppelin takes nothing returns nothing
constant integer ZEPPLIN = 'nzep'
constant integer ZEPPELIN = ZEPPLIN
boolean ready_for_zeppelin = true
boolean get_zeppelin = false
purchase zeppelins

if get_zeppelin and GetGold() > 300 and GetWood() > 100 then
call Trace("purchase zep\n") xxx
call PurchaseZeppelin()
set get_zeppelin = false
set ready_for_zeppelin = false
return
endif
set ready_for_zeppelin = true
function GetZeppelin takes nothing returns nothing
if ready_for_zeppelin then
set get_zeppelin = true
endif
endfunction
Сделал все наподобие для резака:
native PurchaseGir takes nothing returns nothing
constant integer GIRR = 'ngir'
constant integer GIR = GIRR
boolean ready_for_gir = true
boolean get_gir = false
purchase gir

if get_gir and GetGold() > 400 and GetWood() > 100 then
call Trace("purchase gir\n") xxx
call PurchaseGir()
set get_gir = false
set ready_for_gir = false
return
endif
set ready_for_gir = true
function GetGir takes nothing returns nothing
if ready_for_gir then
set get_gir = true
endif
endfunction
Взял стандартное ии орков и добавил туда, опираясь на код для дирижаблей:
integer c_gir = 0
set c_gir = GetUnitCount(GIR)
if c_food_used >= 50 and c_gir < 1 then
call GetGir()
endif
Портирую ии на карту для проверки, задаю в тригере запуск ии для игрока, все как надо, но при запуске карты ии начинает просто добывать ресурсы. Никакого развития не происходит. Методом последовательного вырезания написанного мною кода из файла ии, выяснил, что проблема в этой строке:
set c_gir = GetUnitCount(GIR)
Не знаю в чем именно проблема. Переменная GIR создана мною в common.ai, по идее, название переменной может быть любым, или я не прав? Подскажите пожалуйста. Насчет того, что ngir - это ид (вроде ид, я в этом не силен) гоблинского резака, уверен, так как получил это с помощью функции call SetBuildAll( BUILD_UNIT, 1, 'ngir', -1 ), модуля ии в World Editor, просто указав там постройку резака и потом экспортировал код и открыл, посмотрел. Буду очень признателен за помощь.

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

Wyett, ты можешь добавлять подобные этим:
function ... takes ... returns ...
Код
endfunction
Резака купить можно, но это будет абсолютно не похоже на покупку дирижабля.
`
ОЖИДАНИЕ РЕКЛАМЫ...
3
2
9 лет назад
3
И вообще интересно, зачем близзы так изворачивались:
constant integer ZEPPLIN = 'nzep'
constant integer ZEPPELIN = ZEPPLIN
?
Почему нельзя было сделать напрямую:
constant integer ZEPPELIN = 'nzep' ?
2
23
9 лет назад
2
Wyett, возможно, чтобы можно было и так и эдак написать.
0
2
9 лет назад
0
SomeFire, ну хорошо допустим что имеют место быть оба варианта. Есть предположения почему ии не работает? Мне кажется что дело в моей переменной. Других причин быть не может вроде.
2
28
9 лет назад
2
Wyett, нативные функции нельзя добавлять
они прописаны в движке игры
для полных нубов :
строка
native PurchaseGir takes nothing returns nothing
означает что ты используешь функцию PurchaseGir созданую разработчиками игры
но так как разработчики не создавали функцию PurchaseGir то и ты её не можешь использовать
вывод
читай статьи по аи и статьи по джасс
2
2
9 лет назад
2
nvc123, я исходил из того, что раз функции описываются в common.ai, то можно описать свои, значит мое предположение не верно. можешь посоветовать какой-нибудь способ, добавить собственные функции в этот файл?
2
7
9 лет назад
2
Wyett, ты можешь добавлять подобные этим:
function ... takes ... returns ...
Код
endfunction
Резака купить можно, но это будет абсолютно не похоже на покупку дирижабля.
Принятый ответ
2
2
9 лет назад
2
zerotul, большое спасибо, буду пробовать
Чтобы оставить комментарий, пожалуйста, войдите на сайт.