Коллеги, не могу понять, почему карта (см. приложение) после 10-15 итераций ломается и крестьяне стоят.
В кратце - я заставляю бегать крестьян к самому ближнему кусту звездолиста, но после нескольких кустов они наотрез отказываются продолжать движение дальше.
Следующим этапом будет добавление чуточку рандома и генерация случайных свойств дистабилизирующих или улучшающих выживание крестьян в этом тяжелом мире.

Naadir, мне почему-то кажется, что у тебя проблема в том, что есть цветок 1 и 10 работников. И у тебя получаются записи типа:
цветок 1 - работник 10.
цветок 1 - работник 8.
цветок 1 - работник 7.
В общем, массив не отчищается при удалении предмета с карты. А ещё может быть такое, что функция pick предметов на карте, каждый раз выдает разные id предметам.
Добавил БД-индификтор предметам в первую версию поиска.
Получить ID любого предмета можно стандартной гуи-фцией valueitem. Пока что в раздумьях, как сделать адекватную матрицу, адекватно расширяемую? Или возможно её чем-то заменить?
Можно ли как-то обыграть такую структуру в war3?
За неимением мысли о матрице, сделал пока что генерацию "родства" до 4х поколений. Теперь Вы вполне можете узнать, кто был отцом, дедом и прадедом отдельно взятого юнита. См. приложенный файл. по ссылке.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
27
почему карта (см. приложение) после 10-15 итераций ломается и крестьяне стоят.
  1. потому что не удалена руна, так как указана другая переменная, вместо manipulated item удаляется picked item. Поэтому руна была не удалена (ее не видно, но она на карте есть), но она была самой ближайшей. Короче рабы стояли около нее. Очень долго из-за неудаленного итема мучался, просто не могло быть так. Когда мало, объектов мало, откуда в ней лимит кода. А то у меня после 5-6 сборов, больше не хотели идти, стояли.
  2. нужно проверять приказ Current Order of Unit вместо Issued Order (лучше проверять координаты, я координаты юзаю, сохраняю в хэш, и при смерти вычищаю). лучше каждый раз периодически каждую 1 секунду проверять группу, не стоят ли они. А то есть те, кто могут стоять без дела. завел группу, и в нее заносил всех созданных юнитов. Мне нет нужных пикать всех
  3. если создается предмет (прям в триггере), то нужно перепроверить всех. артефакт может находится рядом, короче юнит может развернуться и подбежать к тока что заспавненному итему, нет смысла бежать за дальним.
  4. не естественно смотрится, когда целое стадо голодное дурачье бежит за ближайшей едой. Если вижу, что спереди бежит два чела, я понимаю, что не успею съесть, и пойду в другую сторону. Понимаете, на карте например 4-5 айтемов, а все бегут за одним, потому что он ближе =), это неправильно..А то и подохнет раньше, или эволюционирует в хитрое и умное. Бывает отделяются несколько челиков от группы (в моей карте), но это чисто случайно. А так бегают группами, так как пищи не много спавнится.
Загруженные файлы
19
Naadir, надо снизить % укрепления новых генов, ибо, например 25% агрессии и 75% сбора может быть выгоднее. Надо делать +-% шанс с каждым поднятием, ибо агрессия будет выгодной моделью при большом числе работников, а при малом - нет. Давать хп не за атаку, а за убийство.
Дополнительные модели поведения - ожидание (ждать пока появится предмет рядом или работник которого можно убить),;
Поведение при защите - сражаться или убегать или звать на помощь?
Возможно, засунуть при появлении работника в яйцо на 3 секунды, чтоб снизить кучность.
Возможно, записывать в БД для каждого работника радиус смены цели в зависимости от гена. У тебя сейчас константа в 500. Что выгоднее, бежать напрямик или сворачивать с дороги с каким-то радиусом?
Модель поведения крафтера - выгоднее бегать с другими или потратить время на получение предмета +к атаке/защите/скорости?
Модель поведения запаса ресурсов - хавать итем только когда он нужен. (Нужно снизить отхил от итема до 50%)
А так же, можно ввести шанс на получение одного из используемых поисков пути :) коих тут уже штуки 3.
И это только первые мысли, кои я бы сделал, если варик бы не тупил :(
В общем пока что такой концепт
Загруженные файлы
1
К сожалению не могу посмотреть прикреплённый файл, но мне интересно: что ты разрабатываешь?
19
ProstoParya, я просто в шутку хочу подобавлять разных переменных, которые бы меняли ИИ peasant'ов, чтобы благодаря конкуренции узнать какая из поведенческих основ самая эффективная :) А ещё это генерирует забавные ситуации. Но пока что я не разобрался, почему у всех все работает, а у меня нет.
А вообще, можно даже устроить конкурс на такого рода ИИ, если найдутся желающие.
27
DemonoiD, можно сделать =) но очень плохо понимаю, что вы хотите сделать)
19
Steal nerves,
Рассмотрим приложенный мною файл.
Здесь мы имеем переменные, такие как
name-peasant - эта переменная отвечает за родство и структурируется блоками. Например, есть два peasant с именами 0000 0000 0000 0001 и 0000 0000 0001 0002. Это значит, что 2 рабочий сын первого рабочего. Возможно, 16ричная кодировка будет здесь уместнее. Это позволит в 4х поколениях отличать своих от чужих и добавлять разные забавные условия, которые позволяют рабочему "атаковать всех кроме родственников". По факту, выделяя в будущем их в племена.
Характеристика-действие - это то, как рабочий реагирует на события в % соотношении.
Событие - это действие, произошедшее вокруг рабочего или с рабочим.
Оба этих параметра составляют матрицу поведения, которая бесконечно расширяема.
Кратко пройдемся по событиям:
  • обычное - состояние, когда рабочий один, ему ничего не угрожает.
  • в группе - состояние, когда вокруг рабочего есть другие рабочие. Возможно, бегать в толпе - не очень выгодное решение, поэтому найдутся одиночки, которые будут этих групп сторониться, либо наоборот чувствовать себя в них лучше.
  • стресс - это низкий показатель здоровья-голода - возможно, рабочие изменят свое поведение, когда обычного состояния, чтобы добыть пищу, не найдется. Следовательно, место попыток бегать за травой, он резко перейдет на употребление собратьев или будет кричать о помощи, чтобы кто-то с ним поделился пищей.
  • атакован - состояние, когда на рабочего напали. Возможные модели поведения - убегать, звать на помощь, защищаться.
  • Крик о помощи - что будет делать рабочий, когда в каком-то радиусе кому-то потребуется помощь?
  • Болезнь/погода - внешние обстоятельства, написанные просто так. Но смысл думаю понятен.
Причина статуса - это характеристика для каждого рабочего для того, чтобы он принял во внимание какое-то событие. Например, один рабочий впадет в стресс при 10% здоровья, а другой при 50%.
Раздражительность статуса - статусов может быть много, например может идти дождь и одновременно рабочий будет атакован. Она перемножается на абсолютно все % снизу по столбцу, чтобы получить ответ, что при таких условиях все же будет делать рабочий.
Так же отдельное внимание хочу обратить на поиск пути - это просто список алгоритмов для поиска пропитания. Например бежать к дальнему кусту, но если в радиусе 1000 метров есть другой, бежать к нему. Или стоять и ждать пока куст не респавнится рядом. Или бежать к ближнему кусту со всей толпой.
А теперь к конкретике - суть в том, чтобы добавляя случайные +-% к характеристикам родителя и выдавая их потомку, получить один или несколько видов поведения у рабочих. Возможно, это будут религиозные фанатики, которые будут ждать рандома от Бога рандома, что он пошлет куст звездолиста рядом с ними или отъявленные убийцы, питающиеся своими собратьями или помощники друг другу, предпочитающие умереть сами, но не дать погибнуть товарищу или рабочие, которые будут собирать ресурсы только во время дождя.
Если посмотреть в прогрессии, то когда мы исключим все возможные операции поведения с беготней к кустам, можно будет выйти на уровень выше - постройке поселений. Для этого нужно два фактора - дать возможность рабочим высаживать рассаду кустов самим и определение своего-чужого :)
Ах да. Основные проблемы:
  • отсутствие массивов в warcraft3.
  • без понятия, почему мой warcraft не переваривает выложенные карты адекватно, когда я их модифицирую.
  • не понятно, как на гуи (а здесь ничего сложного, все if-ами) сделать функции, чтобы не перегружать основной код.
ПС: многовероятен шанс, что победят те, кто будет нападать на других рабочих, чтобы их убить и одновременно звать на помощь :)
Загруженные файлы
22
видимо он хотел многомерный массив это изи делает но ему сложно!
19
pro100master, там есть матрицы? Что? Или снова представление одномерного массива многомерным?
16
Отвратительно.
Три мутатора есть, но как же мне сейчас лень искать утечки. Займусь этим после. А вы пока что можете немного поразвлекаться с этой штукой.
умные: бегут к предмету, если к нему не бежит никто, кто ближе них; не атакуют вообще
агрессивные: атакуют ближнего с 25% шансом
работник: тупо стадо, бегающеем по полю
Загруженные файлы
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.