XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
hapr

offline
Опыт: 149
Активность:
Определение проходимости пути?
В некоторых картах путь к рудникам или еще, куда нибудь бывает, закрыт, чем нибудь.
В частности на Бизардовской карте "Лавина" есть рудники путь, к которым прикрыт камнями и иногда AI при экспансии тупа, пытается туда попасть.
Так вот можно ли с помощью Jassa определить невозможность туда попасть? А то я ни как не могу ничего придумать.
Прошу меня извинить за навязчевасть ну может всё таки кто нибудь знает, почему у меня AI тормозит?
AI
Старый 29.12.2007, 00:54
R_A_N_D_O_M

offline
Опыт: 5,372
Активность:
Это помоему делается на обычных тригах , ИИ - ignore чёто там точно не помню. Попробуй.
Старый 29.12.2007, 18:05
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
R_A_N_D_O_M, нет
Обычно создается невидимый весьма скоростной юнит, например, пешего типа и ему отдается приказ двигаться туда-то. Отдача приказа возвращает либо true либо false. Но вряд ли это поможет, т.к. область возле рудника проходима, просто проход перегорожен. + нельзя джассово брать отсутствие патчинга из-за декораций, этот патчинг не учитывается (только рельефный) так что это весьма сложный вопрос, надо писать системку и анализировать все что можно, а у тебя недостаточно щас точно сформулирован вопрос
Старый 29.12.2007, 21:01
hapr

offline
Опыт: 149
Активность:
Цитата:
Сообщение от FellGuard
R_A_N_D_O_M, нет
Обычно создается невидимый весьма скоростной юнит, например, пешего типа и ему отдается приказ двигаться туда-то. Отдача приказа возвращает либо true либо false. Но вряд ли это поможет, т.к. область возле рудника проходима, просто проход перегорожен. + нельзя джассово брать отсутствие патчинга из-за декораций, этот патчинг не учитывается (только рельефный) так что это весьма сложный вопрос, надо писать системку и анализировать все что можно, а у тебя недостаточно щас точно сформулирован вопрос

Я тоже подумывал о создании юнита, но чуть по другому: рассчитать расстояние между стартовой позицией и точкой назначения, потом разделить на скорость движения плюс добавить некоторое время на не прямоту пути. Потом занести в таймер (если добавить эту функцию в конец "function main takes nothing returns nothing" то можно и просто call Sleep(?)). Если по истечению таймера юнит не объявится в нужной точке значит скорей всего путь заблокирован. Но ... памойму слишком много "но".
Нужно мне это для проверки можно ли юнита посылать к источнику жизни или он туда никогда не попадет? Можно ли пытаться AI напасть на крипов вокруг рудника и попытаться там произвести экспансию? и т. д. - чтобы можно было использовать на разных картах, поэтому триггеры полностью отходят.
А тут возникает ещё проблема, как определить, на сколько сильны монстры по пути к нужной точке? хотя, наверное, это уже нестоль и важно ведь всё равно считай 100% придётся туда посылать армию.
Старый 29.12.2007, 23:18
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
в коммон.ai есть много интересных функций, можно написать скриптик и затолкать в карту, учитывая что ф-ии из коммон ж тоже доступны, можно в кеш записать все что угодно из ии скрипта. Вот примеры забавных функций из коммон.ai
Код:
native    GetCreepCamp(integer min, integer max, boolean flyers_ok)
хотя проглядел я наискосок коммон.аи - мало чего там подходит.. вобщем, идея ясна - посмотри, вдруг чегонибудь да найдешь)
Старый 30.12.2007, 02:01
hapr

offline
Опыт: 149
Активность:
Цитата:
Сообщение от FellGuard
в коммон.ai есть много интересных функций, можно написать скриптик и затолкать в карту, учитывая что ф-ии из коммон ж тоже доступны, можно в кеш записать все что угодно из ии скрипта. Вот примеры забавных функций из коммон.ai
Код:
native    GetCreepCamp(integer min, integer max, boolean flyers_ok)
хотя проглядел я наискосок коммон.аи - мало чего там подходит.. вобщем, идея ясна - посмотри, вдруг чегонибудь да найдешь)

Наверное, я всё-таки не точно сформулировал свой вопрос - попробую получше. Мне надо это не для какой то карты, а надо достаточно универсальный способ позволяющий определить 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
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
недавно вспомнил, можно попробовать еще
Код:
set flag = IsTerrainPathable(GetUnitX(mine), GetUnitY(mine),  PATHING_TYPE_PEONHARVESTPATHING)
Старый 08.01.2008, 23:00
hapr

offline
Опыт: 149
Активность:
Цитата:
Сообщение от FellGuard
недавно вспомнил, можно попробовать еще
Код:
set flag = IsTerrainPathable(GetUnitX(mine), GetUnitY(mine),  PATHING_TYPE_PEONHARVESTPATHING)

Определять эта функция то определяет на ходьбу, строительство и т. д., но разве не в какой то точки? А ведь любой юнит занимает места побольше, чем точка. Хоть может я и ошибаюсь? Но покпайнемеры когда я проверил на возможность строительство здания, то эта функция возвращала истину, а строить нельзя было (покуда я не понял, что)
"IssueBuildOrderById(GetExpansionPeon(), 'hhou', x, y)" луче ставить в условие без call ведь она возвращает и boolean)
Старый 09.01.2008, 01:40
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
она возвращает значения наоборот) не помню точно, но когда патчинг на проходимость ставил всегда приходилось использовать !=, проверь, может всетаки сработает. Я так думаю, что проверка с помощью PATHING_TYPE_PEONHARVESTPATHING вернет доступность места для работников.. Хотя черт его знает :): а проверить щас к сожалению не могу
Старый 09.01.2008, 06:27
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 02:03.