16.09.2011, 15:45
#1
Разведчик
Регистрация: 10.09.2011
Сообщений: 35
Популярность: 16
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 2 сообщениях
[ВК, ММ: Паровозики]
[
Ссылки могут видеть только зарегистрированные пользователи. ]
[
Ссылки могут видеть только зарегистрированные пользователи. ]
Для использования бота нужно сделать и настроить.
Бот работает на платформе AutoIT
[
Ссылки могут видеть только зарегистрированные пользователи. ]
[
Ссылки могут видеть только зарегистрированные пользователи. ]
Итак, начнем:
Копируем размещенный ниже код в "SciTE Script Editor", он идет в поставке с autoit
1) Строки 1 и 2.
Тут нужно вписать класс и заголовок окна Вашего браузера с активной вкладкой игры.
Открываем браузер, открываем страницу с игрой и смотрим на заголовок окна с помощью "AutoIt Window Info" и прицела (хватаем его и тащим)
[
Ссылки могут видеть только зарегистрированные пользователи. ]
Это и есть нужные нам строки
2) Строки 4 и 5:
тут нужно указать координаты верхнего левого пикселя приложения флеш
Открываем "AutoIt Window Info", хватаем прицел и смотрим на координаты.
Для упрощения прицеливания идем в меню Options->Magnify
"AutoIt Window Info" рисует свою рамку вокруг приложения, ее то же надо захватить.
Но не белый фон страницы, там должен быть темный пиксел
[
Ссылки могут видеть только зарегистрированные пользователи. ]
Заменяем то, что есть на то, что надо.
3) Строки 7 - 264
Тут нужно раскомментировать номер карты и координаты кнопки станции назначения, куда бот будет отправлять поезда
Ищем нужную станцию, над ней написан номер карты
Код:
$mapNo = (0-2)
$stationButtonX = $posX + X
$stationButtonY = $posY + Y
удаляем символ ";" в начале строки
Всё, бот настроен.
Сохраняем на диск, жмем F7 (в окне "SciTE Script Editor"), рядом с тем файлом, что мы сохранили появится экзешник.
Запускаем браузер, открываем страницу с игрой (лучше всего открыть отдельное окно для игры)
Запускаем наш exeшник и идем пить чай.
Или спать ложимся.
Или идем на работу.
Или едем в командировку.
Бот каждые 20 минут "отбирает" у Вас экран, делает свои дела и останавливается
Код бота:
Код:
$winClass = "Chrome_WidgetWin_0"
$winTitle = "Паровозики"
$posX = 351
$posY = 226
;Коэффициенты: доходность в секунду (ДС), Опыт в секунду (ОпС), общий коэффициент (ОбС)
;ДС = Д * 1000 / (Погр + Путь)
;ОпС = Оп * 1000 / (Погр + Путь)
;ОбС = ДС + ОпС
;На тысячу умножаем для читабельности
; Погрузка
; ^ Время в пути
;Станция Д Оп Погр Путь ДС ОпС ОбС
;------------------+---+---+-------+-------+-------+-------+-----
;Уэйконт 9 7 720 822 5,84 4,54 10,38
;Ричардссонс 6 7 360 822 5,08 5,92 11,00
;Хаскелло 15 20 540 2340 5,21 6,94 12,15
;Планос 9 12 360 1410 5,08 6,78 11,86
;Раундс Рокс 18 25 360 2940 5,45 7,58 13,03
;Чиллдресо 27 30 900 3528 6,10 6,78 12,87
;Хьюстона 30 30 540 3528 7,37 7,37 14,75
;Эль Пасос 36 40 900 4704 6,42 7,14 13,56
;Клиберна 45 50 1080 5882 6,46 7,18 13,65
;Кристис 60 70 360 8234 6,98 8,15 15,13
;Ранкинг 72 80 1440 9410 6,64 7,37 14,01
;Колорадо Сити 75 80 1080 9410 7,15 7,63 14,78
;Хантсвилла 81 90 900 10588 7,05 7,83 14,89
;Финикс 54 50 900 5882 7,96 7,37 15,33
;Форт Уэртос 72 80 900 9410 6,98 7,76 14,74
;------------------+---+---+-------+-------+-------+-------+-----
;$mapNo = 0;Даллас
;Уэйконт
;$stationButtonX = $posX + 120
;$stationButtonY = $posY + 347
;$timeLoading = 1000 * 720
;$timeTravel = 1000 * 822
;Дентон
;$stationButtonX = $posX + 169
;$stationButtonY = $posY + 397
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Ричардссонс
;$stationButtonX = $posX + 139
;$stationButtonY = $posY + 225
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Хаскелло
;$stationButtonX = $posX + 189
;$stationButtonY = $posY + 294
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Гарланд
;$stationButtonX = $posX + 219
;$stationButtonY = $posY + 351
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Планос
;$stationButtonX = $posX + 239
;$stationButtonY = $posY + 205
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Раундс Рокс
;$stationButtonX = $posX + 420
;$stationButtonY = $posY + 226
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Чиллдрессо
;$stationButtonX = $posX + 319
;$stationButtonY = $posY + 286
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Хьюстона
;$stationButtonX = $posX + 410
;$stationButtonY = $posY + 366
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Эль Пасос
;$stationButtonX = $posX + 289
;$stationButtonY = $posY + 356
;$timeLoading = 1000 *
;$timeTravel = 1000 *
$mapNo = 1;Маршал
;Клиберна
;$stationButtonX = $posX + 350
;$stationButtonY = $posY + 366
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Кристис
;$stationButtonX = $posX + 430
;$stationButtonY = $posY + 326
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Тайлер
;$stationButtonX = $posX + 430
;$stationButtonY = $posY + 387
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Ранкинг
;$stationButtonX = $posX + 245
;$stationButtonY = $posY + 366
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Фредриксберг
;$stationButtonX = $posX + 160
;$stationButtonY = $posY + 364
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Тексар
;$stationButtonX = $posX + 80
;$stationButtonY = $posY + 385
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Уичитос Фоллс
;$stationButtonX = $posX + 90
;$stationButtonY = $posY + 316
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Эйдрианс
;$stationButtonX = $posX + 90
;$stationButtonY = $posY + 215
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Колорадо сити
;$stationButtonX = $posX + 210
;$stationButtonY = $posY + 275
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Хантсвилла
;$stationButtonX = $posX + 190
;$stationButtonY = $posY + 215
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Финикс
$stationButtonX = $posX + 310
$stationButtonY = $posY + 264
$timeLoading = 1000 * 900
;$timeTravel = 1000 * 5882
;Форт Уэртос
;$stationButtonX = $posX + 420
;$stationButtonY = $posY + 265
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Галлвестонс
;$stationButtonX = $posX + 369
;$stationButtonY = $posY + 214
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Дэйтона
;$stationButtonX = $posX + 290
;$stationButtonY = $posY + 125
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;$mapNo = 2;Эльдорадо
;Шерман
;$stationButtonX = $posX + 329
;$stationButtonY = $posY + 325
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Тахока
;$stationButtonX = $posX + 440
;$stationButtonY = $posY + 365
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Акрон
;$stationButtonX = $posX + 295
;$stationButtonY = $posY + 365
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Мерида
;$stationButtonX = $posX + 369
;$stationButtonY = $posY + 385
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Рино
;$stationButtonX = $posX + 225
;$stationButtonY = $posY + 365
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Чиуауа
;$stationButtonX = $posX + 150
;$stationButtonY = $posY + 385
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Пампа
;$stationButtonX = $posX + 190
;$stationButtonY = $posY + 326
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Пресидио
;$stationButtonX = $posX + 70
;$stationButtonY = $posY + 365
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Озона
;$stationButtonX = $posX + 190
;$stationButtonY = $posY + 276
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Роли
;$stationButtonX = $posX + 120
;$stationButtonY = $posY + 295
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Перритон
;$stationButtonX = $posX + 69
;$stationButtonY = $posY + 235
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Алпайн
;$stationButtonX = $posX + 225
;$stationButtonY = $posY + 225
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Корсикана
;$stationButtonX = $posX + 169
;$stationButtonY = $posY + 204
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Арчер Сити
;$stationButtonX = $posX + 294
;$stationButtonY = $posY + 225
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Диммит
;$stationButtonX = $posX + 370
;$stationButtonY = $posY + 206
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Сандерсон
;$stationButtonX = $posX + 330
;$stationButtonY = $posY + 275
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Фримонт
;$stationButtonX = $posX + 430
;$stationButtonY = $posY + 300
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;Слейтон
;$stationButtonX = $posX + 440
;$stationButtonY = $posY + 235
;$timeLoading = 1000 *
;$timeTravel = 1000 *
;-------------------------------------------------------
$pause = False
$width = 729
$height = 554
$frameX0 = $posX + 56
$frameY0 = $posY + 37
$frameX1 = $posX + $width
$frameY1 = $posY + $height
Dim $color[4] = [ _
0xC4CED8, _
0x8EAFC9, _
0x2A3772, _
0x2E3E70 _
]
Dim $bad[6][3][3] = [ _
[[$posX + 477,$posY + 125, 0x4F5317],[0,0,0],[0,0,0]], _;Шакалы
[[$posX + 674,$posY + 228, 0x2D4B0A],[0,0,0],[0,0,0]], _;Повозка
[[0,0,0],[0,0,0],[0,0,0]], _
[[$posX + 484,$posY + 155 - 63, 0x6E5A23],[0,0,0],[0,0,0]], _;Бандиты
[[$posX + 292,$posY + 450 - 63, 0x4C5811],[$posX + 442,$posY + 310 - 63, 0x4B5C15], [$posX + 534,$posY + 551 - 63, 0x34530B]], _;Отходы, страусы, нефть
[[0,0,0],[0,0,0],[0,0,0]] _
]
Dim $actions[6][4] = [ _
[$posX + $width - 1 , $posY + $height - 1 , $posX + $width - 1 , $posY + 1], _;вниз
[$posX + 1 , $posY + 1 , $posX + $width - 1 , $posY + 1], _;влево
[$posX + 1 , $posY + 1 , $posX + $width - 1 , $posY + 1], _;влево
[$posX + 1 , $posY + 1 , $posX + 1 , $posY + $height - 100], _;вверх
[$posX + $width - 1 , $posY + 1 , $posX + 1 , $posY + 1], _;вправо
[$posX + $width - 1 , $posY + 1 , $posX + 1 , $posY + 1] _;вправо
]
AutoItSetOption("WinTitleMatchMode", 2)
WinSetState("classname=" & $winClass, $winTitle, @SW_SHOWNORMAL)
WinActivate($winTitle)
$buttonX = $posX + 158
$buttonY = $posY + 540
$buttonColor = PixelGetColor($buttonX, $buttonY)
MouseMove($posX + 158, $posY + 540)
MouseClickDrag("left", $posX + $width, $posY, $posX + 1, $posY + $height -1)
For $c in $color
$coord = PixelSearch($frameX0, $frameY0, $frameX1, $frameY1, $c)
While Not @error
MouseClick("left", $coord[0], $coord[1] + 5)
Sleep(1000)
If PixelGetColor($buttonX, $buttonY) <> $buttonColor Then MouseClick("left", $posX + 363, $posY + 429)
$coord = PixelSearch($frameX0, $frameY0, $frameX1, $frameY1, $c)
WEnd
Next
HotKeySet("{F10}", "Quit")
HotKeySet("{Pause}", "TogglePause")
Func Quit()
MsgBox(0, "Bye!!!", "See you later )))", 1)
Exit
EndFunc ;Quit
Func TogglePause()
If Not $pause Then
$pause = True
MsgBox(0, "Pause", "Paused", 1)
Else
$pause = False
MsgBox(0, "Pause", "Continue", 1)
EndIf
EndFunc ;TogglePause
Func _restart_script()
MouseClick("left", $posX - 1, $posY - 1)
Sleep(200)
Send("{F5}")
Sleep(20000)
If @Compiled = 1 Then
Run(FileGetShortName(@ScriptFullPath))
Else
Run(FileGetShortName(@AutoItExe) & " " & FileGetShortName(@ScriptFullPath))
EndIf
Exit
EndFunc ;==>_restart_script
While 1
While $pause
Sleep(100)
WEnd
WinSetState("classname=" & $winClass, $winTitle, @SW_SHOWNORMAL)
WinActivate($winTitle)
If PixelGetColor($buttonX, $buttonY) <> $buttonColor Then _restart_script()
MouseClick("left", $posX + 180, $posY + 530)
Sleep(2000)
MouseClick("left", $posX + 53, $posY + 144)
Sleep(200)
MouseClick("left", $posX + 53, $posY + 144)
Sleep(200)
For $i = $mapNo - 1 To 0 Step -1
MouseClick("left", $posX + 678, $posY + 144)
Sleep(200)
Next
MouseClick("left", $stationButtonX, $stationButtonY)
Sleep(1000)
While Hex(PixelGetColor($posX + 617, $posY + 549), 6) = "438F29"
MouseClick("left", $posX + 609, $posY + 538)
Sleep(1000)
MouseClick("left", $posX + 300, $posY + 630)
Sleep(1000)
WEnd
Sleep(1000)
MouseClick("left", $posX + 677, $posY + 109)
For $i = 0 To 5
MouseClickDrag("left", $actions[$i][0], $actions[$i][1], $actions[$i][2], $actions[$i][3])
For $c in $color
$coord = PixelSearch($frameX0, $frameY0, $frameX1, $frameY1, $c)
While Not @error
MouseClick("left", $coord[0], $coord[1] + 5)
Sleep(1000)
If PixelGetColor($buttonX, $buttonY) <> $buttonColor Then
MouseClick("left", $posX + 363, $posY + 429)
Sleep(1000)
EndIf
$coord = PixelSearch($frameX0, $frameY0, $frameX1, $frameY1, $c)
WEnd
Next
For $c = 0 To 2
If $bad[$i][$c][0] <> 0 And $bad[$i][$c][1] <> 0 And PixelGetColor($bad[$i][$c][0], $bad[$i][$c][1]) <> $bad[$i][$c][2] Then
MouseClick("left", $bad[$i][$c][0], $bad[$i][$c][1])
Sleep(2000)
MouseClick("left", $posX + 322, $posY + 415)
Sleep(500)
EndIf
Next
Next
Sleep($timeLoading)
WEnd
Этот бот не "ломает" игру.
Он не сделает из Вас супер пользователя.
Бот лишь следит за тем, что бы у Вас всё жило и цвело.
Вам придется самостоятельно выбирать стратегию поведения, выбирать локомотивы, ремонтировать их (пока я не включил этот момент в поведение бота)
Бот лишь собирает по карте синенькие кружочки и отправляет локомотивы, а так же удаляет всяких бандитов, страусов, мусор и прочие неприятности.
В принципе, для него было бы неплохо отвести отдельную виртуальную машину, но это тема уже для другого разговора )))
Велкам )))
Ругайте, предлагайте, дорабатывайте.
Поглядим, увидим )))
Обновил бота.
Устранил устранил "залипание" при открытии оповещалок.
Научил реагировать на обрыв связи с сервером.
Тестим, не стесняемся ))
Обновление.
Оптимизирован поиск денег и ремонта зданий на карте.
Оптимизирован поиск происшествий.
Оптимизирован пуск поездов со станции.
Внимание!!!
Добавлены переменные:
Время погрузки на станции:
Код:
$timeLoading = 1000 * T
,где T это количество секунд времени погрузки (мин * 60 + сек)
Время в пути
Код:
$timeTravel = 1000 * Т
,где T это количество секунд в пути (час * 60 * 60 + мин * 60 + сек)
$timeTravel - пока не используется
Последний раз редактировалось Hermein; 21.12.2011 в 00:25 .
Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 23:23 .