Comments 35
Зависит. Можно подкрадываться и съедать конкурентов делением. Можно кидать приманки, можно растить зеленые растения, чтобы они делились и разрывали бОльшего конкурента на части…
Шахматы прям :)
Шахматы прям :)
Да. На самом деле, успех в игре зависит прежде всего от умений игрока, а уже потом от удачи.
Для того, чтобы стабильно выбиваться в лидеры нежно освоить несколько приемов:
1) рассчитывать свою массу и массу противника, чтобы при делении не оказаться в патовой ситуации и не быть съеденным;
2) разбивать лидеров в с помощью зубастых клеток;
3) обмениваться массой между поделившимися клетками;
4) ретироваться делением в случае угрозы со стороны лидеров;
Для того, чтобы стабильно выбиваться в лидеры нежно освоить несколько приемов:
1) рассчитывать свою массу и массу противника, чтобы при делении не оказаться в патовой ситуации и не быть съеденным;
2) разбивать лидеров в с помощью зубастых клеток;
3) обмениваться массой между поделившимися клетками;
4) ретироваться делением в случае угрозы со стороны лидеров;
их можно растить?
Круто, я тоже пользовался fiddler'ом, но хотел немного более интеллектуального бота. Поделюсь своей наработкой немного деобфусцированного скипта, правда, одной из предыдущих версий, gist.github.com/abby-sergz/65aad7682de388f14ee2.
Во-первых, сервер раскидывает игроков по игровым комнатам. Поэтому со мной на карту из 50 ботов попадают 2-3. Остальные «играют» в других комнатах, следуя по координатам из соседней Вселенной.
Можно переконнектиться к нужному серверу, зная его IP: в консоли после выбора региона будет написан ip-адрес, потом можно коннектиться к нему:
connect("ws://213.219.39.46:443"); //нужный ip сервера
Правда, наверное, нужно будет что-то подправить чтобы это всё работало на одной странице.
Если я не ошибся, то сервер на одном ip содержит много игровых комнат. Потому что я подставляю один и тот же ip для всех ботов. Но ко мне попадает лишь часть. Другие крутятся с другими игроками.
В итоге в комнате играет 15-20 игроков, на сервер может и 5000.
В итоге в комнате играет 15-20 игроков, на сервер может и 5000.
Хм, точно. Тестил со вкладками браузера. Если подключаться довольно быстро, то попадаю в одну комнату, если через некоторое время, то уже кидает в другую.
Комнат там действительно довольно много m.agar.io/info
Можно и проще. Перед загрузкой удаляем main_out из страницы и подгружаем свою копию. Пример для GM или аналогов — pastebin.com/7ZhB5cVD
(del)
Я пошел по другому пути. Ботов не стал делать, а расковырял оригинальную js и сделал пачку улучшений код на githab
Я пошёл дальше и вообще исключил игрока оставив лишь ботов, которые кооперируются для выживания.
Свой код я инъектирую с помощью отладчика. Достаточно остановить его в любой внутренней функции и мы имеем полный доступ ко внутренним переменным. Так что можно через консоль создать замыкание, вызывающееся по таймеру, и можно творить что угодно.
Инфа о своих клетках находится в хэше «m». Инфа обо всех остальных клетках лежит в словаре «v». Этого уже достаточно для игры. Пробегаемся в цикле по своим клеткам и по чужим и складываем вычисленные для пар «я — не я» ускорения. Потом дёргаем onmousemove, чтобы сообщить движку в какую сторону мы хотим ускориться.
Все чужие клетки делятся на следующие группы:
1. Вирусы — зелёные пассивные клетки, которые могут взрывать остальных. У них стоит флаг isVirus. От них отталкиваемся по обратно квадратичному закону.
2. Друзья — дружеские боты, действующие всоседних вкладках. Их определяем по префиксу в имени. К ним притягиваемся с константной силой. Это позволяет им находить друг друга даже если отреспаунились в разных конца карты.
3. Враги — клетки, которые больше максимального размера, что мы можем съесть. От них отталкиваемся как отвирусов, но с другим коэффициентом.
4. Еда — все остальные клетки, существенно меньше нашей. К ним притягиваемся по обратно квадратичному закону.
Кроме того, чтобы бота не зажимали к стенке, добавляем отталкивание от них в перпендирулярних к ним направляниях по тому же закону обратных квадратов.
Итого это позволяет убегать от группы врагов поедая попадающуюся по пути еду и сливаться с друзьями образуя более крупную особь. Однако люди всё ещё могут хитростью зажать нашего бота в тиски или порвать его простреливая через вирус.
Чтобы отреспауниться, достаточно вызвать функцию setNick(string). Я её вызываю просто всегда при вызове моего замыкания.
Фото рекорда:

Видео с четырьмя ботами:
Свой код я инъектирую с помощью отладчика. Достаточно остановить его в любой внутренней функции и мы имеем полный доступ ко внутренним переменным. Так что можно через консоль создать замыкание, вызывающееся по таймеру, и можно творить что угодно.
Инфа о своих клетках находится в хэше «m». Инфа обо всех остальных клетках лежит в словаре «v». Этого уже достаточно для игры. Пробегаемся в цикле по своим клеткам и по чужим и складываем вычисленные для пар «я — не я» ускорения. Потом дёргаем onmousemove, чтобы сообщить движку в какую сторону мы хотим ускориться.
Все чужие клетки делятся на следующие группы:
1. Вирусы — зелёные пассивные клетки, которые могут взрывать остальных. У них стоит флаг isVirus. От них отталкиваемся по обратно квадратичному закону.
2. Друзья — дружеские боты, действующие всоседних вкладках. Их определяем по префиксу в имени. К ним притягиваемся с константной силой. Это позволяет им находить друг друга даже если отреспаунились в разных конца карты.
3. Враги — клетки, которые больше максимального размера, что мы можем съесть. От них отталкиваемся как отвирусов, но с другим коэффициентом.
4. Еда — все остальные клетки, существенно меньше нашей. К ним притягиваемся по обратно квадратичному закону.
Кроме того, чтобы бота не зажимали к стенке, добавляем отталкивание от них в перпендирулярних к ним направляниях по тому же закону обратных квадратов.
Итого это позволяет убегать от группы врагов поедая попадающуюся по пути еду и сливаться с друзьями образуя более крупную особь. Однако люди всё ещё могут хитростью зажать нашего бота в тиски или порвать его простреливая через вирус.
Чтобы отреспауниться, достаточно вызвать функцию setNick(string). Я её вызываю просто всегда при вызове моего замыкания.
Фото рекорда:

Видео с четырьмя ботами:
Код бота без констант - подберите свои значения :-)
window.canvas = document.getElementById('canvas')
if( window.botovod ) clearInterval( botovod )
window.botovod = setInterval(function () {
setNick(nname)
var mys = m
var others = Object.keys(v).map(function (k) {
return v[k]
})
var dist = function (one, two) {
return Math.sqrt( Math.pow(one.x - two.x, 2) + Math.pow(one.y - two.y, 2) )
}
var aX = 0
var aY = 0
mys.forEach( function(my) {
others.forEach(function (o) {
if( my === o ) return
var od = dist(my, o)
if (o.isVirus) { // virus
var f = - localStorage.antivir / Math.pow(od, 2)
} else if (o.name.indexOf(pfix) === 0) { // friend
var fac = my.size / o.size
if( fac > 1 ) fac = 1/fac
if (fac < 0.9) {
var f = localStorage.friendly
} else {
var f = 0
}
} else if ( ( my.size / o.size ) > 1.2) { // food
var f = o.size * localStorage.hunger/ Math.pow(od, 2)
} else { // enemy
var f = - o.size * localStorage.danger / Math.pow(od, 2)
}
if (isNaN(f)) return
aX += (o.x - my.x) * f / od
aY += (o.y - my.y) * f / od
})
aX += localStorage.bords / my.x
aX += -localStorage.bords / Math.abs(my.x - 12000)
aY += localStorage.bords / my.y
aY += -localStorage.bords / Math.abs(my.y - 12000)
})
var a = Math.sqrt( Math.pow( aX , 2 ) + Math.pow( aY , 2 ) ) || 1
var offX = aX * 100 / a
var offY = aY * 100 / a
var mX = Math.abs(canvas.clientWidth / 2 + offX)
var mY = Math.abs(canvas.clientHeight / 2 + offY)
canvas.onmousemove({ clientX: mX, clientY: mY })
}, 50)
Ну ты сотона
Великолепно!
На сколько сложным будет добавление возможности делиться пополам, чтобы съесть соперника?
или это слишком рискованно?
На сколько сложным будет добавление возможности делиться пополам, чтобы съесть соперника?
или это слишком рискованно?
Спасибо, за статью, но читерство — это плохо.
Я допускаю, что данное решение может привести в лидерству с куда большей вероятностью, чем это можно сделать самому.
Но самый главный вопрос возникающий при борьбе за бОльшее количество своих ботов в комнате — А смысл сего действа?
В контексте того, что если вы наводните комнату ботами, которые вас накормят до первого места, то места для реальных игроков не останется.
В итоге вы первый среди ботов. Нет конкуренции, нет куража, нет азарта и веселья от ников игроков.
А смысл тогда играть то? Променять веселье на ботов.
Но самый главный вопрос возникающий при борьбе за бОльшее количество своих ботов в комнате — А смысл сего действа?
В контексте того, что если вы наводните комнату ботами, которые вас накормят до первого места, то места для реальных игроков не останется.
В итоге вы первый среди ботов. Нет конкуренции, нет куража, нет азарта и веселья от ников игроков.
А смысл тогда играть то? Променять веселье на ботов.
Видимо, что-то изменили. Сейчас не работает. При загрузке — пустое поле.
Сейчас стало популярным играть на пару в комнате
Когда оба более менее станут большими, начинают работать вместе по следующему алгоритму
Как только один из них видит потенциального соперника, которого можно съесть, поделившись пополам, он это делает сразу и оставшуюся часть намеренно отдает напарнику съесть. Затем напарник с помощью «w» выравнивает массы друг друга.
Если вот эту стратегию попробовать сделать с ботами, было бы просто замечательно
Хотя бы сделать так, чтобы бот понимал, что нужно съесть маленькую часть от твоего куска и затем отдать это кол-во обратно, пусть даже не прыгает, просто находится рядом всё это время
Кстати, со временем масса уменьшается на какое-то количество, так что нужно постоянно что-то есть
Когда оба более менее станут большими, начинают работать вместе по следующему алгоритму
Как только один из них видит потенциального соперника, которого можно съесть, поделившись пополам, он это делает сразу и оставшуюся часть намеренно отдает напарнику съесть. Затем напарник с помощью «w» выравнивает массы друг друга.
Если вот эту стратегию попробовать сделать с ботами, было бы просто замечательно
Хотя бы сделать так, чтобы бот понимал, что нужно съесть маленькую часть от твоего куска и затем отдать это кол-во обратно, пусть даже не прыгает, просто находится рядом всё это время
Кстати, со временем масса уменьшается на какое-то количество, так что нужно постоянно что-то есть
Добрый вечер, подскажите а какие должны быть настройки Fiddler что бы использовать Ваш скрипт? никак не удается его заставить работать
Sign up to leave a comment.
Пишем бота для браузерной игры agar.io