Что нового

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

Belfigor

Модератор
Локальный модератор
Сообщения
3 552
Репутация
930
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: только если чисто для интереса сколько бот каких убил)

Код:
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:
Проверяются такие точки:

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

Belfigor

Модератор
Локальный модератор
Сообщения
3 552
Репутация
930
Если наш раздел посещают эпилептики, они неприменно упадут в конвульсиях при виде твоего рисунка :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:
 
Автор
B

Belfigor

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

dozzz33

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

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

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

Belfigor

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

dozzz33

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

Belfigor

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

hikki

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

dozzz33

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

DJ_Tommy

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

dozzz33

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

Lexx98

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

Belfigor

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

dozzz33

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