hapr
offline
Опыт:
149Активность: |
Определение проходимости пути?
В некоторых картах путь к рудникам или еще, куда нибудь бывает, закрыт, чем нибудь.
В частности на Бизардовской карте "Лавина" есть рудники путь, к которым прикрыт камнями и иногда AI при экспансии тупа, пытается туда попасть. Так вот можно ли с помощью Jassa определить невозможность туда попасть? А то я ни как не могу ничего придумать. Прошу меня извинить за навязчевасть ну может всё таки кто нибудь знает, почему у меня AI тормозит? AI |
29.12.2007, 00:54 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
R_A_N_D_O_M
offline
Опыт:
5,372Активность: |
Это помоему делается на обычных тригах , ИИ - ignore чёто там точно не помню. Попробуй. |
29.12.2007, 18:05 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
FellGuard
Losyash
offline
Опыт:
39,547Активность: |
R_A_N_D_O_M, нет
Обычно создается невидимый весьма скоростной юнит, например, пешего типа и ему отдается приказ двигаться туда-то. Отдача приказа возвращает либо true либо false. Но вряд ли это поможет, т.к. область возле рудника проходима, просто проход перегорожен. + нельзя джассово брать отсутствие патчинга из-за декораций, этот патчинг не учитывается (только рельефный) так что это весьма сложный вопрос, надо писать системку и анализировать все что можно, а у тебя недостаточно щас точно сформулирован вопрос |
29.12.2007, 21:01 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
hapr
offline
Опыт:
149Активность: |
Цитата:
Я тоже подумывал о создании юнита, но чуть по другому: рассчитать расстояние между стартовой позицией и точкой назначения, потом разделить на скорость движения плюс добавить некоторое время на не прямоту пути. Потом занести в таймер (если добавить эту функцию в конец "function main takes nothing returns nothing" то можно и просто call Sleep(?)). Если по истечению таймера юнит не объявится в нужной точке значит скорей всего путь заблокирован. Но ... памойму слишком много "но". Нужно мне это для проверки можно ли юнита посылать к источнику жизни или он туда никогда не попадет? Можно ли пытаться AI напасть на крипов вокруг рудника и попытаться там произвести экспансию? и т. д. - чтобы можно было использовать на разных картах, поэтому триггеры полностью отходят. А тут возникает ещё проблема, как определить, на сколько сильны монстры по пути к нужной точке? хотя, наверное, это уже нестоль и важно ведь всё равно считай 100% придётся туда посылать армию. |
|
29.12.2007, 23:18 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
FellGuard
Losyash
offline
Опыт:
39,547Активность: |
в коммон.ai есть много интересных функций, можно написать скриптик и затолкать в карту, учитывая что ф-ии из коммон ж тоже доступны, можно в кеш записать все что угодно из ии скрипта. Вот примеры забавных функций из коммон.ai
Код:
|
30.12.2007, 02:01 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
hapr
offline
Опыт:
149Активность: |
Цитата:
Наверное, я всё-таки не точно сформулировал свой вопрос - попробую получше. Мне надо это не для какой то карты, а надо достаточно универсальный способ позволяющий определить AI (в любой карте без редоктирования этой карты) можно ли подойти, например к какому нибудь руднику или же путь заблокирован. Насчёт же "native GetCreepCamp(integer min, integer max, boolean flyers_ok)" то я эту функцию тоже рассматривал. Как я понял в теории если написать, например "set u = GetCreepCamp(50, 50, true), где u - юнит", то мы должны получить юнита состоящего в группе из юнитов общий суммарный уровень которых будет равен 50,true - включая летающих юнитов, если путь к этим крипам заблокирован, то функция возвратит null. Но на практике если создать в центре карты ("Лавина") крипов общим уровнем, например 50, то AI атакует. Если к этим крипам заблокировать путь то уже нет. Но с другой стороны если добавить к ближайшему источнику жизни от стартовой позиции AI крипов (для различия от других скоплений крипов), то если стартовая позиция и соответственно источник жизни находится в низу, то всё работает, если, же вверху, то всё равно функция возвращает юнита с нижнего источника. А так как суммарный уровень не сходится то AI атакует случайных других крипов. Па, какой причине не представляю, может эта функция недоработана? а может какая небудь другая причина...Но вот если бы работала ... то было бы всё просто. Насчёт же common.ai то я тоже думаю ,что для определения проходимости там больше ничего и нет. |
|
01.01.2008, 00:16 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
FellGuard
Losyash
offline
Опыт:
39,547Активность: |
недавно вспомнил, можно попробовать еще
Код:
|
08.01.2008, 23:00 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
hapr
offline
Опыт:
149Активность: |
Цитата:
Определять эта функция то определяет на ходьбу, строительство и т. д., но разве не в какой то точки? А ведь любой юнит занимает места побольше, чем точка. Хоть может я и ошибаюсь? Но покпайнемеры когда я проверил на возможность строительство здания, то эта функция возвращала истину, а строить нельзя было (покуда я не понял, что) "IssueBuildOrderById(GetExpansionPeon(), 'hhou', x, y)" луче ставить в условие без call ведь она возвращает и boolean) |
|
09.01.2008, 01:40 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
FellGuard
Losyash
offline
Опыт:
39,547Активность: |
она возвращает значения наоборот) не помню точно, но когда патчинг на проходимость ставил всегда приходилось использовать !=, проверь, может всетаки сработает. Я так думаю, что проверка с помощью PATHING_TYPE_PEONHARVESTPATHING вернет доступность места для работников.. Хотя черт его знает :): а проверить щас к сожалению не могу |
09.01.2008, 06:27 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|