[me=Zuzik]подумывает а не выложить ли мне своего недобота на суд людской...[/me]
А если и выкладывать до или после исправления найденых мной недоработок) :whistle:
Добавлено:
Сосбтвенно вот, тупо летит в белт и тупо копает.
Вроде работает отостиельно неплохо,
НО главный враг - лаг -> буду увеличивать кол-во датчиков, тк из за лага при открытии овервью порой пытается апрочить соседний белт)(в худшем случае)
Плюс сейчас скрипт интегрирован в гуи(думал так его связать, но сейчас нажимая по 10 раз на кнопку стоп понимаю, что зря)
Так что буду совершенствовать датчики + распаралеливание датчиков гуи и бота через флаги.
Добавлено:
ах да насчёт пкм меню согласен, но тут дело принципа каов программер таков и бот
А если и выкладывать до или после исправления найденых мной недоработок) :whistle:
Добавлено:
Сообщение автоматически объединено:
Сосбтвенно вот, тупо летит в белт и тупо копает.
Вроде работает отостиельно неплохо,
НО главный враг - лаг -> буду увеличивать кол-во датчиков, тк из за лага при открытии овервью порой пытается апрочить соседний белт)(в худшем случае)
Плюс сейчас скрипт интегрирован в гуи(думал так его связать, но сейчас нажимая по 10 раз на кнопку стоп понимаю, что зря)
Так что буду совершенствовать датчики + распаралеливание датчиков гуи и бота через флаги.
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <ICQ.au3>
#include <WindowsConstants.au3>
;Флаги
$eve="Выключен"
$st=0
;Рабочие переменные
$t=0
$wh=0
$cg=0
$belt=0
$mine=0
$lock=0
$mineactive=0
;настройки
dim $winp[4]
Opt("MouseCoordMode", 2)
Opt("PixelCoordMode", 2)
$winn="EVE" ; название окна с которм работаем, задел на много окнность если будет таковая
$tdelta=5000;период работы бота
#Region ### START Koda GUI section ### Form=
$Form1_1 = GUICreate("EvE bot by Zuzik", 187, 640, 0, 0)
$Group1 = GUICtrlCreateGroup("Аська", 8, 80, 169, 129)
$Label1 = GUICtrlCreateLabel("Хост", 16, 96, 68, 17)
$Checkbox1 = GUICtrlCreateCheckbox("Подключён", 16, 142, 97, 17)
GUICtrlSetState($Checkbox1, $GUI_DISABLE)
$Input1 = GUICtrlCreateInput("номер хоста, тут должен быть мой номер но не скажу =Р", 16, 117, 121, 21)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button1 = GUICtrlCreateButton("Аська", 96, 168, 75, 25)
$Button2 = GUICtrlCreateButton("Отключить", 16, 168, 75, 25)
GUICtrlSetState($Button2, $GUI_DISABLE)
$Edit1 = GUICtrlCreateEdit("", 8, 544, 161, 81)
GUICtrlSetData(-1, "")
$Button3 = GUICtrlCreateButton("Запуск", 8, 8, 75, 25)
$Group2 = GUICtrlCreateGroup("Настройки", 8, 208, 169, 81)
$Radio1 = GUICtrlCreateRadio("Radio1", 16, 232, 57, 17)
$Radio2 = GUICtrlCreateRadio("Radio2", 16, 256, 113, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Progress1 = GUICtrlCreateProgress(8, 512, 158, 17)
$Group3 = GUICtrlCreateGroup("Инфа", 8, 304, 169, 201)
$Label2 = GUICtrlCreateLabel("Статус:", 16, 320, 41, 17)
$Label3 = GUICtrlCreateLabel("Где:", 16, 344, 25, 17)
$Label4 = GUICtrlCreateLabel("Карго:", 16, 368, 37, 17)
$State = GUICtrlCreateInput($eve, 72, 320, 97, 21)
GUICtrlSetState(-1, $GUI_DISABLE)
$Where = GUICtrlCreateInput("", 72, 344, 97, 21)
GUICtrlSetState(-1, $GUI_DISABLE)
$Cargo = GUICtrlCreateInput("", 72, 368, 97, 21)
GUICtrlSetState(-1, $GUI_DISABLE)
$Input5=GUICtrlCreateInput("", 72, 392, 97, 21)
GUICtrlSetState(-1, $GUI_DISABLE)
$Label5 = GUICtrlCreateLabel("Локал", 16, 392, 36, 17)
$Input6=GUICtrlCreateInput("", 72, 416, 97, 21)
GUICtrlSetState(-1, $GUI_DISABLE)
$Label6 = GUICtrlCreateLabel("Модули", 16, 416, 42, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button4 = GUICtrlCreateButton("Стоп", 104, 8, 75, 25)
GUICtrlSetState($Button4, $GUI_DISABLE)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
$status = 0
$i=0
Func Calibr($win);функция калибровки окна, аппендиск до работы с opt
WinActivate($win)
dim $find[4]
$find=WinGetPos($win)
$find[0]=$find[0]+4
$find[1]=$find[1]+28
return $find
EndFunc
Func tabelect($tab); переход по табам в овервью, табы пронумерованны соответсвующим образом
MouseClick("left",625+18*($tab-1),147)
EndFunc
Func ClearCargo($win); очистка карго
WinActivate($win)
MouseClick("left",540,470)
Send("^a")
MouseClickDrag ( "Left", 540, 470, 510, 677)
EndFunc
Func DockCheck($win);проверка дока по кнопке андока
WinActivate($win)
$c=PixelSearch (13,736,18,741,16765499,50)
If Not @error Then
return $c
Else
Return 0
EndIf
EndFunc
Func minecheck($win) ; проверка активности копательных модулей по иконке возле лока, до этого проверялось по иконке но глючило
WinActivate($win)
$c=PixelSearch (543,46,547,50,0xbe9253,10)
If Not @error Then
return 1
Else
Return 0
EndIf
EndFunc
Func SpaceState($win) ; проверяем у белта мы или у станции,
; в случае первого в закладке будет равномерный серый цвет в зоне поиска, а если там что-то есть то выводит ошибку.
;Подобный способ также работает если белт скопан в ноль
WinActivate($win)
tabelect(3)
sleep(2000)
$c=PixelSearch (690,164,695,169,0xbbbcbe,10)
If Not @error Then
return 1
Else
Return 0
EndIf
EndFunc
Func CargoCheck($win) ; проверка трюма, значения выводятся в процентах, нужно для дальнейших идей
WinActivate($win)
$c=PixelSearch (650,432,747,433,0x081919,50)
If Not @error Then
$f=Round ((($c[0]-650)/98)*100)
Return $f
Else
Return 100
EndIf
EndFunc
Func beltcount($win) ; считаем белты в системе
WinActivate($win)
$hstart=179
$m=0
$i=0
While $m=0
$x=PixelSearch (617,$hstart,631,$hstart+13,0xffffff,20)
If Not @error Then
$i=$i+1
$hstart=$hstart+20
Else
$m=1
EndIf
WEnd
return $i
EndFunc
Func UnDock($win) ; ищем кнопку андока и нажимаем её, сама старая функция, единственная что осталась от макроса, работает и её не трогаю
WinActivate($win)
$c=PixelSearch (13,736,18,741,16765499,50)
If Not @error Then
MouseClick("left",$c[0],$c[1])
return 1
Else
Return 0
EndIf
EndFunc
Func itemclick($win,$to,$item) ; гибридизировная функция для работы с овервью и селектед итемс, в зависимости от параметра $to
if $to=0 then
MouseClick("left",630+33*($item-1),90)
Else
MouseClick("left",710,185+20*($to-1))
Sleep(500)
GUICtrlSetData($Edit1,@HOUR&":"&@MIN&":"&@SEC&"->"&"to "&$to&" item "&$item&@CRLF, 1)
MouseClick("left",630+33*($item-1),90)
EndIf
EndFunc
Func itemactive($win, $item) ; проверка доступности пунктов меню селектед итемс
WinActivate($win)
$c=PixelSearch (625+33*($item-1),85,640+33*($item-1),105,0x959595,10)
If Not @error Then
return 1
Else
Return 0
EndIf
EndFunc
Func checkspaceun($win) ; проверка дока андока
; сделана так потому, после исчезновения черноты какое-то время ещё не работает гуи, он выходит постепенно
; на андоке работает, но с доком пока нет, проверяет по элементу на левом меню, которое во время дока появляется раньше
; полной загрузки, введу доп проверку на черноту в рабочей области
$y=PixelSearch (14,12,16,14,0xdedede,10)
if Not @error Then
return 1
Else
Return 0
EndIf
EndFunc
Func warptest($win)
; проверка варпа по надписи варпа, немного глючит при доке на станцию, тк надпись варпа появлется не сразу
; но глючит терпимо, в стиле нервоза, те пытается повтороно отправить корабль на станцию, куда он летит
WinActivate($win)
$y=PixelSearch (441,539,443,541,0xbbbcbe,10)
if Not @error Then
return 1
Else
Return 0
EndIf
EndFunc
Func chat($host) ; управление ботом через аську, простите но тут не покажу)
; лишь один пункт для понятия принципа работы
$msg = ICQReadMsg()
If $msg<>0 Then
if $msg[0]=$host Then
Select
Case $msg[1]="/h"
ICQSendMsg($msg[0],"Справка")
Case Else
ICQSendMsg($msg[0],"[" & "Команда не найдена" & "]: " & $msg[1])
EndSelect
Else
ICQSendMsg($host,"Внимание Чужак!!! В аське ->"&$msg[0]&" -> "&$msg[1])
GUICtrlSetData($Edit1,@HOUR&":"&@MIN&":"&@SEC&"->"&"Чужак в аське!!!!!"&@CRLF&"--------------"&@CRLF&$msg[0]&" -> "&$msg[1]&@CRLF&"--------------"&@CRLF, 1)
EndIf
EndIf
EndFunc
Func Terminate($host)
ICQSendMsg($host,"Закрываю соединение - 2 секунды")
Sleep(2000)
ICQSendMsg($host,"Закрыто")
ICQClose()
EndFunc
While 1 ; бот интегрирован в цикл гуи, но как оказалось ошибочно.
; на данном этапе датчики и выполнение скрипта свзяанны, но теперь хочу чтоб работали паралельно
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE ; начало обработки гуи
$status=0
Exit
Case $Button1
$status = ICQConnect('login.icq.com:5190','*******2','пароль',0)
GUICtrlSetState($Input1, $GUI_DISABLE)
GUICtrlSetState($Button1, $GUI_DISABLE)
GUICtrlSetState($Button2, $GUI_ENABLE)
$Host=GUICtrlRead($Input1)
GUICtrlSetData($Edit1,@HOUR&":"&@MIN&":"&@SEC&"->"&"Аська включена"&@CRLF, 1)
ICQSendMsg($host,"я вошёл")
Case $Button2
GUICtrlSetState($Button2, $GUI_DISABLE)
GUICtrlSetState($Button1, $GUI_ENABLE)
GUICtrlSetState($Input1, $GUI_ENABLE)
Terminate($host)
$status=0
GUICtrlSetData($Edit1,@HOUR&":"&@MIN&":"&@SEC&"->"&"Аська Отключена"&@CRLF, 1)
Case $Button3
If ProcessExists ( "ExeFile.exe" )=0 Then
GUICtrlSetData($Edit1,@HOUR&":"&@MIN&":"&@SEC&"->"&"EVE незапущена"&@CRLF, 1)
Else
GUICtrlSetData($Edit1,@HOUR&":"&@MIN&":"&@SEC&"->"&"EVE запущена"&@CRLF, 1)
$eve="Включён"
$st=1
GUICtrlSetState($Button3, $GUI_DISABLE)
GUICtrlSetState($Button4, $GUI_ENABLE)
GUICtrlSetData($State,$eve, "")
WinMove($winn,"",204,0)
GUICtrlSetData($Edit1,@HOUR&":"&@MIN&":"&@SEC&"->"&"Калибровка"&@CRLF, 1)
$winp=Calibr($winn)
$st=1
$x=DockCheck($winn)
if $x=0 Then
$wh="в космосе"
Else
$wh="в доке"
EndIf
GUICtrlSetData($Where,$wh, "")
$cg=CargoCheck($winn)
GUICtrlSetData($Cargo,$cg&"%", "")
$t=TimerInit()
GUICtrlSetData($Edit1,@HOUR&":"&@MIN&":"&@SEC&"->"&"Откалиброванно"&@CRLF, 1)
GUICtrlSetData($Edit1,@HOUR&":"&@MIN&":"&@SEC&"->"&"Бот включён"&@CRLF, 1)
EndIf
Case $Button4
GUICtrlSetState($Button4, $GUI_DISABLE)
GUICtrlSetState($Button3, $GUI_ENABLE)
$eve="Выключен"
$st=0
GUICtrlSetData($State,$eve, "")
GUICtrlSetData($Edit1,@HOUR&":"&@MIN&":"&@SEC&"->"&"Бот отключён"&@CRLF, 1)
EndSwitch ; конец обработки
If $status=1 Then ; запуска торможение аськи
GUICtrlSetState($Checkbox1, $GUI_CHECKED)
chat($host)
Else
GUICtrlSetState($Checkbox1, $GUI_UNCHECKED)
EndIf
If $st=1 Then ;собственно сам бот
if TimerDiff($t)>=$tdelta Then
$t=TimerInit()
$cg=CargoCheck($winn) ; 1-ый параметр который командует балом
GUICtrlSetData($Cargo,$cg&"%", "")
$x=DockCheck($winn) ; 2-ой
if ($x=0) Then ; обработка если мы в космосе
$wh="в космосе"
$t=warptest($winn) ; проверяем в прыжке мы или нет
$y=checkspaceun($winn) ; проверяем докаемся или андокаемся
if $y=1 And $t=0 then
If $belt=0 then ; если мы ещё не в белте
$y=SpaceState($winn) ; то проверяем в белте ли мы
If $y=1 then
$belt=1
GUICtrlSetData($Edit1,@HOUR&":"&@MIN&":"&@SEC&"->"&"В белте,"&@CRLF&"астероиды есть"&@CRLF, 1)
EndIf
EndIf
if $cg<90 Then ; если трюм ещё не заполнен то вылетаем, делаем запас на последний неполный цикл лазеров
; плюс место стыковки ещё нереализованной задумки
If $belt=0 Then ; если мы не в белте
GUICtrlSetData($Edit1,@HOUR&":"&@MIN&":"&@SEC&"->"&"Возле станции,"&@CRLF&"пояса не обнаружены"&@CRLF, 1)
tabelect(2) ; открываем вкладку с белтами
sleep(1000)
$c=beltcount($winn) ;считаем пояса, тут честно скажу что ф-ция может считать не только пояса =З
GUICtrlSetData($Edit1,@HOUR&":"&@MIN&":"&@SEC&"->"&"В системе "&$c&" белтов"&@CRLF, 1)
$w=Random(1,$c,1) ; выбираем случайный белт
GUICtrlSetData($Edit1,@HOUR&":"&@MIN&":"&@SEC&"->"&"Варпаем на"&$w&@CRLF, 1)
itemclick($winn,$w,2) ; прыгаем на него
Else
If $mine=0 Then ; если ещё не копаем то летим к первому астероиду, самому близкому
tabelect(3)
Sleep(3000)
itemclick($winn,1,1)
$mine=1
EndIf
$f=itemactive($winn,5) ; проверяем в зоне ли действия лока
if $f=1 And $lock=0 then
itemclick($winn,0,5) ;лочим выбранный астероид
$lock=1
EndIf
$d=minecheck($winn) ;проверяем включены ли у нас лазеры
GUICtrlSetData($Edit1,@HOUR&":"&@MIN&":"&@SEC&"->"&"Копаем"&$d&@CRLF, 1)
If $d=0 and $lock=1 Then ; если нет то включаем, тут есть недоработка которую не знаю как решить
; не знаю как проверить в радиусе ли мы действия лазеров, поэтому тупо спамим пока не заработает
; но надеюсь когда пересяду на баржу проблема частично снимется
Send("{F2}{F1}")
EndIf
EndIf
Else
tabelect(1) ; если трюм полон возвращаемся на базу. первую станцию в овервью
Sleep(1000)
itemclick($winn,1,3)
GUICtrlSetData($Edit1,@HOUR&":"&@MIN&":"&@SEC&"->"&"Летим на базу"&@CRLF, 1)
EndIf
EndIf
Else
$belt=0 ; если на станции сбрасываем флаги
$mine=0
$lock=0
$wh="в доке"
sleep(3000) ; время для прогрузки полной
if $cg>0 Then ; если в трюме что-то есть выгружаем
ClearCargo($winn)
Sleep(500)
UnDock($winn) ; и андкоаемся
GUICtrlSetData($Edit1,@HOUR&":"&@MIN&":"&@SEC&"->"&"Андок"&@CRLF, 1)
Else
UnDock($winn) ; если ничего нет андокаемся
GUICtrlSetData($Edit1,@HOUR&":"&@MIN&":"&@SEC&"->"&"Андок"&@CRLF, 1)
EndIf
EndIf
GUICtrlSetData($Where,$wh, "")
EndIf
EndIf
WEnd
Добавлено:
Сообщение автоматически объединено:
ах да насчёт пкм меню согласен, но тут дело принципа каов программер таков и бот