Комментарии 35
НЛО прилетело и опубликовало эту надпись здесь
Зависит. Можно подкрадываться и съедать конкурентов делением. Можно кидать приманки, можно растить зеленые растения, чтобы они делились и разрывали бОльшего конкурента на части…
Шахматы прям :)
Шахматы прям :)
+10
Да. На самом деле, успех в игре зависит прежде всего от умений игрока, а уже потом от удачи.
Для того, чтобы стабильно выбиваться в лидеры нежно освоить несколько приемов:
1) рассчитывать свою массу и массу противника, чтобы при делении не оказаться в патовой ситуации и не быть съеденным;
2) разбивать лидеров в с помощью зубастых клеток;
3) обмениваться массой между поделившимися клетками;
4) ретироваться делением в случае угрозы со стороны лидеров;
Для того, чтобы стабильно выбиваться в лидеры нежно освоить несколько приемов:
1) рассчитывать свою массу и массу противника, чтобы при делении не оказаться в патовой ситуации и не быть съеденным;
2) разбивать лидеров в с помощью зубастых клеток;
3) обмениваться массой между поделившимися клетками;
4) ретироваться делением в случае угрозы со стороны лидеров;
+5
их можно растить?
0
Круто, я тоже пользовался fiddler'ом, но хотел немного более интеллектуального бота. Поделюсь своей наработкой немного деобфусцированного скипта, правда, одной из предыдущих версий, gist.github.com/abby-sergz/65aad7682de388f14ee2.
+1
Во-первых, сервер раскидывает игроков по игровым комнатам. Поэтому со мной на карту из 50 ботов попадают 2-3. Остальные «играют» в других комнатах, следуя по координатам из соседней Вселенной.
Можно переконнектиться к нужному серверу, зная его IP: в консоли после выбора региона будет написан ip-адрес, потом можно коннектиться к нему:
connect("ws://213.219.39.46:443"); //нужный ip сервера
Правда, наверное, нужно будет что-то подправить чтобы это всё работало на одной странице.
0
Если я не ошибся, то сервер на одном ip содержит много игровых комнат. Потому что я подставляю один и тот же ip для всех ботов. Но ко мне попадает лишь часть. Другие крутятся с другими игроками.
В итоге в комнате играет 15-20 игроков, на сервер может и 5000.
В итоге в комнате играет 15-20 игроков, на сервер может и 5000.
0
Хм, точно. Тестил со вкладками браузера. Если подключаться довольно быстро, то попадаю в одну комнату, если через некоторое время, то уже кидает в другую.
0
Комнат там действительно довольно много m.agar.io/info
0
Можно и проще. Перед загрузкой удаляем main_out из страницы и подгружаем свою копию. Пример для GM или аналогов — pastebin.com/7ZhB5cVD
+2
(del)
0
Я пошел по другому пути. Ботов не стал делать, а расковырял оригинальную js и сделал пачку улучшений код на githab
+4
Я пошёл дальше и вообще исключил игрока оставив лишь ботов, которые кооперируются для выживания.
Свой код я инъектирую с помощью отладчика. Достаточно остановить его в любой внутренней функции и мы имеем полный доступ ко внутренним переменным. Так что можно через консоль создать замыкание, вызывающееся по таймеру, и можно творить что угодно.
Инфа о своих клетках находится в хэше «m». Инфа обо всех остальных клетках лежит в словаре «v». Этого уже достаточно для игры. Пробегаемся в цикле по своим клеткам и по чужим и складываем вычисленные для пар «я — не я» ускорения. Потом дёргаем onmousemove, чтобы сообщить движку в какую сторону мы хотим ускориться.
Все чужие клетки делятся на следующие группы:
1. Вирусы — зелёные пассивные клетки, которые могут взрывать остальных. У них стоит флаг isVirus. От них отталкиваемся по обратно квадратичному закону.
2. Друзья — дружеские боты, действующие всоседних вкладках. Их определяем по префиксу в имени. К ним притягиваемся с константной силой. Это позволяет им находить друг друга даже если отреспаунились в разных конца карты.
3. Враги — клетки, которые больше максимального размера, что мы можем съесть. От них отталкиваемся как отвирусов, но с другим коэффициентом.
4. Еда — все остальные клетки, существенно меньше нашей. К ним притягиваемся по обратно квадратичному закону.
Кроме того, чтобы бота не зажимали к стенке, добавляем отталкивание от них в перпендирулярних к ним направляниях по тому же закону обратных квадратов.
Итого это позволяет убегать от группы врагов поедая попадающуюся по пути еду и сливаться с друзьями образуя более крупную особь. Однако люди всё ещё могут хитростью зажать нашего бота в тиски или порвать его простреливая через вирус.
Чтобы отреспауниться, достаточно вызвать функцию setNick(string). Я её вызываю просто всегда при вызове моего замыкания.
Фото рекорда:
![image](https://habrastorage.org/r/w1560/getpro/habr/comment_images/472/89d/ccd/47289dccdd6130ea8df099c3b6492cb6.png)
Видео с четырьмя ботами:
Свой код я инъектирую с помощью отладчика. Достаточно остановить его в любой внутренней функции и мы имеем полный доступ ко внутренним переменным. Так что можно через консоль создать замыкание, вызывающееся по таймеру, и можно творить что угодно.
Инфа о своих клетках находится в хэше «m». Инфа обо всех остальных клетках лежит в словаре «v». Этого уже достаточно для игры. Пробегаемся в цикле по своим клеткам и по чужим и складываем вычисленные для пар «я — не я» ускорения. Потом дёргаем onmousemove, чтобы сообщить движку в какую сторону мы хотим ускориться.
Все чужие клетки делятся на следующие группы:
1. Вирусы — зелёные пассивные клетки, которые могут взрывать остальных. У них стоит флаг isVirus. От них отталкиваемся по обратно квадратичному закону.
2. Друзья — дружеские боты, действующие всоседних вкладках. Их определяем по префиксу в имени. К ним притягиваемся с константной силой. Это позволяет им находить друг друга даже если отреспаунились в разных конца карты.
3. Враги — клетки, которые больше максимального размера, что мы можем съесть. От них отталкиваемся как отвирусов, но с другим коэффициентом.
4. Еда — все остальные клетки, существенно меньше нашей. К ним притягиваемся по обратно квадратичному закону.
Кроме того, чтобы бота не зажимали к стенке, добавляем отталкивание от них в перпендирулярних к ним направляниях по тому же закону обратных квадратов.
Итого это позволяет убегать от группы врагов поедая попадающуюся по пути еду и сливаться с друзьями образуя более крупную особь. Однако люди всё ещё могут хитростью зажать нашего бота в тиски или порвать его простреливая через вирус.
Чтобы отреспауниться, достаточно вызвать функцию setNick(string). Я её вызываю просто всегда при вызове моего замыкания.
Фото рекорда:
![image](https://habrastorage.org/getpro/habr/comment_images/472/89d/ccd/47289dccdd6130ea8df099c3b6492cb6.png)
Видео с четырьмя ботами:
Код бота без констант - подберите свои значения :-)
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)
+13
Ну ты сотона
+3
Великолепно!
На сколько сложным будет добавление возможности делиться пополам, чтобы съесть соперника?
или это слишком рискованно?
На сколько сложным будет добавление возможности делиться пополам, чтобы съесть соперника?
или это слишком рискованно?
0
Спасибо, за статью, но читерство — это плохо.
+2
Я допускаю, что данное решение может привести в лидерству с куда большей вероятностью, чем это можно сделать самому.
Но самый главный вопрос возникающий при борьбе за бОльшее количество своих ботов в комнате — А смысл сего действа?
В контексте того, что если вы наводните комнату ботами, которые вас накормят до первого места, то места для реальных игроков не останется.
В итоге вы первый среди ботов. Нет конкуренции, нет куража, нет азарта и веселья от ников игроков.
А смысл тогда играть то? Променять веселье на ботов.
Но самый главный вопрос возникающий при борьбе за бОльшее количество своих ботов в комнате — А смысл сего действа?
В контексте того, что если вы наводните комнату ботами, которые вас накормят до первого места, то места для реальных игроков не останется.
В итоге вы первый среди ботов. Нет конкуренции, нет куража, нет азарта и веселья от ников игроков.
А смысл тогда играть то? Променять веселье на ботов.
-1
Видимо, что-то изменили. Сейчас не работает. При загрузке — пустое поле.
0
Сейчас стало популярным играть на пару в комнате
Когда оба более менее станут большими, начинают работать вместе по следующему алгоритму
Как только один из них видит потенциального соперника, которого можно съесть, поделившись пополам, он это делает сразу и оставшуюся часть намеренно отдает напарнику съесть. Затем напарник с помощью «w» выравнивает массы друг друга.
Если вот эту стратегию попробовать сделать с ботами, было бы просто замечательно
Хотя бы сделать так, чтобы бот понимал, что нужно съесть маленькую часть от твоего куска и затем отдать это кол-во обратно, пусть даже не прыгает, просто находится рядом всё это время
Кстати, со временем масса уменьшается на какое-то количество, так что нужно постоянно что-то есть
Когда оба более менее станут большими, начинают работать вместе по следующему алгоритму
Как только один из них видит потенциального соперника, которого можно съесть, поделившись пополам, он это делает сразу и оставшуюся часть намеренно отдает напарнику съесть. Затем напарник с помощью «w» выравнивает массы друг друга.
Если вот эту стратегию попробовать сделать с ботами, было бы просто замечательно
Хотя бы сделать так, чтобы бот понимал, что нужно съесть маленькую часть от твоего куска и затем отдать это кол-во обратно, пусть даже не прыгает, просто находится рядом всё это время
Кстати, со временем масса уменьшается на какое-то количество, так что нужно постоянно что-то есть
+1
Добрый вечер, подскажите а какие должны быть настройки Fiddler что бы использовать Ваш скрипт? никак не удается его заставить работать
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Пишем бота для браузерной игры agar.io