Что нового

Скрипт для автоматизации игрового процесса, по добычи полезных ископаемых

Enemy

Знающий
Сообщения
42
Репутация
7
Скрипт ориентирован на начинающих игроков в системах 1.0 - там нет красных крестиков (НПЦ - неписи)
Работает по закладкам (bookmarks - буки).
Маленький циклический скрипт, выкладываю на суд :smile:
Взят с форума и переделан немного.
v. 0.2
- Добавлена проверка на включение звездной карты при запуске бота, и протаскивание её в сторону - особая благодарность за скрипт Colors
v. 0.1
- Добавлена проверка карго во время работы стрипов, если карго заполнилось, сразу летим домой, а не включаем опять выключенные стрипы
Оверью должно быть включено на астероидах и буки открыты

Код:
Opt("PixelCoordMode", 0) ;Отсчет координат пикселей от левого верхнего угла клиентской части окна
Opt("MouseCoordMode", 0) ;Отсчет координат мыши от левого верхнего угла клиентской части окна
Global $CharName="________";здесь имя вашего чара в еве
Global $Paused
Global $UdocKpositionX = 17;х - координата кнопки выхода с дока
Global $UdocKpositionY = 627;у - координата кнопки выхода с дока
Global $MenUpositionX = 61;х и у - координаты меню где раньше был треугольник, и теперь 4 белых полосы
Global $MenUpositionY = 22

HotKeySet("{PAUSE}", "TogglePause")
HotKeySet("{ESC}", "Terminate")
HotKeySet("+!d", "ShowMessage")

WinActivate("EVE - "&$CharName);активируем окно евы
While 1
checkstarmap();функция проверки и включения карты звезд
undock();функция отстыковки
Belt_Warp();варпаемся на белт
mine();добываем
Doc();стыкуемся
uncargo();разгружаемся
WEnd

Func checkstarmap();запускаем её
    WinActivate("EVE - "&$CharName);активируем окно евы
    If CheckPixel(378, 80, 379, 81, 0x00, 0x00)==0 Then;если в заданных координатах (любую свободную область) не найдены полностью черные точки, то выполняем
		starmapon();эту функцию		
		Sleep(1000)
		_MouseWheel()
	Else;иначе
		ToolTip("Звездная карта включена",100,30);карта звезл включена
		Sleep(100)
	EndIf
EndFunc

Func starmapon();функция включения карты
	Send("^{F10}");жмакаем в еве ф10
	Sleep(3000);ждем пока загрузится, на медленных компах можно побольше задержку
	If CheckPixel(378, 80, 379, 81, 0x00, 0x00)==0 Then;проверяем еще раз, потому что может включиться карта солнечной системы
		sleep(100);ждем
		MouseClick("left", Random(690, 690+10), Random(128, 128+5), 1, 20);и нажимаем нопку Star Map (Звездная карта) в World Map Control Panel (Панель контроля за картой мира) эта панель у меня практический посередине
		sleep(1000)
	Else
		ToolTip("Включилась карта звезд",100,30);если чек пиксел показал что у нас там все черное значит карта включена
		_MouseWheel()
	EndIf
EndFunc

Func _MouseWheel();если мы на карте то желательно открутить звезды в центр :)
;Эта функция выполняется только в NT, 2000, XP и более поздних ОС.
	sleep(100)
	;далее внимательно смотрим комент к MouseMove
	MouseMove(Random(418, 418+20), Random(111, 111+20), 20);Ведём курсор на пустое место на карте, ГЛАВНОЕ ЧТОБЫ НЕ БЫЛ В КАКИХ-ТО ОБЛАСТЯХ, только на карте
	Sleep(1000)
	MouseWheel ("up", 50);откручиваем колесо мыши до конца
	Sleep(100)
	MouseClick("left", Random(890, 890+10), Random(101, 101+5), 1, 20);сворачиваем World Map Control Panel (Панель контроля за картой мира), чтобы не мешала
	Sleep(1000)
	MouseClickDrag("left", 44, 6, 1326, 634, 20);тянем карту со звездами, чтобы совсем их убрать с карты, зажимаем мышку в левом верхнем углу и тянем в нижний правый
EndFunc

Func CheckPixel($x1, $y1, $x2, $y2, $light, $light2=0xFF)
Local $i, $j, $pixelfound=0, $PTcolor, $l1t, $l2t
$i=$y1
if $light>0xFF then
 $l1t=TrimColor($light)
else
 $l1t=$light
endif
if $light2>0xFF then
  $l2t=TrimColor($light2)
else
 $l2t=$light2
endif
While $i<=$y2 and $pixelfound==0
$j=$x1
While  $j<=$x2 and $pixelfound==0
$PTcolor=TrimColor("0x"&Hex(PixelGetColor($j, $i), 6))
if $PTcolor>=$l1t and $PTcolor<=$l2t then
$pixelfound=1
endif
$j+=1
WEnd
$i+=1
WEnd

return $pixelfound
EndFunc ; =>CheckPixel

Func TrimColor($TargetTrim)
;cs TrimarkColor - Comment Start
;Исползуется для получения из цвета в формате RGB значение яркости пикселя. Возвращает значение от 0 до 255.
;Скорость:
;Функция выполняется за ~0.06-0.10 мс.
;(с) Archy26 :)
;#ce TrimarkColor - Comment End
Dim $a, $a_fin
$a = Hex($TargetTrim, 6)
$a_fin = (Dec(StringTrimRight($a, 4)) + Dec(StringTrimLeft(StringTrimRight($a, 2), 2)) + Dec(StringTrimLeft($a, 4)))/3
$TargetTrim = Round($a_fin, 0)
Return $TargetTrim
EndFunc

Func Undock()
    WinActivate("EVE - "&$CharName)
    Do
		If cargo()=2 Then;если трюм в шипе полон то разгружаемся
			uncargo()
        Sleep(500)
		EndIf
		MouseClick("left", Random($UdocKpositionX, $UdocKpositionX+10), Random($UdocKpositionY, $UdocKpositionY+10), 1, 20);выходим с дока
		sleep(2000)
	Until StateCheck()=1   
Sleep(1000)   
EndFunc

Func cargo()
    WinActivate("EVE - "&$CharName)
    PixelSearch(370, 207, 374, 207, 0x015167, 10);ищем в полоске трюма шипа голубые пикселы, тест на полноту ;)
    If @error Then
        ToolTip("трюм не заполнен",100,0)
        return 0
    Else
        ToolTip("трюм полон",100,30)
        return 2
    EndIf
EndFunc

Func uncargo();таскаем все итемы с карго в док
    sleep (random(4000,5000))
	PixelSearch(252, 359, 252, 359, 0x242428, 2);ждем загрузки, проверяем цвет карго
	MouseClick("right",312,360,1,10);жмем точку 312х360 правой кнопкой мыши
    sleep (random(350,1000))
    MouseClick("left",336,367,1,10);выбираем селект алл
    sleep (random(1000,2000))
    MouseClickDrag("left", Random(67, 67+20), Random(246, 246+20), Random(441, 441+20), Random(591, 591+20), 20);тащим всё карго в док
    sleep (random(1500,3000))
EndFunc

Func StateCheck()
    PixelSearch(20, 626, 20, 626, 0xFFD342, 2) ; ищем этот цвет на кнопке "выход с дока", тогда мы в доке
If @error Then
    PixelSearch(64, 48, 64, 64, 0xFFA600, 2) ; проверка на космос
    If @error Then
        ToolTip("В переходе",0,0)
        Sleep(1000)
        Return 0
        Else
    Return 1
    ToolTip("В космосе",0,0)
    Sleep(1000)
    EndIf
Else
    Return 2
    ToolTip("В доке",0,0)
    Sleep(1000)
EndIf
EndFunc

Func StopShip()
    Send("^{SPACE}")
    sleep (random(1500,2300))
EndFunc

Func Belt_Warp()
Sleep(1000)
;MouseClick("left", 214, 157, 1, 20)
    Menu_Asteroid_Belts()
    ;MouseClick("left", 686, 54, 1, 20)
    ;Sleep(5000)
    Do
        ToolTip("Подготовка к варпу",0,0)
        Sleep(3000)
    Until WarpCheck()=0
    Sleep(1000)
EndFunc

Func Menu_Asteroid_Belts();открываем меню с белтами
    WinActivate("EVE - "&$CharName);Активировать окно евы
    ;Menu();открываем меню 
        sleep (random(500,800))
		MouseClick("right", 1060, 514, 1, 20)
		sleep (random(1000,1500))
		MouseClick("left", 1088, 509, 1, 20)
		sleep(100)
EndFunc

Func Menu()
    WinActivate("EVE - "&$CharName);Активировать окно евы
        MouseClick("left", $MenUpositionX, $MenUpositionY, 1, 5)
EndFunc

Func WarpCheck()
    PixelSearch(601, 446, 601, 446, 0xBFBFBF, 5)
    If @error Then
        Return 0
        ToolTip("Варп окончен",0,0)
        Sleep(100)
    Else
        Return 1
        ToolTip("В варпе",0,0)
        Sleep(100)
    EndIf
EndFunc

Func mine()
    WinActivate("EVE - "&$CharName)
    ;sleep(500)
    ;droneLaunch()
    sleep(500)
        while cargo()<2
            WinActivate("EVE - "&$CharName)
                MouseClick("left", 1170, 160, 1, 20);выбираем цель
				If dist_chek()=0 Then
                    asteroid_aproch()
                    sleep(500)
                Else
                    lock_asteroid()
                EndIf
            sleep (100)
			$cargo = cargo()
            If $cargo = 2 Then ExitLoop
            hiSlot_3()
            sleep (100)
            $cargo = cargo()
            If $cargo = 2 Then ExitLoop
            hiSlot_2()
            sleep (100)
            $cargo = cargo()
            If $cargo = 2 Then ExitLoop
            hiSlot_1()
        WEnd
        Sleep(500)
    ;DroneScoop()
    Sleep(1000)
EndFunc

Func dist_chek()
    PixelSearch(1130, 157, 1143, 157, 0x797979, 5);поиск пикселя цифры перед дистанцией
    If @error Then
        PixelSearch(1172, 157, 1172, 157, 0x4C4C4C, 5);ищем букву 'k' в километрах
        If @error Then
            Return 0 ; дальше  10km
        EndIf
        Return 1 ; буквы k нет, значит у нас все в метрах
    Else
        Return 2 ;ближе 10 км но дальше 99м
    EndIf  
EndFunc

Func asteroid_aproch()
    Sleep(200)
    if checkasteroid()=0 then
        Sleep(200)
        Do
            Sleep(200)
            if dist_chek()=0 then
                sleep (random(500,800))
                MouseClick("left", 1158, 158, 2, 2)
                Sleep (500)
            EndIf
            Sleep(200)
        until dist_chek()<>0
        StopShip()
        Sleep(1000)
    else
        ToolTip("нечего копать",0,0)
    EndIf
EndFunc

Func checkasteroid()
    Overwiev_asteroid()
    ;Sleep(200)
    ;MouseClick("left", 821, 181, 1, 2)
    Sleep(200)
    PixelSearch(1133, 143, 1135, 143, 0x000000, 5)
    If @error Then
        Return 0
        ToolTip("астероид найден",200,0)
        Sleep(1000)
    Else
        Return 1
        ToolTip("астероидов нет",200,0)
        Sleep(1000)
    EndIf
EndFunc

Func Overwiev_asteroid();переключаем оверью астероидов
sleep (random(250,500))
MouseClick("left", Random(1142, 1142+8), Random(119, 119+5), 1, 20)
EndFunc

Func lock_asteroid()
    If target_1()=0 Then
        Do
            MouseClick("left", 1170, 160, 1, 20)
            sleep (random(500,800))
            MouseClick("left", 1210, 73, 1, 20)
            sleep (random(5000,8000))
        Until target_1()=1
        Else
    EndIf
EndFunc

Func target_1()
    PixelSearch(967, 78, 1022, 78, 0x808080, 50)
    If @error Then
        ToolTip("нет цели",0,0)
        Sleep(500)
        return 0
    Else
        ToolTip("цель захвачена",0,0)
        Sleep(500)
        return 1
    EndIf
EndFunc

Func hiSlot_3()
    sleep (random(550,800))
	PixelSearch(874, 566, 876, 566, 0x000000, 10)
    If @error Then
        ToolTip("хайслот 3 активен",0,15)
        return 1
    Else
        MouseClick("left", 878, 543, 1, 20)
		;Send("{F1}")
        ToolTip("хайслот 3 не активен - включаю",0,0)
        return 0
	EndIf
EndFunc

Func hiSlot_2()
    sleep (random(550,800))
	PixelSearch(824, 566, 825, 565, 0x000000, 10)
    If @error Then
        ToolTip("хайслот 2 активен",0,15)
        return 1
    Else
        MouseClick("left", 826, 544, 1, 20)
		;Send("{F1}")
        ToolTip("хайслот 2 не активен - включаю",0,0)
        return 0
	EndIf
EndFunc

Func hiSlot_1()
    sleep (random(550,800))
	PixelSearch(772, 566, 774, 566, 0x000000, 10)
    If @error Then
        ToolTip("хайслот 1 активен",0,15)
        return 1
    Else
        MouseClick("left", 774, 542, 1, 20)
		;Send("{F1}")
        ToolTip("хайслот 1 не активен - включаю",0,0)
        return 0
	EndIf
EndFunc



Func Overwiev_belt()
MouseClick("left", 935, 142, 1, 2)
Sleep(500)
EndFunc

Func Overwiev_npc()
MouseClick("left", 900, 142, 1, 2)
Sleep(500)
EndFunc

Func Overwiev_default()
MouseClick("left", 803, 142, 1, 2)
Sleep(500)
EndFunc

Func DroneScoop()
    MouseClick("right", 530, 167, 1, 10)
    Sleep(500)
    MouseClick("left", 570, 235, 1, 10)
EndFunc

Func DroneLaunch()
MouseClick("right", 530, 147, 1, 10)
Sleep(500)
MouseClick("left", 576, 163, 1, 10)
EndFunc


Func Doc()
    WinActivate("EVE - "&$CharName);Активировать окно евы
    ;Menu_Station()
    ;Sleep(500)
    ;MouseMove(463, 122,10)
    sleep (random(550,800))
    MouseClick("right", 1090, 496, 1, 20)
	sleep (random(1000,1800))
	MouseClick("left", 1117, 554, 1, 20)
        Do
            ToolTip("Направляюсь на станцию",0,0)
            Sleep (2000)
        ;       If WarpCheck()<>1 Then
        ;       Doc()
        ;       EndIf
        Until StateCheck()=2
        Sleep(500)
        ;Send("{F10}")
    Sleep(1000)
EndFunc


   
Func Menu_planets()
    WinActivate("EVE - "&$CharName);Активировать окно евы
    Menu()
        MouseClick("left", $MenUpositionX+98, 88, 1, 2)
EndFunc
   
Func Menu_Stargates()
    WinActivate("EVE - "&$CharName) ;Активировать окно евы
    Menu()
        MouseClick("left", $MenUpositionX+98, 103, 1, 2)
EndFunc
   
Func Menu_Station()
    WinActivate("EVE - "&$CharName) ;Активировать окно евы
    Menu()
        MouseClick("left", $MenUpositionX+98, 118, 1, 10)
EndFunc
       

   
Func TogglePause()
    $Paused = NOT $Paused
    While $Paused
        sleep(100)
        ToolTip('Script is "Paused"',0,0)
    WEnd
    ToolTip("")
EndFunc

Func Terminate()
    Exit 0
EndFunc

Func ShowMessage()
    MsgBox(4096,"","This is a message.")
EndFunc
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Да, ExitLoop тебе в помощь.
Твое cargo() в случае заполненности трюма возвращает 2.
У тебя в скрипте идет:
Код:
cargo()
            hiSlot_3()
            sleep (200)
            cargo()
            hiSlot_2()
            sleep (200)
            cargo()
            hiSlot_1()

И независимо от того какой результат будет иметь cargo() ничего не будет предпринято пока цикл не завершится. Разумно было бы сделать так:
Код:
$cargo = cargo()
            If $cargo = 2 Then ExitLoop
            hiSlot_3()
            sleep (200)
            $cargo = cargo()
            If $cargo = 2 Then ExitLoop
            hiSlot_2()
            sleep (200)
            $cargo = cargo()
            If $cargo = 2 Then ExitLoop
            hiSlot_1()

А если учесть что твои функции hiSlot_1_2_3 не такие уж и продолжительные по времени, было бы разумно просто 1 раз проверить состояние трюма и далее обработать все 3 хайслота:
Код:
$cargo = cargo()
            If $cargo = 2 Then 
                ExitLoop
            ElseIf $cargo = 0 Then
                hiSlot_3()
                sleep (200)
                hiSlot_2()
                sleep (200)
                hiSlot_1()
            EndIf
 
Автор
E

Enemy

Знающий
Сообщения
42
Репутация
7
Belfigor сказал(а):
Да, ExitLoop тебе в помощь.
Твое cargo() в случае заполненности трюма возвращает 2.
У тебя в скрипте идет:
Код:
cargo()
            hiSlot_3()
            sleep (200)
            cargo()
            hiSlot_2()
            sleep (200)
            cargo()
            hiSlot_1()

И независимо от того какой результат будет иметь cargo() ничего не будет предпринято пока цикл не завершится. Разумно было бы сделать так:
Код:
$cargo = cargo()
            If $cargo = 2 Then ExitLoop
            hiSlot_3()
            sleep (200)
            $cargo = cargo()
            If $cargo = 2 Then ExitLoop
            hiSlot_2()
            sleep (200)
            $cargo = cargo()
            If $cargo = 2 Then ExitLoop
            hiSlot_1()

А если учесть что твои функции hiSlot_1_2_3 не такие уж и продолжительные по времени, было бы разумно просто 1 раз проверить состояние трюма и далее обработать все 3 хайслота:
Код:
$cargo = cargo()
            If $cargo = 2 Then 
                ExitLoop
            ElseIf $cargo = 0 Then
                hiSlot_3()
                sleep (200)
                hiSlot_2()
                sleep (200)
                hiSlot_1()
            EndIf
спасибо. подойдет второй вариант, завтра попробую... третий не получится, потому что когда карго заполняется, некоторые стрипы отключаются, и в это время проверка на включение идет и он проходит по стрипам их включает и потом улетает :smile: поэтому и пытался туда карго вставить
а почему $cargo = cargo() с знаком бакса? и потом идет моя функция?
а и еще забыл спросить, а как можно сделать чтобы по умолчанию все передвижения мыши были рандомны, т.е. где-то прописать одну функцию, и потом переменную вставлять в код?
и опять про мышь, как сделать чтобы мышка рандомно щелкала по кнопкам?
Спасибо! :smile:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
в переменную $cargo записывается результат возвращаемый функцией cargo()
с рандомной областью кликов как-то так:
Код:
Func _MouseClick($button, $x, $y, $clicks, $speed)
    MouseClick($button, Random($x, $x+10), Random($y, $y+10), $clicks, $speed)
EndFunc

С рандомным нажатием кнопок так же, задаешь на какие кнопки хочешь тыкать и просто рандомишь результат.
 
Автор
E

Enemy

Знающий
Сообщения
42
Репутация
7
v0.2 - Добавил функцию включения звездной карты
в первом посту
 

Xaero01

Новичок
Сообщения
4
Репутация
0
Какие настройки необходимо сделать? Разрешение экрана , расположение овервью, карго, буки?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Логично предположить что режим карты + стандартное расположение окон + черный фон.
Но имея исходник более логичным будет заглянуть внутрь и увидеть все своими глазами.
 
Автор
E

Enemy

Знающий
Сообщения
42
Репутация
7
У меня разрешение 1348 х 674 - разрешение не стандартное т.к. запущен бот на VMWare
Вообще стоит посмотреть исходник и отредактировать его под свои нужды. займет дня 2 максимум, там все просто )
 

Lexx98

Продвинутый
Сообщения
272
Репутация
73
У меня тоже на WMware но я тупо там выставил 1024*768 и не имею проблем никаких. Подумаешь, не целиком содержимое отображается на мониторе, если на весь экран в ВМ не входить (на монике тоже 1024*768). Главное что работает.
 
Автор
E

Enemy

Знающий
Сообщения
42
Репутация
7
SirMaksFromEho сказал(а):
У меня тоже на WMware но я тупо там выставил 1024*768 и не имею проблем никаких. Подумаешь, не целиком содержимое отображается на мониторе, если на весь экран в ВМ не входить (на монике тоже 1024*768). Главное что работает.
Ну это дело каждого ) у меня на хосте разрешение 1366х768
768 "-" (минус) панель пуски, потом в виртуале "-" панель пуска и минус само окно виртаулки, вот 1024х768 получается что видимое окно на 98 пикселей обрезано )
 
Верх