PDA

Просмотр полной версии : БОТ и c чем его едят!


nezabudkin
21.03.2008, 15:29
Бот (англ. bot сокр. от robot «робот»)— программа, выполняющая автоматически и/или по заданному расписанию какие-либо действия, и имеющая в этом некое сходство с человеком.

Товарищи, предлагаю в этом топике обсудить, собственно, что должна из себя представлять программа БОТ и какие функции должна выполнять и чего должна уметь делать в мире LineAge. Особенно хочется обсудить и обобщить информацию по поводу бота-командира пати.
Скрипты выкладываемые в этом форуме становятся все сложнее и сложнее, даже появился вариант DLL бота, за что автору большое спасибо. У всех скриптов (ботов) есть сильные и слабые стороны. Есть интересные решения каких-то проблем, есть неудачные. Но все вместе болеют одной бедой - все скрипты сырые, все они, рано или поздно, дадут сбой.

Так вот, хочу обсудит здесь конкретные словесные алгоритмы поведения бота в разных ситуациях. Каждому по одиночке все варианты поведения БОТа и реакцию на окружающую обстановку некогда не рассмотреть. Непосредственно скрипты, думаю, сдесь выкладывать не надо, для этого есть тема VORON'а "Да будет бот..."

И так мои мысли что должен уметь делать скрипт-бот управляющий сразу (или не сразу) всей патей. (Частично идеи заимствованы у волкера).

1. Иметь собственное окно для вывода информации (карта, статы, логи т.д.)
2. Иметь достаточное количество настроек, с удобным интерфейсом настройки: радиус или зона кача, препятствия в зоне, бафы, скилы, список атакуемых мобов (все или тока конкретные), действия при малом количестве HP, MP, CP... и т.д.
3. Уметь вести базу данных всех (или не всех?) существ внутри и вокруг зоны кача, тут интересен размер этой базы...
4. Уметь безошибочно отличать мобов для кача от всех остальных NPC, игроков и их живности!
5. Уметь выбирать приоритетную цель для атки, и гарантировано убивать ее,обязательно закнчивая начатое (грешат все скрипты, слишком много условий надо проверять)
6. Уметь правильно лечиться, пить банки, и пользоваться хиллом баферов
7. Не давать в обиду членов пати (сложная задача!)
8. Уметь подбирать дроп, причем только нужные предметы. Некто не слыхал про такую фишку как "схватить ботом якорь"? И почему только командир пати должен все подбирать? Может передать эту функцию помощнику?
9. Принимать какие-то действия, если на пати спустили большой паровоз, или атакует другой игрок!
9. Вести лог событий в файл.
10. Должна быть возможность сохранения настроек в файле.

и еще куча всего, сейчас все сразу не сообразить...

QaK
21.03.2008, 15:59
Допустим, удобный интерфейс на основе скрипт не создашь - тормозить будет аццки (я проверял), поэтому для реализации интерфейса по-любому надо подключать длл, а в пакетхаке, на данный момент передача данных из и в дллку хромает. Размер базы (любой) можно (и нужно) хранить в динамическом массиве. Не давать в обиду членов пати - простая расстановка преоритета (если у булки хп меньше стольки-то, если у танка и т.д.) Питье банок уже реализовано. Отличить моба для кача - элементарно по NPCID моба. По поводу паровоза, как програмно определить что это спушенный паровоз, а не сагренная по тупости своей толпа мобов? Лог событий и возможность настроек - тоже из дллки легко реализуется (при устранении косяка).

nezabudkin
21.03.2008, 16:42
Допустим, удобный интерфейс на основе скрипт не создашь - тормозить будет аццки (я проверял), поэтому для реализации интерфейса по-любому надо подключать длл, а в пакетхаке, на данный момент передача данных из и в дллку хромает. Лог событий и возможность настроек - тоже из дллки легко реализуется (при устранении косяка).

Ждем нормальной реализации поддержки DLL в пакетхаке

По поводу паровоза, как програмно определить что это спушенный паровоз, а не сагренная по тупости своей толпа мобов?

На пример, како-то игрок запалил нашего бота или пати, и решил паровоз нанего спустить. Что делать?. Определить что это паровоз, это можно по количеству мобов в зоне кача, если их вдруг резко стало очень много, надо что-то делать... Например искать ближайшего игрока, и атаковать его! :D
Эта опция поведения долна настраиваться перед началом кача. И всегда нужно грамотно выбирать зону кача!

skymanrus
22.03.2008, 01:04
по-любому надо подключать длл, а в пакетхаке, на данный момент передача данных из и в дллку хромает
согласен проблемки мелки есть но на что человеку примые руки :)
писали ведь интересные игры под dos где было мало системной памяти и скорость проца мелкая да и ещё полно глюков самой системы но если есть желание то все возможно :)

к примеру попробуйте замутить какую нидь простенькую программу например на АССЕМБЛЕРЕ по расчёту синуса 90 градусов с выводом полученого значения на экран :shock:
для новичка эта задачка просто не имеет решения :)
но, эта задача вполне выполнима!

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

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

так что опять же если желание есть то все возможно!


Товарищи, предлагаю в этом топике обсудить, собственно, что должна из себя представлять программа БОТ

идея очень хорошая может что то интересное для своих dll'ок почерпну :D

3. Уметь вести базу данных всех (или не всех?) существ внутри и вокруг зоны кача, тут интересен размер этой базы...
на самом деле размер будет не слишком большим
если например базу данных писать на ассемблере
(в делфях кстати очень много совершенно бесполезного и ненужного кода добавляется в конечный файл а если вы ещё юзаете там какие то api функции то в зависимости от количества этих функций размер файла возрастает в геометрической прогрессии соответственно скорость программы уменьшается ...)
так вот если на ассемблере писать то можно прикинуть сколько будет в памяти занимать эта самая база данных
допустим на карте есть некий обьект и его надо внести в базу
просто необходимо для нас знать прежде всего его координаты и его ид это будет 4 DWORD = 16 байт
+ хорошо бы знать его имя и класс если это чар или тип npc если он таковым является + если это предмет то надо знать название вещи(вычисляется по собственному иду вещи) + агрессор ли этот обьект по отношению к вам
в общем в среднем 4 обязательных числа и + где то 4 дополнительных всего 8 чисел должно содержатся в базе данных и описывать какой то один произвольный обьект (если конечно данные в размере DWORD хранить) в видимой зоне бота причем обьекты могут быть любыми будь то чары или валяющиеся аденки на траве
теперь необходимо узнать максимально возможное число этих самых обьектов на карте

например мобов я никогда больше 100 в пределах видимости не встречал даже в катах и в тои
нпц больше 40 тоже нету нигде в пределах видимости
а вот с вещами сложнее там число может быть очень большое ну в общем думаю что 90 хватит :)
получаем такую фигню (100+40+90)*8=1840 DWORD и если учесть что в DWORD 4 байта то получается 7360 байт или 7,18 килобайт что в обще то сущие пустяки для современных компов :)

9. Вести лог событий в файл.
если в лог файл будет записывася сразу новое событие (по мере поступления) это будет сильно замедлять прогу.. можно вести лог в памяти и когда память например переполняется то сбрасывать всё в файл

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

DashKAaa
22.03.2008, 01:56
например мобов я никогда больше 100 в пределах видимости не встречал даже в катах и в тои
нпц больше 40 тоже нету нигде в пределах видимости
Ххе в боте он NLObP при
GetMinMaxX(MobsRAS);
if (Summ(MobsRAS)>=round(max*0.9)) or (MaxX>5000) then begin
//если у нас занято более 90% ячеек с мобами надо удалить самых дальних от нас
msg.Lines.Add('Мусор удалён:'+IntToStr(MaxID)+' :'+IntToStr(MaxX)+' сумма'+IntToStr(Summ(MobsRAS))+'-');
DelElArr(MaxID);
end;
вылетает ошибка при отменение этой функции бот при 100 Идах просто напросто встает на месте, да + ко всему бегает за всеми новыми нпц которых видит в радиусе ( т.е игрроками )

то мобов а то нпц+ мобов....

VORON
22.03.2008, 03:47
ых принципы работы бота- можно еще намного расширить.. но бот он и в африке бот.. мне кажется то что займет милион строк кода можно заменить тем чтоб просто мето кача выбрать подходящее.. например бот для кача в катакомбе в квадратной комнате- будет очень прост.. а бот для кача в ТОИ с лабиринтами и етажами- будет сложнее в 10 раз.. опять же проблемы возникнут с осью Z .. и с областью кача непоймеш какой.. имхо в данном случае создание мегабота- "цель не оправдывает средства" думать надо много.. а цель то какая? прокачаться- и всегото.. намного проще пофантазировать.. подумать про возможности нового пакетхака то что конект не рвёт при закрытом клиенте.. думаю можно думать над созданием рейд пати.. выяснить состав оптимальный.. и написать скрипт который будет рейда килеть несколькими чарами.. поетому ето более перспективно и как мне кажется проще для написания на коде скрипта и цель- ПРОКАЧКА ПЕРСА- достигается более быстро.. а кач бот как волкер- ето чисто полет мысли для прогеров кому хочется выложить свои мысли в паскаль.. конечно с такой точки зрения все тока за развитие прогерской мысли.. алгоритмы примененные в таких скриптах оч интересно обдумывать и осозновать.. но цель- ПРОКАЧКА- можно достигнуть более простыми способами..

Добавлено спустя 10 минут 18 секунд:
думаю если автор темы непротив.. в етом топе паралельно будем думать как создать РЕЙД ПАТИ на скрипте.. об чем с согласия автора будет гласить нназвание топика.. ета идея летала уже давно у всех но реальные возможности для ее осуществеления появились тока с версией пакетхака 3,2,0 ибо она может закрыть клиент оставляя окно с чаром в онлайне под управлением скрипта.. таким образом мы сможем 2-3 окна оставить работающими и еще 6-7-8 окон (фулпати в общем) будут без клиента- управляться скриптом... и начиная с 20 лвл мы будем кач на РЕЙДАХ чисто... причем соло.. причем минимальным составом.. думаю ето намного переспективней и разумней чем создовать подобие волкера.. а тем что ето более быстрый способ для прокачки- мы замнем волкер.. пакетхак оттяниит кучу юзеров от ВОЛКЕРА если будет такой скрипт реализован... скажем так задача тоже не легкая.. но интересная.. начать обсуждение задачи следует с выяснения оптимального состава пати из расчта 6-8 окон.. может и 9 окон... думаю на рейде походе канал связи 128 КБИТ/СЕК потянет 8 окон- реально... (не оконо а аков, окон всего 1-2 будет)..

ratvier
22.03.2008, 10:04
начать обсуждение задачи следует с выяснения оптимального состава пати..
Обязательно нужен танк, причём не просто танк, а самый живучий :Search:
И далее нужно определиться: это пати магов или воинов...

Grinch
22.03.2008, 11:34
3 дестра ше пп бд свм* танк можно биш но не критично ше хилит тож не плохо.
впринципе вся проблема слить дестров под френзи и ускорить откат этого френзи.т.к. под френзи с норм бафом они будут компинсировать дамаг от рб. танк нужен если 3 дестра не убъют рб за полторы минуты т.е. от 20-60 секунд надо ждать отката френзи. т.е. они под рашем будут держать реген хп танк будет деражать рб от дестров.потом врубить френзи и добить.

Добавлено спустя 3 минуты 46 секунд:
так же класическое пати из магов только вместо дестров 1 некр 2 сх и вместо биша ее 78 тогда танк получит более крутой баф. как танк лутьше всего по моему скромному мнению паладин.

Добавлено спустя 14 минут 33 секунды:
а с кач ботом самая проблема как я ее вижу это геадата, ну сами посудите бот будет качаться и не разу не нажмёт на карту, к в клиенте. помоему мы все не стого канца подошли к вопросу

nezabudkin
22.03.2008, 14:45
На счет Рейд-Пати. На моем серве, где я играю, большой онлайн, и к РБ даже среднего уровня довольно сложно подойти. Там зачастую уже караулят его. Остаются только РБ до 40 лвл. Но и тут очень велик шанс запалиться! Если кто-нить стуканет, да еще и скрин кинет администрации сервера, что ботоводеры ваще обнаглели и начали на РБ качаться. Думаю, что бан обеспечен!!! У меня на серве уже давно администрация забила на простых ботоводеров, которые саппорта на волкере за собой таскают, но одного - двух, а не фулл пати :D

VORON, я так понял, ты хочешь сам руководить пати лидером из окна, а вся остальная часть пати должна помогать тебе по ассисту, бафала и хилила?

Тут вот еще какая проблема, каждый РБ уникален, к каждому требуется свой особенный подход. Очень часто нужен правильный порядок расстановки участников пати, чтобы РБ не мог кинуться на магов или баферов. Возможно скрипт придется доделывать под каждого РБ персонально! Либо ввести массу настроек, и держать их в отдельном конфигурационном файле.

цель- ПРОКАЧКА ПЕРСА
Не всегда так. Зачастую боты используются для фарма конкретных мобов (сбор дропа/спойла). Это ОООчень прибыльное дело.


Можно еще попробовать нубской фулл-патей ботов, во главе с вручную управляемым капитаном, охотиться на мобов значительно более высокого левела.

Все это отлично совмещается с темой по боту-командиру пати. Потому как ему тоже не помешает фулл-пати в помощь :D

Rigliss
22.03.2008, 17:22
и так
ПАТИ ДЛЯ РБ (мелкасофт 5 сервак)
ТАНК , Два мага (СПС у меня так как криты и каст офигенный) ЕЕ ЕЕ СЕ БИШ ПП(офф пати)
ЕЕ ЕЕ СЕ БД СВС и СПС с 3 профами у всех скилы +9
валю любова РБ обсалютно кроме галконы, дракошки в БС и РБ в катах (одиночка 75ЛВ) (так как нету ожерелье валакас каторое повышает маг крит)
проверенно что с ожерельем валакас падают все РБ !!!
насщет кача состав примерно схож только нету Танка так как у меня манна НОНСТОП (почти всегда ) кач быстрый и продуктивный (исключение составляет Пещера валакас и Империал Томб в глубине) там неполучается настроить кач на боте