Что нового

Распознование типа неписи и лок БШ

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
hikki сказал(а):
Код:
Func target(); проверка на фриги и крузы, лок бш
    $npscruz = 0
    $npsfrig = 0
    $npsbs=0
    $nps =0
    For $tar = 209 To 444 Step 19
        $nps1= PixelGetColor($target_serch,$tar); тут производится выборка по уникальному цвету для каждого типа неписи
        If $nps1 = 0xC11414 Then $nps = $nps+1
        If $nps1 = 2032387 Then $npscruz = $npscruz+1
        If $nps1 = 1245698 Then $npsfrig = $npsfrig+1
        If $nps1 = 0xC11414 Then MouseClick( "left" ,$target_serch,$tar ,1,10 )
        Sleep(250)
        If $nps1 = 0xC11414 Then MouseClick( "left" ,$target_nps_X,$targetY ,1,10 ); лочим батл, жмет прицелится
        $npsfrig &" фригов, " &$nps &" батлов")
        Sleep(100)
    Next
    $npssuma = $npscruz + $npsfrig
EndFunc


не стал убирать из кода дополнительные переменные и вычисления, которые в других модулях работают,
Хочется посоветоватся... этот код работает хорошо, меня все устраивает, но распознавание НПЦ по цвету одного пиксела кажется мне плохой идеей. В принципе проблема возникнет при переносе кода на другой комп, набо будет опять искать цвет и точку с лупой)). В общем ищу совета по распознаванию типа неписи и их координат.
 

dozzz33

ГаЛюЦиНоГеНнЫй ГрЫп
Сообщения
23
Репутация
2
Считает и лочит всех, в общем то тоже самое только доделаное, хотя смысла особого нету в подсчете неписей :smile: только если чисто для интереса сколько бот каких убил)
index.php

Код:
Func target()
	Dim $target_serch = $WinPos[0]+775, $target_serch2 = $WinPos[0]+778, $tar
    $npscruz = 0
    $npsfrig = 0
    $npsbs=0
    $nps =0
    For $tar = $WinPos[1]+195 To $WinPos[1]+290 Step 19
        $nps1= PixelGetColor($target_serch,$tar)
        $nps2= PixelGetColor($target_serch2,$tar)
        $nps3= PixelGetColor($target_serch,$tar-1)
        If $nps1 = 0xC11414 Then
			If $nps2 <>  $nps1 Then
				If $nps3 <> $nps1 Then
					$nps = $nps+1
					;MsgBox(0, "", "frig")
					$npsfrig = $npsfrig+1
				EndIf
			EndIf
		EndIf
        If $nps1 = 0xC11414 Then
			If $nps2 = $nps1 Then
				If $nps3 <> $nps1 Then
					$nps = $nps+1
					;MsgBox(0, "", "cruz")
					$npscruz = $npscruz+1
				EndIf
			EndIf
		EndIf
        If $nps1 = 0xC11414 Then
			If $nps2 = $nps1 Then
				If $nps3 = $nps1 Then
					$nps = $nps+1
					;MsgBox(0, "", "bs")
					$npsbs = $npsbs+1
				EndIf
			EndIf
		EndIf

		If $nps1 = 0xC11414 Then CtrlLeftClick($target_serch,$tar)
        Sleep(250)
        ToolTip($nps & " всего, " &$npsfrig &" фригов, " &$npscruz &" крейсеров, " &$npsbs &" бш", $WinPos[0] + 756, $WinPos[1] + 22)
        Sleep(1000)
    Next
EndFunc
 

Lexx98

Продвинутый
Сообщения
272
Репутация
73
Смысл в разгоне системы. Если 6 всего и 3 бш - это точно хороший респ (условия удовлетворительных респов придумайте для себя сами :smile:), и в нём надо только убивать БШ. А если 4 или больше неписей, и нет бш - это говноресп - вырезать полностью. Алгоритм простейший, не учитывает варианты 2 фрига 1 круз. Или 2 круза 1 бк. Думайте сами как делать идеально.

И вообще, код длинный и неудобный, хоть и работает.
Как правило, сортировка идёт по расстоянию. Проверять надо всего 3 точки на красный цвет, с шейдом (а фон там непрозрачный чёрный если нет выделения), вложенными if. 1-я точка, возле центра крестика - если она есть, значит есть непись. 2-я точка, в вершине луча круизера - если её нет, это фриг. 3-я точка, в углу луча крестика БШ, если её нет - это круз, если есть - это БШ. Всё. Думаю, около 10 строк на проверку, 2 строки на организацию цикла. Плюс-минус.
 

dozzz33

ГаЛюЦиНоГеНнЫй ГрЫп
Сообщения
23
Репутация
2
Да можно написать короче, но я не очень хорошо разбираюсь в скриптах и программировании ) поэтому написано чтоб мне было понятно :blum:
Проверяются такие точки:

пысы: сори за корявый рисунок))
 
Автор
Belfigor

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Если наш раздел посещают эпилептики, они неприменно упадут в конвульсиях при виде твоего рисунка :smile:
 

hikki

Продвинутый
Сообщения
233
Репутация
99
В целом правильно нарисовано)) только зачем проверять три точки? смотри внимательно самый первый скрипт, там проверяется только одна точка, у разной неписи она имеет разный цвет.
В том посте что Belfigor перенес со старого форума я задавался вопросом о нахождении этой точки в случае перемещения овервью или переходе на другой комп, теперь этого вопроса нет, так как координаты привязываются к стрелке настроек овервью.
Код:
Dim $angle_coord[2] ; это массив из координат Х У возвращаемый функцией определения координат стрелочки настроек овервью
$target_serch=$angle_coord[0]+ 8

Func target(); проверка на фриги и крузы, бш,
$npscruz = 0
$npsfrig = 0
$npsbs=0
$nps =0
For $tar = $angle_coord[1]+56 To 444 Step 19
$nps1= PixelGetColor($target_serch,$tar); тут производится выборка по уникальному цвету для каждого типа неписи
If $nps1 = 0xC11414 Then $nps = $nps+1
If $nps1 = 2032387 Or $nps1=1966851 Then $npscruz = $npscruz+1
If $nps1 = 1245698 Or $nps1=1179905 Then $npsfrig = $npsfrig+1
Next
$npssuma = $npscruz + $npsfrig
if $npscruz>0 And $npsfrig>0 Then $npssuma=4
EndFunc

If $npssuma > 3 Then bad_resp(); килл всей неписи
If $nps >0 Then target_BS();если в респе есть бш


логика немного топорная, есть недочеты, например не будет убивать плохой респ, состоящий из 2 видов крузаков, если их всего 3 штуки.
 

dozzz33

ГаЛюЦиНоГеНнЫй ГрЫп
Сообщения
23
Репутация
2
у меня овервью прозрачное) поэтому только цвет крестика постоянный :smile:
 
Автор
Belfigor

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Зачем изобретать велосипед? Особенно когда он заведомо с ошибкой? Пользуй либо карту либо черный фон и будет тебе счастье :smile:
 

dozzz33

ГаЛюЦиНоГеНнЫй ГрЫп
Сообщения
23
Репутация
2
он без ошибок) просто колеса немного квадратные ;D
а вобще просто не нравится мне черный цвет, когда чатишься утомляет, да и если таки гмы будут проверять по цвету будет лишняя отмазка :smile:

пысы: быстродействие конечно страдает... кто ж спорит...

пыпысы: интересно как в аш-боте реализовано распознавание... там название нпц рапознает тоже...
 
Автор
Belfigor

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
существует достаточно распространенный баг интерфейса, особенно заметен тогда когда работает много клиентов, непись умирает но остается в овервью, единственные отличия от живой неписи - это то что ее название написано более темным цветом чем обычно и если ткнуть на нее мышкой SI меню отобразит статус No Object Selected, естественно тыкать на каждую непись - не практично да и не надежно, единственный оптимальный вариант - привязаться к цвету букв. Если же фон будет то 95% что мертвая непись будет принята за живую. Досканальная проработка твоего варианта показала что уже в зародыше твой подход несет в себе ошибку
91.gif
 

dozzz33

ГаЛюЦиНоГеНнЫй ГрЫп
Сообщения
23
Репутация
2
перед локом 2 раза таб(или как оно там сворачивается не помню что-то), овервью избавится от лишних)
 
Автор
Belfigor

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Ну, поступай как знаешь
39.gif
 

hikki

Продвинутый
Сообщения
233
Репутация
99
я тут дам совет :laugh:
Поставте игру в разные папки, для бота одна папка, для игры другая, в результате разные профили, разные настройки. И нефиг мешать боту своим флудом.
 

dozzz33

ГаЛюЦиНоГеНнЫй ГрЫп
Сообщения
23
Репутация
2
hikki сказал(а):
я тут дам совет :laugh:
Поставте игру в разные папки, для бота одна папка, для игры другая, в результате разные профили, разные настройки. И нефиг мешать боту своим флудом.
я тоже могу дать совет :laugh:
запускайте игру разными ярлыками нечего копии плодить
для себя с " /end /LUA:shok:FF"
для бота без :smile: и все его настройки будут в док&сетингс...
 

DJ_Tommy

Продвинутый
Сообщения
236
Репутация
57
Для ботов идеальный вариант - виртуальная машина ...
 

dozzz33

ГаЛюЦиНоГеНнЫй ГрЫп
Сообщения
23
Репутация
2
по поводу логики, вот это поидее должно убивать все респы без бш
Код:
If $frig > 1 And $cruz > 1 OR $cruz > 4 target_all()
 

Lexx98

Продвинутый
Сообщения
272
Репутация
73
Нет. Респ в 3 круз-тип крестика, где будет 2 круза и 1 бк или наоборот, пропустит. Не знаю правда, насколько часты такие респы.
 
Автор
Belfigor

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
dozzz33 сказал(а):
по поводу логики, вот это поидее должно убивать все респы без бш
Код:
If $frig > 1 And $cruz > 1 OR $cruz > 4 target_all()
Or $cruz > 3
В таком случае он начнет отстреливать если увидит 4, 5 или 6 крузов, с твоим условием он будет стрелять только если увидит 5 или 6
 

dozzz33

ГаЛюЦиНоГеНнЫй ГрЫп
Сообщения
23
Репутация
2
есть еще вариант сварганить логику основанную на столбце size в овервью, там по идее не должно быть проблем никаких
пысы: не нифига невыйдет =( крузеры и бк одинакового размера, теже яйца только в профиль)
 
Верх