У меня в АоСке я делаю АИ. АИ игроки самостоятельно бегают, фармят, изучают скилы, и покупают предметы. Последнее правда иммитируется - при определённых событиях, герой подходит в магазин, и при наличие нужного золота ему даются предметы, расписанные по порядку через Хэш-БД. Это происходит по периодическому таймеру. Пока герой в магазине, и у него есть денги на очередной предмет, у него денги вычитаются, а предмет даётся ему триггерно. Если денег нет, то он идёт дальше фармить мобов.
Но вот проблемка. Почему то некоторые конкретные предметы АИ герой при получение - сразу продаёт в магазин. Самостоятельно. И всё. Ступорится. Не идёт фармить мобов. У меня вроде выключены стандартные АИ скрипты близзов. Эта продажа ну никак не связано с триггерами. В моей карте нету вообще приказов "продать предмет".
Ну не знаю нуп не нуп, но иначе дело чем в АИ скрипте не может быть. Ну или он сам там накатал приказы продать предмет. С потолка не берётся ничего, я одно скажу вот.
Само собой я выключил стандартные АИ Я это сделал ещё когда начинал строить мапу. Иначе мобы не бегали бы по линиям, а собирались в кучи. У меня АоС...
Цитата (Imba_pvL)
и еще попробуй просто сделать чтобы он наоборот не продавал предметы сделай такой триггер
Я сделал, что бы при триггерном получение предметов, эти предметы невозможно было не выкинуть, не продать, только триггерно удалить. Теперь таки да, герой их не продаёт. Но это не решает проблему. Во первых, как я уже сказал, герою по БД выдаются предметы, по порядку. Но бывает такое, что предмет тупо не выдаётся. Либо индекс не увеличивается, либо равкоды с БД не считываются. В результате нужные предметы не удаляются, и герой не получает следующие предметы, потому что инвентарь забит предыдущими. Этот "баг" происходит рандомно, поэтому я и не могу понять в чём проблема.
Во вторых, если АИ-герой по каким то причинам не может получить предмет (денег не хватает, или лвл мал), то герой выбирает рандомно одну из трёх линий, и идёт туда. Это работает, но бывает случаи, опять же, иногда и не предсказуемо, прям как как Корейский Рандом, когда после покупки предмета и при попытки покупки следующего, герой ступорится и стоит на месте возле магазина. Думаю дело в том, что герой хочет продать предмет, но по выше указанной причине не может, но пытается, и пытается, и пытается... Отсюда и ступор. Возможно?
Цитата (Bru)
Вероятно, цикл? Вероятно, он зациклился. Как не тупо звучит.
Если АИ-герой по каким то причинам не может получить предмет (денег не хватает, или лвл мал), то герой выбирает рандомно одну из трёх линий, и идёт туда. Это работает, но бывает случаи, опять же, иногда и не предсказуемо, прям как как Корейский Рандом, когда после покупки предмета и при попытки покупки следующего, герой ступорится и стоит на месте возле магазина. Думаю дело в том, что герой хочет продать предмет, но по выше указанной причине не может, но пытается, и пытается, и пытается... Отсюда и ступор. Возможно?
Цитата (Sap_phire)
Ну или он сам там накатал приказы продать предмет.
Не существует такого приказа, кстати. Я сам проверил. Нельзя никак триггерно заставить юнита пойти и продать предмет в магазин. Есть приказ "dropitem", но он никогда не срабатывает.
Сообщение отредактировал FatalBlade - Суббота, 22 Декабря 2012, 21:38:16
Я сделал, что бы при триггерном получение предметов, эти предметы невозможно было не выкинуть, не продать, только триггерно удалить. Теперь таки да, герой их не продаёт. Но это не решает проблему. Во первых, как я уже сказал, герою по БД выдаются предметы, по порядку. Но бывает такое, что предмет тупо не выдаётся. Либо индекс не увеличивается, либо равкоды с БД не считываются. В результате нужные предметы не удаляются, и герой не получает следующие предметы, потому что инвентарь забит предыдущими. Этот "баг" происходит рандомно, поэтому я и не могу понять в чём проблема.
что за ересь, даже невыбрасываемый предмет можно удалить триггерно!
Хм...у меня в мапе стандартный Ai не выключен. Нужно с умом использовать близзовские базовые скрипты. Стоит аналогичная система псевдопокупки итемов, но я ни разу не сталкивался с такой проблемой. Думаю чтобы разобраться нужен исходный код твоей мапы...там и видно будет что к чему
Добавлено (22 Декабря 2012, 21:54:35) ---------------------------------------------
Цитата (FatalBlade)
То есть в игре их невозможно продать или выкинуть обычным путям, но триггерно их удалить МОЖНО.
Для всех предметов чтоли сделал копию для ботов?? С выключенными флажками: может быть выброшен, может быть продан??
Нужно с умом использовать близзовские базовые скрипты.
Даже когда ты выключаешь близзард-АИ, некоторые скрипты остаются. Их уже не возможно убрать. Ну а с включённым АИ мобы не будут бегать по линиям, а будут собираться где нибудь в кучу.
Цитата (God_of_light)
нужен исходный код твоей мапы
Ты там потеряешься
Добавлено (22 Декабря 2012, 21:56:00) ---------------------------------------------
Цитата (God_of_light)
Для всех предметов чтоли сделал копию для ботов?? С выключенными флажками: может быть выброшен, может быть продан??
Нет. Предмет можно триггерно сделать невыбрасываемым и не продаваемым
Для всех предметов чтоли сделал копию для ботов?? С выключенными флажками: может быть выброшен, может быть продан??
зачем? можно триггерно сделать итем невыбрасываемым. FatalBlade, по смыслу я не понимаю, чем тебя не устраивают невыбрасываемые, но удаляемые предметы для компов. Если надо сымитировать выброс предмета - удалил из инвентарая и создал на позиции.
1) Предметы у меня изначально и выбрасываемые, и продаваемые.
2) Если герой АИ игрока поднимает предмет, то этот предмет триггерно становится невыбрасываемым и не продаваемым.
3) Невыбрасываемые и не продаваемые предметы МОГУТ быть удалены триггерно, что я и делаю.
4) Мне НЕ НАДО имитировать никакой выброс предмета. Даже наоборот, я стремился от него избавиться, потому и сделал их невыбрасываемыми и не продаваемыми для АИ героев.
5) Проблема совсем в другом. Вот:
Цитата (FatalBlade)
Во первых, как я уже сказал, герою по БД выдаются предметы, по порядку. Но бывает такое, что предмет тупо не выдаётся. Либо индекс не увеличивается, либо равкоды с БД не считываются. В результате нужные предметы не удаляются, и герой не получает следующие предметы, потому что инвентарь забит предыдущими. Этот "баг" происходит рандомно, поэтому я и не могу понять в чём проблема.
Во вторых, если АИ-герой по каким то причинам не может получить предмет (денег не хватает, или лвл мал), то герой выбирает рандомно одну из трёх линий, и идёт туда. Это работает, но бывает случаи, опять же, иногда и не предсказуемо, прям как как Корейский Рандом, когда после покупки предмета и при попытки покупки следующего, герой ступорится и стоит на месте возле магазина. Думаю дело в том, что герой хочет продать предмет, но по выше указанной причине не может, но пытается, и пытается, и пытается... Отсюда и ступор. Возможно?
Добавлено (22 Декабря 2012, 22:10:40) ---------------------------------------------
Цитата (God_of_light)
Ну тогда только гадать можно)) что да почему.
Могу скинуть свои триггеры для АИ. Но они тоже не маленькие.
Если АИ-герой по каким то причинам не может получить предмет (денег не хватает, или лвл мал), то герой выбирает рандомно одну из трёх линий, и идёт туда. Это работает, но бывает случаи, опять же, иногда и не предсказуемо, прям как как Корейский Рандом, когда после покупки предмета и при попытки покупки следующего, герой ступорится и стоит на месте возле магазина. Думаю дело в том, что герой хочет продать предмет, но по выше указанной причине не может, но пытается, и пытается, и пытается... Отсюда и ступор. Возможно?
по БД выдаются предметы, по порядку. Но бывает такое, что предмет тупо не выдаётся. Либо индекс не увеличивается, либо равкоды с БД не считываются. В результате нужные предметы не удаляются, и герой не получает следующие предметы, потому что инвентарь забит предыдущими. Этот "баг" происходит рандомно, поэтому я и не могу понять в чём проблема.
сопровождай свои действия сообщениями. Относительно быстрый и надёжный способ узнать что творится по ту сторону сцены. Пусть сообщение выдает какие условия в каком состоянии и комментирует, что будет делаться,
Всего предметов которые получают АИ 27. После каждого получения предмета, индекс (глобалка) увеличивается на 1. Предметы как бы крафтятся, то есть например 1 сильный предмет заменяет собой 2 более слабых. Всё это происходит через БД, в котором записано какие предметы из чего крафтятся.
Проблема в том, что по каким то причинам, иногда покупка предмета срабатывает сразу 2 раза. Индекс увеличивается на 2, но предмет получен всего 1. Например если индекс равен 10, то даётся предмет под этим индексом. Так вот бывает, что индекс 2 раза прыгает на +1, т.е. становится +2. Теперь индекс равен 12, но предмет из индекса 11 не был выдан герою. И следующий раз, когда герой "покупает" предмет, ему сразу даётся предмет 12-го индекса. А где 11? Нету.
Вроде не так страшно, но в равкод каждого предмета записаны его компоненты. У героя есть предметы, из которых состоит предмет 11-го индекса. Только получив "11-ый" предмет, эти составляющие компоненты будут удалены. А если индекс прыгает с 10 на 12, и герой не получает предмет 11, то его (11-го) компоненты теперь тупо торчат в инвентаре, что в последствие "не пускает" новые предметы в инвентарь.
Добавлено (22 Декабря 2012, 23:24:44) ---------------------------------------------
Цитата (FatalBlade)
Я пытался поколдовать в РО с этими циферками, но не работает.
хеххе, и не сработает
Добавлено (22 Декабря 2012, 23:27:07) --------------------------------------------- В структуре есть функция, которая скидывает не нужные боту предметы, слот освобождается - добавляется новый предмет, иначе если предмеет нужный, слот освобождается но запоминается id нужного предмета, затем добавляется новый предмет, после добаляется ранее удаленный, как я помню сорри просто под шофэ пишу как даун какойто.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Суббота, 22 Декабря 2012, 23:24:12
Народ, проблема насчёт не продавания решена. Я уже писал что дело в том, что функция запускается 2 раза. Тоже решено. Но вот проблема насчёт ступора не решена. Вот конструкция, которая в случае если герой не может купить предмет, отправляет его в одну из трёх точек на карте. Это не весь код, а вырванная часть, которая отвечает именно за посылание героя.
Код
local integer cid = GetHandleId(gg_unit_h02F_0082) local integer o = LoadInteger(udg_Hash, id, 0) local integer order = 851986 local integer Rnd = GetRandomInt(1, 3) local real x local real y local integer l = GetHeroLevel(udg_HeroesPlaying[o])
... тут много обьявлений локалок ... затем много всяких действий
if IsUnitAlly( udg_HeroesPlaying[o], Player(10) ) == true then if Rnd == 1 then if l < 20 then set x = LoadReal(udg_Hash, cid, 531) set y = LoadReal(udg_Hash, cid, 532) elseif l < 35 then set x = LoadReal(udg_Hash, cid, 525) set y = LoadReal(udg_Hash, cid, 526) else set x = LoadReal(udg_Hash, cid, 503) set y = LoadReal(udg_Hash, cid, 504) if IsUnitInGroup( udg_HeroesPlaying[o], udg_MagesGroup ) == false then set order = 851983 endif endif elseif Rnd == 2 then set x = LoadReal(udg_Hash, cid, 517) set y = LoadReal(udg_Hash, cid, 518) elseif Rnd == 3 then set x = LoadReal(udg_Hash, cid, 519) set y = LoadReal(udg_Hash, cid, 520) endif call IssuePointOrderById( udg_HeroesPlaying[o], order, x, y ) endif if IsUnitAlly( udg_HeroesPlaying[o], Player(11) ) == true then if Rnd == 1 then if l < 20 then set x = LoadReal(udg_Hash, cid, 525) set y = LoadReal(udg_Hash, cid, 526) elseif l < 35 then set x = LoadReal(udg_Hash, cid, 531) set y = LoadReal(udg_Hash, cid, 532) else set x = LoadReal(udg_Hash, cid, 501) set y = LoadReal(udg_Hash, cid, 502) if IsUnitInGroup( udg_HeroesPlaying[o], udg_MagesGroup ) == false then set order = 851983 endif endif elseif Rnd == 2 then set x = LoadReal(udg_Hash, cid, 523) set y = LoadReal(udg_Hash, cid, 524) elseif Rnd == 3 then set x = LoadReal(udg_Hash, cid, 521) set y = LoadReal(udg_Hash, cid, 522) endif call IssuePointOrderById( udg_HeroesPlaying[o], order, x, y ) endif
... тут много обнуление переменных
Как я уже писал, она работает, но иногда не срабатывает. Тут рандомное целое число от 1 до 3. Через дебуг я проверил. Число выбирается всегда. Герой даже проходит пару шагов в нужном направление, и тут вдруг останавливается. Это происходит ИНОГДА.
Возможно ли, что если в точке, которую выбрал герой, уже находится в данный момент другой юнит, то герой не может идти в том направлении, и поэтому тормозит? Хотя приказ "move" а не "smart", но всё же.
Сообщение отредактировал FatalBlade - Воскресенье, 23 Декабря 2012, 01:41:13
Мне больше интересно почему индекс "перепрыгивает" некоторые цифры попробуй записать DebugMsg на каждую строку твоей рабочей функции иногда помогает
(ещё может быть все дело в том что бот может купить не один предмет а два, поэтому покупает (хотя это бред) индекс же в+ идет =/)
Добавлено (23 Декабря 2012, 01:52:25) --------------------------------------------- покупка ботом основанна переодическим таймером может один приказ забивается другим, если конечно таймер не активирует предоставленную функцию
почему бы тебе не брать диапозон цифр x и y чтобы формировать приказ к точке допустим I2R(GetRandomInt(-100,100))
Добавлено (23 Декабря 2012, 01:56:16) --------------------------------------------- вообще не понимаю почему покупка реализована таймером о_О
Murador, дело было в том, что само событие на всю это фигню было создано 2 раза. Поэтому и дублировалось.
Цитата (Murador)
вообще не понимаю почему покупка реализована таймером о_О
Ну типа стоит герой у магазина. Если у него есть есть денги на предмет по индексу, то он его покупает. Если нету - идёт фармить. Точно так же, как и сделал бы любой игрок - закупляется по максимуму