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

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

Закрытая тема
 
happy_horror
2 + 2 = 22 :-D
offline
Опыт: 7,818
Активность:
Universal Creep AI for RPG/ORPG maps (Aggro System)
Всё по порядку: (вопрос - ответ)

(юнит-моб, это юнит контролируемый компьютером или нейтрально-враждебным игроком)



Для кого и почему была сделана данная система?
- была сделана по просьбам форумчан, в основном для карт типа РПГ/ОРПГ
- представьте себе ситуацию, когда мобы в игре управляются человеком в момент сражения и человек, в отличие от ненастроенного компьютера (стандартный спевдо AI в варе), будет совершать логические поступки и данная система позволяет иммитировать хоть какую-то логику в битви



Что за система, что она делает и как работает в теории?
- Агро система, на подобии тех, что стоят в современных ОРПГ

- Заставляет моба (моб - юнит контролируемый не игроком) выбирать цель по некоему показателю, что создаёт иллюзию адекватности моба на силу противника

- когда юнит-моб атакован, то он запоминается нанесённый ему урон от юнита, принадлежащего игроку, затем кажые N секунд каждый моб составляет себе список опаснейших целей, сортируя его от опасного (того, кто нанёс больше всего урона) до самого дохлого противника и выбирает из списка первую жертву, если она находится в радиусе r, не мертва и видна мобу, то он будет атаковать её, если одно из условий не удовлетворяет требованиям, то на проверку пойдёт второй по списку противник и т.д.


Учитывает ли систему магический/физический урон, заклинания без урона?
- любой урон, даже нанесённый триггером
- для этого есть настраиваемая встройка



Чем это изменит вашу карту?
- для наглядности предлагаю скачать карту, отключить все триггеры и замочить мобов на ней, для этого в вашем распоряжении 1 герой со способностью лечения и 2 рыцаря-защитника с переделанным оскорблением и сетью, немного магии и способностей и всего 6 врагов...после просмотра карты без системы предлагаю включить обратно все триггеры и попробовать снова просто убить всех противников, думаю разница будет заметна, если же нет, то пишите, попробую объяснить по другому



Имеет ли система настройки?
- разумеется да
  • переменная percent отвечает за планку % хп юнита, ниже которой моб начнём "строить" список потенциальных жертв и выбирать самую опасную
  • переменная WakeUp отвечает за - будить юнита нейтрально-враждебного игрока ночью или нет, если % хп моба ниже percent и приоритетный юнит будет стоять рядом. Если поставить нет, то моб не нападёт на юнита, в случае его спячки, если да - то моб проснётся автоматически, даже если его не били
  • переменная TargetRange отвечает за радиус обнаружения приоритетной цели, если юнит вне зоны, умер или невидим мобу, то будет выбрана следующая по приоритету цель, которая пойдёт на проверку по выше указанным требованиям, если таковая имеется вообще
  • переменная period (Внимание - значение этой переменной нужно выставлять в редакторе переменных!, а не в тригере)отвечает за то, как часто моб будет думать "кого выгодней бить теперь"
  • переменная BoardOn отвечает за то, будет ли создаваться тестовый мультиборд или нет (он будет отображать суммарный урон записанный на моба от юнита, для корректности работы советую всеми юнитами бить только одного моба, хотя может и разных прокатить)
  • переменная SpellRange отвечает за радиус считаемый от кастера, при касте бафов; при попадании мобов в этот радиус они будут начислять себе псевдо урон от кастера
  • переменная taunt - в неё надо установить заклинание (отображаемый эффект) при наличие которого моб будет игнорировать агро систему
  • переменная abilcount - в неё нужно занести общее количество способностей, которые будут занесены в базу данных по способностям (на случай, если вы хотите, чтобы способности, не имеющие прямого урона, учитывались системой и наносили псевдо урон)
  • в переменные abils нужно внести все ваши бафы, которые будут наносить мобу псевдо урон (индексируйте бафы по порядку начиная с 1 и не перепрыгивайте через числа, т.е. 1, 2, 3, а не 1, 3, 4)
  • в переменные DBabils нужно внести количество псевдо урона, как правильно это сделать: индексы сотни (100, 200, 300 и т.д.) указывают на уровень способности, а единицы и десятки указывают номер индекса бафа в abils[]...к примеру: у благодати 3 левла, она записана в abils[2] и в DBabils[102] указано количества псевдо урона для благодати левла 1, в DBabils[202] указано количество псевдо урона для благодати левла 2 и т.д.



Есть ли у системы недостатки?
- пока, к сожалению, тоже имеются: если количество юнитов игрока и количество мобов одновременно находящихся на карте будет очень большим, percent будет 100.00 и period очень маленькими (примерно 1.00), то в карте могут наблюдаться торможения, в момент выборки целей (тестил на футман варс с ботами)



Как импортировать к себе в карту?
- просто скопируйте все триггеры и переменные (если у вас стоит в настройках WE автоматическое создание переменных, то они создадутся сами, несмотря на наличие джаза в системе) ВАЖНО не забыть скопировать из глобал кода 2 константных функции

вот собственно и всё, прошу "заказавших" эту систему форумчан тестить и сообщать о багах, ошибках в работе, включая совместимость с другими системами/картами, ну а так же ваши пожелания и вопросы



изменения на 5.12.08: проведена полная оптимизация кода, устранены утечки (ппц, сколько я их там нашёл...но зато в борьбе с ними научился бороться с ними сразу, т.к. раньше не умел). единственный код, который не подвергся оптимизации - это мультиборд и функции связанные с ним, потому-что мультиборд тестовая возможность в системе и в нормельной карте не участвует, а значит и не вызывает утечек...

в триггере, отвечающем за выборку целей, заменил константу, на переменную (TargetRange) изменение которой раньше не изменяло ничего

+ расставил крипов немного по другому



Перезалил обновлённый вариант

---
Наработка добавлена на сайт как Universal Creep AI (Aggro System)
Награда: +320 очков опыта
Оценка: 8/10.
Прикрепленные файлы
Тип файла: w3x Universal_Creep_AI_for_RPG-ORPG.w3x (35.2 Кбайт, 625 просмотров )

Отредактировано ScorpioT1000, 12.05.2008 в 22:50.
Старый 08.05.2008, 04:44
ScorpioT1000
Работаем
online
Опыт: отключен
Сделал-таки) Зачет, всем советую!

ScorpioT1000 добавил:
Не agro а aggro

ScorpioT1000 добавил:
Цитата:
переменная period (Внимание - значение этой переменной нужно выставлять в редакторе переменных!, а не в тригере)отвечает за то, как часто моб будет думать "кого выгодней бить теперь"

p.s. эо зависит от кол-ва мобов и производительности машины(если кто спросит)

ScorpioT1000 добавил:
омг, код не оптимизирован
Код:
function check1 takes nothing returns boolean
    return GetPlayerController(GetOwningPlayer(GetAttackedUnitBJ())) == MAP_CONTROL_COMPUTER
endfunction

это утечка

Отредактировано ScorpioT1000, 10.05.2008 в 08:09.
Старый 08.05.2008, 06:04
happy_horror
2 + 2 = 22 :-D
offline
Опыт: 7,818
Активность:
да, про утечки гляну ещё, там ещё есть одна, но не значительная, как и вес системы в 30 кб :) ...
Старый 08.05.2008, 06:29
Sweet Candy

offline
Опыт: 444
Активность:
Интересная вещь. Надо попробовать.
Старый 08.05.2008, 09:52
CyxapuK
<bdc>
offline
Опыт: 15,459
Активность:
happy_horror, наконецто, я давно такого ждал. ниче, если я использую ее у себя в Gard Quest'е?
Старый 08.05.2008, 10:25
dartwizard
v zapoe :(
offline
Опыт: 4,762
Активность:
гуд система!, с такой мона создать очень хорошуб РПГешку
Старый 08.05.2008, 10:53
Finfal

offline
Опыт: 3,413
Активность:
Ура - мобы перестали быть тупыми, жду какой-нить рпг с данной системой, автору зачёт
Старый 08.05.2008, 13:09
FrancK
???
offline
Опыт: 20,066
Активность:
happy_horror, хе, круто, можно заюзать в своей РПГ?
Старый 08.05.2008, 13:23
happy_horror
2 + 2 = 22 :-D
offline
Опыт: 7,818
Активность:
конешно используйте в своих картах, я собствено почему её стал делать - как-то раз в РПГ у героя танка увидел скил оскорбление и понял что КПД у него 0% ... тогда и задумался об ИИ мобов, хотя бы элементарном
да кстати в системке есть небольшие, совсем небольшие утечки, в скором времени пофикшу их и обновление выложу
Старый 08.05.2008, 14:28
FREEZE_ball
Cataclysm => жара
offline
Опыт: 15,247
Активность:
Хорошая система, автор молодец))
Старый 08.05.2008, 14:39
DeaDoK

offline
Опыт: 5,783
Активность:
Ужасно, противно, тупо... happy_horror, сорри, ваапче зачет. Ну просто все пишу типа Клёво типа Круто. Идеальны тока боги.
Старый 08.05.2008, 16:39
happy_horror
2 + 2 = 22 :-D
offline
Опыт: 7,818
Активность:
DeaDoK , я с тобой даже не спорил на этот счёт и не буду, но попрой элементарное, действительно получается удобным и приятным :)
Старый 08.05.2008, 17:23
Joltd

offline
Опыт: 1,090
Активность:
Теперь по настоящему сложо стало играть. Простой отвести героя не работает уже :) Система класс, автор моодец.
Старый 08.05.2008, 19:23
happy_horror
2 + 2 = 22 :-D
offline
Опыт: 7,818
Активность:
Joltd , относительно сложно, т.к. в моём примере percent стоит на 100%, т.е. моб начинает соображать сразу, а можно поставить и меньше, к примеру 30% ... картина: били маги боса, били, танк тупо стоял и тут у боса хп упали ниже 30% ... :D:
да кстати потом в инфу обязательно допишу - TargetRange можно поставить и больше 700.00 вот тогда реально сложно от моба будет убежать, особенно если сделать скорость бега у героев маленькую, относительно мобов :)
Старый 08.05.2008, 19:26
ZLOBICH
Kicked by XimikS
offline
Опыт: 4,727
Активность:
код на оптимизацию и фикс утечек.. вообще очень узкий круг применения системы.. для меня не зачет =\ но для большинства очень подходит, доработать код, сделать заполняемую БД и изменить формулу с учетом армора, макс хп и тд.. а, имхо лучше не регать всех юнитов входящих в мапу, а сделать отдельной ф-ей
Старый 08.05.2008, 21:51
happy_horror
2 + 2 = 22 :-D
offline
Опыт: 7,818
Активность:
Цитата:
Сообщение от ZLOBICH
код на оптимизацию и фикс утечек.. вообще очень узкий круг применения системы.. для меня не зачет =\ но для большинства очень подходит, доработать код, сделать заполняемую БД и изменить формулу с учетом армора, макс хп и тд.. а, имхо лучше не регать всех юнитов входящих в мапу, а сделать отдельной ф-ей


ZLOBICH БД и так есть, она заполняется абилами типа лечений, бафов и т.д...единственное ауры не учитывает, код действительно будет доработан на предмет утечек

по поводу брони, макс хп и прочего: ситуация, за 20 секунд паладин нанёс скорпиону 100 урона, а некий маг 1000, вопрос: кого выгодней прибить первым? Это первая причина, по которой индикатором является урон, причина вторая: в варе не предусмотренны прямые функции получения брони цели + существует константа...из-за которой 10 брони ~ могут стать равны 20, вывод - гемороя мама не горюй....в третьих: какая разница сколько макс хп у юнита? (ну могу понять ещё куррент хп, к примеру у юнита игрока 10% и хорошё бы его добить) ссылаю макс хп на первый пример и кстати система Universal...поэтому учитывает только главное, хотя на счёт доработки подумаю, но нагрузка системы слишком большим количеством формул, ни к чему хорошему не приведёт

про очень узкий круг приминения: если говорить об ограничении количества юнитов одновременно находящихся на карте, то даже на картах XL используется система подзагрузки мобов - входиш в зону, появляются мобы, выходиш, исчезают...но а если говорить о битвах CREEP vs PLAYER то я считаю что в каждой мапе у мобов должен быть хотя бы такой ИИ, ведь мобы, это не только 3 кило мяса и редкий дроп :)
Старый 08.05.2008, 22:13
House MD
I'm not all guys
offline
Опыт: 14,862
Активность:
Попробую в своей использовать, посмотрим, что из этого выйдет :):
Старый 08.05.2008, 22:26
ScorpioT1000
Работаем
online
Опыт: отключен
happy_horror, пофиксишь утечки - сообщи мне, зальем ^S^

Отредактировано ScorpioT1000, 09.05.2008 в 19:49.
Старый 09.05.2008, 18:46
Lolo_87

offline
Опыт: 1,810
Активность:
happy_horror системка тру, очень понравилось Молодец, но на производительность компа очень давит, кста я для своей мапы твою систему оптемизровал если хочешь посмореть пиши в Приват.
Старый 11.05.2008, 09:40
FoK_KruGer
<3 Vocal Trance
offline
Опыт: 19,940
Активность:
happy_horror зачет я только 2х убил :D

FoK_KruGer добавил:
сейчас убрал эту толпу, попробовал гарисона убить - интересно было, но все таки убил ^^

FoK_KruGer добавил:
имо это прорыв в картостроении)
Старый 11.05.2008, 13:44
Закрытая тема

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

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

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

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



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