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

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

Результаты опроса: Хотите ли вы принять участие в турнире AOS AI (в первом посте почти вся инфа)
Да (устраивают условия) 26 52.00%
Условия не устраивают (хочу другой турнир AI, например по другому жанру и тд.) 12 24.00%
Вообще не хочу туринир AI 12 24.00%
Голосовавшие: 50. Вы еще не голосовали в этом опросе

Ответ
 
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт: 6,885
Активность:
Еще часик погодите, почти все))
Старый 21.07.2010, 20:08
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
Alex_Hell, выкладывай.
Сам начну через пару дней.
Старый 21.07.2010, 20:10
ZERO_01

offline
Опыт: 4,167
Активность:
А я через 4 =) В понедельник приезжаю!!
наконец-то
Старый 21.07.2010, 20:36
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт: 6,885
Активность:
Вощем опять не успеваю, завтра карту выложу))
Старый 21.07.2010, 21:18
ZERO_01

offline
Опыт: 4,167
Активность:
Alex_Hell:
Вощем опять не успеваю, завтра карту выложу))
омг Да ладно, трудись)
Старый 21.07.2010, 21:23
ZERO_01

offline
Опыт: 4,167
Активность:
Alex_Hell, карта готова?
Старый 25.07.2010, 15:52
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
Надеюсь я ничего не пропустил? Если так, то я только за. У меня как раз есть несколько готовых наработок по части АИ. Правда, с представленными правилами АИ получается весьма сложным.
PlayerDark добавил:
Да, если там только этот ваш си жасс, то я пас.
Старый 25.07.2010, 17:01
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт: 6,885
Активность:
ZERO_01, не до конца)) 2 дня убивал вирусы - лечил винду)) седня вот тока сел доделывать.. спешу до завтра доделать..
PlayerDark, все создается на GUI или JASS, ниче замороченного нету, только есть некоторые правила создания AI, типа отдельно проверять что юнит = иллюзия нельзя, проверять характеристики (здоровье, ману и тд.) толко у видимых юнитов и тд.
все правила подробно будут в начале турира выложены
Старый 25.07.2010, 19:45
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
Alex_Hell, все это очень сложно будет. Кто будет проверять код ? Лучше сделать какие нибудь общедоступные функции, или, просто, некоторые запретить совсем, некоторые разрешить без ограничений.
PlayerDark добавил:
PS Код сам писал или откуда позаимствовал ?
Старый 25.07.2010, 21:10
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт: 6,885
Активность:
PlayerDark, так и есть: много функций запрещено вообще, некоторые доступны без ограничений, но вот некоторые с ограничениями, но и обойти такое невозможно - ведь в редакторе изначально разрешено делать все что можно, и для разработки AI естественно разрешено близами применять любые JASS-функции включая проверки здоровья и маны невидимых юнитов, отдачи приказов на невидимую цель и тд.. я решил самым простым путем: написал в DOC-файле какие действия и в каком случаем можно применять разработчику AI.. когда все будет сделано - пороверять буду я, ну и если помогут - еще люди.. да это не на долго, но всеже код просмотреть хотябы нужно будет...
Другие варианты предлагай?
Можно конечно сделать список общедоступных функций на JASS, куда уже встроены все проверки и тд, я такое предлагал в самом начале - что-то типа интерфейса - но многие отказались - это по их мнению сложнее, хотя ограничения как были так и останутся - никуда от них не уйти, разрешать делать нужно только то, что может делать человек в плане проверок, вот человек когда играет он смотрит всех юнитов вокруг себя и он не видит невидимок - так и AI не должен их видеть, когда человек применяет способность например Молот Бурь на героя врага, но враг убежал на базу, твой герой остановится, так и AI должен останавливаться (но это будет встроено в геймплей)..
Я сам не просто так эти ограничения придумываю, я начал создавать простенький AI, и тутже по ходу разработки дошло, что вот такое нужно запретить, а вот в данном случае нужно проверять так-то и так-то..
Вообще это не на много усложняет разработку, зато вот у каждого есть список того, что он может делать и что не может, чтобы было честное соревнование..
Код писал сам с нуля

Ладно, смотрите:
Одно из правил разработки AI:
Разрешено использовать наборы юнитов в группы и проход по этим группам (Раздел “Отряд” на GUI), но эти юниты должны фильтроваться особым образом (силами разработчика AI):
(При этом можно набирать юнитов в регионе – RECT, и он не должен быть полностью видимый)
____Если юнит - враг:
1. Юнит должен быть видим игроку-владельцу AI (Видимость – Unit Is Visible To Player)
2. Обязательно добавлять OR-условие, что юнит является иллюзией, если проверяется классификация юнита (Боевая единица – Unit Classification Check): все случаи кроме “ЗДАНИЕ”.
К примеру: (Юнит is ГЕРОЙ) OR (Юнит is an illusion)
3. Нельзя отдельно проверять, что юнит является иллюзией (без OR – условий предыдущего пункта)
____Если юнит - союзник:
1. Не обязательно добавлять OR-условие, что юнит является иллюзией, если проверяется классификация юнита (Боевая единица – Unit Classification Check)
2. Можно отдельно проверять, что юнит является иллюзией (без OR – условий предыдущего пункта)
Вот пример, как это может реализовать разработчик AI:
// Периодическая функция AI
// udg_ALEXHELL_PlayerID - индекс игрока-владельца AI
function ALEXHELL_PeriodicFunc takes nothing returns nothing
    local unit me = udg_Hero[udg_ALEXHELL_PlayerID]	// мой герой
    local group g

    // Набираем в группу всех юнитов в радиусе от героя
    set g = CreateGroup()
    call GroupEnumUnitsInRange(g, GetUnitX(me) , GetUnitY(me), 1000, null)

    // Выбираем новую цель для атаки / магии
    loop
        set u = FirstOfGroup(g)
        exitwhen u == null

        // Если юнит - враг
        if (IsUnitEnemy(u, Player(udg_ALEXHELL_PlayerID))) then
        
            // Если мы его видим
            if (GamePlay_IsVisible(udg_ALEXHELL_PlayerID, u)) then

                // Если это герой или иллюзия
                if (IsUnitType(u, UNIT_TYPE_HERO) or IsUnitIllusion(u)) then

                    // можем к примеру отдать приказ "Молот Бурь"

                // Если это здание
                elseif (IsUnitType(u , UNIT_TYPE_STRUCTURE)) then

                    // можем к примеру отдать приказ "Атаковать"

                // Если это простой воин
                else

                    // можем к примеру отдать приказ "Атаковать"

                endif
            endif

        // Если юнит - союзник
        else
            // Если это герой
            if (IsUnitType(u, UNIT_TYPE_HERO)) then

                    // можем к примеру отдать приказ "Благодать"
            
            // Если это иллюзия
            elseif (IsUnitIllusion(u)) then

                    // можем не тратить способности на иллюзию
            
            // Если это здание
            elseif (IsUnitType(u, UNIT_TYPE_STRUCTURE)) then

                    // можем подойти поближе чтобы защищать
                
            // Если это простой воин
            else

                    // можем подойти поближе чтобы прикрыться (атаки по линиям)
            
            endif
        endif

        call GroupRemoveUnit(g, u)
        set u = null
    endloop

    call DestroyGroup(g)
    set g = null
endfunction
Это была часть AI - примера, который будет всем доступен в карте-основе...
Ну так вот разьве это на много осложнило разработку AI? Я думаю - нет...
Тут присутствует функция GamePlay_IsVisible - она общедоступная и служит для определения видимости юнита для конкретного игрока..
Так вот можно конечно сократить и вышеприведенный какрас до нескольких общих функций, типа:
// Возвращает всех союзных юнитов (в виде группы) в радиусе [range] от юнита [u]
// При этом [u] должен быть одним из союзных юнитов для AI (либо его герой, либо крипы,
// либо союзные герои) - это всеравно придется проверять нам при просмотре кода
function GetAllyInRange takes unit u, real range returns group

// Возвращает всех вражеских видимых юнитов (в виде группы) в радиусе [range] от юнита [u]
// При этом [u] должен быть одним из союзных юнитов для AI (либо его герой, либо крипы,
// либо союзные герои)
function GetEnemyInRange takes unit u, real range returns group
Как вам такое предложение? Я могу создать набор таких общедоступных функций, чтобы разработчикам было легче делать AI, так они больше будут контролироваться - вызывайте такие-то функции и получите такой-то список юнитов, а потом с ними делайте другие действия, но все-равно с этой группой к примеру даже видимых вражеских юнитов можно делать не все, что угодно, а например нельзя проверять изученные способности у вражеского героя, но можно смотреть его здоровье, силу, ловкость и тд.

Отредактировано Alex_Hell, 25.07.2010 в 22:58.
Старый 25.07.2010, 22:13
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
Alex_Hell, эти все запреты НЕ НУЖНЫ. С ними неинтересно...
Старый 25.07.2010, 22:33
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт: 6,885
Активность:
bee, а как такой пример: играют 2 команды в доту 5х5, в первой все честные, а во 2й - все с MapHack-ом... так те что видят невидимок и изученные способности и их перезарядку будут выигрывать, тоже и у нас, нельзя все делать доступным, иначе даже тупой AI может видеть на всю карту и догонять того у кого мало здоровья до самой базы, а как вражеский герой применяет способность на крипов где-то в лесу, взять и на него напасть - зная что перезарядка еще идет.. вот это круто?
Старый 25.07.2010, 23:12
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
Alex_Hell, насчет интерфейсных функций - тот кто водит правила, должен заботиться об их исполнении. Я разве должен контролировать - видна цель или нет ? Если у меня есть идентификатор цели, то я могу запросто получить ее координаты, этого не отнимешь. Напиши фреймворк, например функция GetVisibleUnits - возвращает всех видимых для игрока и его союзников юнитовю. Или, например, GetUnitPositionVisible - возвращает координаты цели, если цель невидима, то возвращает, допустим, ноль. Мне непонятно, почему я должен заботиться об соблюдении всех этих ограничений ? Зачем мне усложнять свой код лишними проверками ?
Старый 25.07.2010, 23:42
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт: 6,885
Активность:
PlayerDark, Ну вот допустим будет у тебя функция GetVisibleUnits() которая вернет группу видимых юнитов, че ты будеш с ними делать? все-равно ты с ними не все должен уметь делать, не должен давать приказы им, не должен отнимать здоровье и тд., но можеш использовать в качестве цели... хотя этот же список видимых юнитов ты можеш получить кучей других способов, например: получить всех юнитов на карте (или вокруг героя, по ситуации), а потом для каждого примениш функцию IsVisible() которая вернет True или False - видим он или нет, и получиш тоже самое.. 1 лишняя проверка с тебя, в другом случае эта же проверка будет выполняться в моем коде а не твоем - я такое предлагал, но не знаю понравится ли другим.. все хотят по-стандарту, хотя в любом случае проверять кто-то должен..
На счет лишних проверок:
1 случай: сначала проверяеш юнит видимый, если да получаеш его X,Y - координаты
2 случай: вызываеш GetUnitPositionVisible() и всеравно тут же в моем коде проверится видим он или нет, а ты опять же провериш 0 тебе вернула функция или не 0, одно и тоже!
Хотя в любом случае идентификатор юнита у тебя если есть - формально с помощью JASS можеш отдать приказ на юнита даже если он не видим, так что по нашим правилам всеравно ты обязан проверить что юнит видим, а уже потом отдавать приказ на него...
Но вот когда юнит станет невидимым - приказ сбрасывается - это уже заложено в геймплей, хотя тоже самое могу сделать и с отдачей приказа на невидимку, чтобы типа вызвал: GamePlay_TargetOrder(Unit, Target) и внутри проверится видимость - если не видима цель приказ не будет отдан... но вот беда, всеравно твой AI будет проверять видим юнит или нет, чтобы не тупить.. вот он вызвал функцию GamePlay_TargetOrder() на юнита, вернула она FALSE - не может отдать приказ, ты пытаешся на другого отдать приказ.. в результате всеравно ты просмотриш всех юнитов и провериш их видимость только другим способом..
Всем: Ну так что, создавать мне набор JASS-функций, которые будут гарантировать вам соблюдение правил: отдачу приказа только на видимых, получение списка только видимых юнитов врага, и тд.?

Отредактировано Alex_Hell, 26.07.2010 в 00:21.
Старый 26.07.2010, 00:11
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
Alex_Hell, извини, но это конченый бред, так как конкурс является возможностью продемонстрировать свои навыки кодинга. Ты ограничиваешь функции программиста из-за какой-то тревоги того что в карту будут играть с мх. Я кстате уверен что ты потом сделаешь аос с ии. Так как за такой короткий срок нельзя сделать столько всего на карте. Нет, конечно можно, но это выглядит так: хм.. вот сделал героев, надо бы ии. ой я не умею ии же делать, дай как конкурс замучу, замутил я знатит конкурс теперь удаляем все с карты (что может напомнить о признаках готовой карты) и оставляем только скрипт который отвечает за аосовые шнажги. убери запрет.

bee добавил:
полный идиотизм также про ты там говорил что будет какая то специальная сравнивание..
типо какието специальные переменные.. короче уныло, вполне. желания нет, участников пару человек будет

bee добавил:
лучше сделать карту 32x32 и сделать простую 1 линию. убрать запрет и это будет намного интереснее, чем то что сделал ты.

^ imo
Старый 26.07.2010, 00:22
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт: 6,885
Активность:
bee, в карту будт играть с MapHack - ты не понял о чем я.. я сравнил что если AI будет видеть все на карте и сможет делать все что разрешает JASS-язык - получится полный бред, правила нужны в любом случае..
Что значит "за такой короткий срок нельзя сделать столько всего на карте"? Я делаю ее уже целый месяц, а та версия которая в первом посту Preview.w3x сделана примерно за неделю.. ты думаеш что если ты не можеш за неделю столько сделать, значит другие тоже не могут?)) я программист по профессии и писал и не такое за короткие сроки))
Ты предлагаеш чтобы разрешить все триги, чтобы AI мог делать все че разрешено JASS? Или я не понял?
По твоим словам пока что думаю что ты в разрабокте AI полный NULL

Отредактировано Alex_Hell, 26.07.2010 в 00:35.
Старый 26.07.2010, 00:25
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
Сообщаю об отказе о своем участии.
Хелл не обижайся, но из-за работы, и разработкой 3ех проектов - успевать не смогу
Старый 26.07.2010, 00:27
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
ты чо дурак чтоле. думаешь что если в конкурсе будут разрешены все jass функции из common.j то ии станет супер крутым? и будет гангать нубов? а ты не думал что программист сам может решить и сделать свои ограничения?
Старый 26.07.2010, 00:28
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт: 6,885
Активность:
bee, может но не будет обязан, а следовательно он сможет сделать все че разрешено JASS... нафига придумывать свои ограничения если я уже даю тебе полный список че можно делать - тебе же легче, всеравно ты придумаеш 100% все что я напишу сдесь, а если что-то не учтеш - это уже твои проблемы - твой AI будет хакерский, если например забудеш что нельзя было проверять позицию невидимого вражеского героя у которого недавно было 10 ХП, и побежиш за ним
Старый 26.07.2010, 00:29
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
ты не думаешь что если программист сделает читерский ии - это скажеться на решение жюри?
ладно, может быть и есть шанс на что-то нормальное
Старый 26.07.2010, 00:30
Ответ

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

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

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

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



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