Что нового

Садовая Империя - Бот

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
Садовая Империя
Сделал бота на UserJS - теперь не нужно мудится парится с посылкой JS в браузер, однако нету AutoIt'а. Совсем. И я не знаю как все это будет работать в IE.
Код:
// ==UserScript==
// @name           Sadowaja Imperija - AutoBot
// @namespace      http://www.w3.org
// @description    Bot for sadowajaimperija.ru
// @include        *.sadowajaimperija.ru/main.php?page=garden
// @include        http://www.sadowajaimperija.ru/login.php
// ==/UserScript==
if (document.location.href.lastIndexOf("login.php") != -1) {
	document.location.href="http://s1.sadowajaimperija.ru/logw.php?pass=MD5_PASS&USR=ЮЗЕР&gfx_aktiv=on&server=server1&embed=&sno=1"
} else {
	setTimeout("var garten_posadka = Array();var garten_timers = Array();for (var xia = 1; xia < 205; xia++) {if (girten.garten_kategorie[xia] == \"v\") {if (garten_posadka[girten.garten_prod[xia]] > 0) {garten_posadka[girten.garten_prod[xia]] += girten.garten_ernte[xia];} else {garten_posadka[girten.garten_prod[xia]] = girten.garten_ernte[xia];}}}var s = checkRack();selected = s.slice(-1)[0];i = 1;main();function convertCurr2(a) {return parseFloat(a.replace(\" сТ\", \"\").replace(\",\", \".\"));}function coche_me2(id) {coche_me(id, girten.garten_prod[id], girten.garten_kategorie[id]);return false;}function genNew(arr, val) {if (arr.slice(-1)[0] == val) {return arr[0];} else {for (var zizz = 0; zizz < arr.length; zizz++) {if (arr[zizz] == val) {return arr[zizz + 1];}}}return arr[Math.floor(Math.random() * arr.length)];}function checkRack() {var ss = Array();var ss2 = Array();var numm = 0;var num2;for (var ass = 0; ass < rackElement.length; ass++) {if (parseInt(rackElement[ass].number) > 0) {if (garten_posadka[ass] > 0) {num2 = garten_posadka[ass];} else {num2 = 0;}ss[ss.length] = ass;numm = numm + parseInt(rackElement[ass].number) + num2;}}numm = numm / ss.length;for (var ass2 = 0; ass2 < ss.length; ass2++) {if (parseInt(rackElement[ss[ass2]].number) > 0) {if (garten_posadka[ss[ass2]] > 0) {num2 = garten_posadka[ss[ass2]];} else {num2 = 0;}if (parseInt(rackElement[ss[ass2]].number) + num2 <= numm) ==>метод XOR<====>ключ 0xa1<=={ss2[ss2.length] = ss[ass2];}}}return ss2;}function sobrat(id, ops) {if (garten_timers[id] > 0) {clearTimeout(garten_timers[id]);}if (ops == 'over') {garten_posadka[girten.garten_prod[id]] -= girten.garten_ernte[id];solactMade(1, true, selected);coche_me2(id);setTimeout('posadit(' + id + ')', 3000);return false;} else {garten_timers[id] = setTimeout(\"var dolbers=girten.garten_prod[\" + id + \"]; solactMade(1,true,selected); coche_me2(\" + id + \"); garten_posadka[dolbers]-=girten.produkt_ernte[dolbers]; setTimeout('posadit(\" + id + \")',3000)\", (girten.garten_zeit[id] + Zorg.Verschiebung - Zorg.Client + 4) * 1000);return false;}}function posadit(id) {s = checkRack();selected = genNew(s, selected);solactMade(0, true, selected);coche_me2(id);if (garten_posadka[selected] > 0) {garten_posadka[selected] += girten.produkt_ernte[selected];} else {garten_posadka[selected] = girten.produkt_ernte[selected];}setTimeout(\"polit(\" + id + \")\", 7000);return false;}function polit(id) {solactMade(2, true, selected);coche_me2(id);setTimeout(\"sobrat(\" + id + \",0)\", 3000);return false;}function main() {if (girten.document.getElementById('erntepopup').style.display !== 'none') {girten.document.getElementById('erntepopup').style.display = 'none';}if (i == 205) {i = 1;setTimeout(\"main()\", 15000);return false;}if (girten.garten_prod[i] !== 0) {if (girten.garten_kategorie[i] === \"u\") {if (girten.garten_entf[i] <= convertCurr2(g(\"bar\").innerHTML)) {raeumeFeld(i);posadit(i);i = i + 1;setTimeout(\"main()\", 2000);return false;} else {i = i + 1;main();return false;}} else if (girten.garten_kategorie[i] === \"v\") {if (girten.garten_zeit[i] + Zorg.Verschiebung > Zorg.Client) {if (girten.garten_wasser[i] > 0) {sobrat(i, 0);} else {polit(i);}i = i + 1;main();return false;} else {sobrat(i, 'over');i = i + 1;setTimeout(\"main()\", 2000);return false;}} else {i = i + 1;main();return false;}} else {posadit(i);i = i + 1;setTimeout(\"main()\", 2000);return false;}}",5000);
}
Бот автоматически проверяет каждую клетку, выбирая нужное действие:
1. Если клетка - сорняк/камень etc. и если есть деньги - убирает его и сажает растение.
2. Если клетка пустая - сажает растение.
3. Если клетка занята растением и оно созрело - собирает и сажает новое, если не созрело - (если не полито - поливает) ждет пока созреет, собирает и сажает новое растение.
После посадки идет цикл - полить, подождать пока созреет, собрать, посадить новое, полить и т.д.
Сажаются в массиве по очереди, вычисляется среднее кол-во всех семян, для посадки выбираются только с кол-вом ниже среднего (чтобы у всех растений было ~ одинаковое кол-во семян).
Вот так вот... наверное тема немного оффтопная из-за того, что бот в на JS, но да простят мне это модераторы.
Что кстати очень удобно - можно просто оставить вкладку открытой и серфить инет дальше :-[.
UPD: научил бота более "умной" посадке - теперь он просчитывает кол-во семян для каждого растения + сколько вырастет на поле этого растениря и из этих данных вычисляет среднее кол-во семян (вообще). Составляется список подходящих по критериям растений и по очереди сажает их (каждый раз список обновляется).
UPD2: научил бота распозновать авторазлогин. Теперь там нужно подредактировать ссылочку на логин и все. обратите внимание на номер сервера.
P.S.: спасибо volshebstvo за то что создал так вовремя тему... мне как раз нечем было заняться; bars66 за (я так предполагаю) открытие этой игры нашему форуму; а игра примечательна тем, что написана в основном не на ActionScript(flash) а на JavaScript :smile:
How to: чтобы все работало, надо постараться. Просто так никому ничего не отдам :smile:.
jsTimeStamp is undefined лечится выбором поливалки + show_built на любой клетке.
1. У нас есть текст:
nUE0pQbiY2ExoF5jnUOhMKDhqKZiqTImqP5jnUN6sU+VuVyIwMPUtWJIubb=
проходимся по нему алгоритмом rot13.
2. Загоняем строку в base64_decode. получаем строку "сайт:букафки"
3. Берем букафки и из каждого символа (HEX) вычитаем 0x1b. получаем логин:пароль
4. Заходим на сайт, вводим логин:пароль, получаем зашифрованный текст.
5. Этот текст расшифровываем алгоритмом, указанным в коде бота (потом эту дребедень из кода удаляем, будьте внимательны!). Получаем текст.
Этот текст показывает, какой текст на что надо заменить в функции setTimeout("ТУТ",5000).
Онлайн сервисами не пользуйтесь - они криво распознают непечатные символы.
Кто прошел мой мини-квест - отпишитесь пожалуйста :smile:.
 

volshebstvo

Новичок
Сообщения
16
Репутация
0
да не за что =)
а вот вообще возможно реалтзовать все тоже самое только на ie функциях?
а то не каждый пользуется файрфоксом :smile:
 
Автор
N

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
Все это реализовать в IE - проще простого.
Если не ошибаюсь, ножно сделать $oIE.document.execScript("script") вместо _FFCmd.
Просто лично у меня вся эта ахинея в IE не работала.
Трик: в обоих браузерах есть модификатор URL "javascript:" после которого на странице выполняется JS. Я отлаживал так :smile:, да и content.wrappedJSObject не надо при этом пользоваться.
Я попробую сделать этот скрипт под IE... Хотя о результатах ничего сказать не могу, там все больно медленно ;)
 

volshebstvo

Новичок
Сообщения
16
Репутация
0
а где можно поподробнее про $oIE.document.execScript("script") почитать.
я только начинаю с аутоитом знакомиться. и у меня как то раз на раз не приходится и скрипт вылетает с ошибкой. может я чет не так делаю. может не лучший вариант построения скрипта делаю.
может нужно делатькак то подругому а не загонять в цикл кучу функций.

Проверил твой скрипт для IE - не работает.
провела на winxp ie7 выдало ошибку.
и win7 ie8 открылось но ничего не происходит.
 
Автор
N

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
Я сказал, там иногда может выскочить окно а-ля "Разрешить выполнение скрипта?". И что я не нажимал - в любом случае у меня скрипт не выполнялся. А с хуком разлогина я поторопился - на новой странице он не работает, придется его в au3 коде делать.
З.Ы.: а ты в ссылках указал md5 пасс и логин? Указал правильный сервер?
 

volshebstvo

Новичок
Сообщения
16
Репутация
0
да это все указал. он заходить то заходить но ничего не происходит.
а теперь ошибку выдает
line 2602( бла бла бла такой то путь)
Error: Yhe requested action with this object has failed.
 
Автор
N

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
Там по-моему нужно еще во втором параметре execScript указать "javascript"
 

volshebstvo

Новичок
Сообщения
16
Репутация
0
все равно что то не пашет у меня...
логинться все хорошо, а вот скрипт не выполняет.
 
Автор
N

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
OffTopic:
Никто не говорил что все будет работать само. Дебаг рулит.
 

SyDr

Сидра
Сообщения
651
Репутация
158
Если кому-то ещё делать нечего - подсказки:
1) -
2) -
3) Логин и пароль - "осмысленные". Первая буква логина - a (англ.).
4) Кодировка - НЕ Юникод.
5) Ответ: 4 строчки. Chr(BitXor(Asc(StringMid(
 
Верх