Что нового

[World of Warcraft] Оптимизация под неактивное окно

grayswandir

Новичок
Сообщения
7
Репутация
0
И снова доброго времени суток! Вдогонку к теме " http://autoit-script.ru/index.php?topic=18658.0 ".
Ситуация следующая: есть бот, разработанный под свои нужды и работающий только в активном окне.
Цель: запускать несколько клиентов игры+бота, поиск наименее затратного по ресурсам компьютера способа.
Отчасти удалось решить проблему, через удаленный доступ, однако, такой способ дал повышение потребляемых ресурсов процессора, примерно в полтора раза.
Отсюда вопрос: возможно-ли оптимизировать следующие функции(приложу ниже) для работы в неактивном окне, и если да, то в каком направлении копать?

Функция Getpos() считывает содержание 2х пикселей, которые посылаются аддоном игры, в них содержаться: координаты, азимут и прочее.
Код:
Func GetPos()
   StartMoving()
   $pixel1 = _ColorGetRGB(PixelGetColor(0, 0, $hwnd));
   $pixel2 = _ColorGetRGB(PixelGetColor(10, 0, $hwnd));
   local $result[3] = [ ($pixel1[0]+$pixel1[1]/255.0)/255*100, ($pixel2[0]+$pixel2[1]/255.0)/255*100, $pixel1[2]*7.0/255 ]
   return $result
EndFunc


Соответственно функция движения
Код:
Func Move($want)
   while true
      StartMoving()
      local $pos = GetPos()
      local $dir = GetDirection($pos[0], $pos[1], $want[0], $want[1], $pos[2])
      ;ToolTip(StringFormat("(%.2f,%.2f,%.2f) to (%.2f,%.2f, %.2f): (%.2f,%.2f)", $pos[0], $pos[1], $pos[2], $want[0], $want[1], $want[2], $dir[0], $dir[1]))
      if abs($dir[0]) < 0.1 And abs($dir[1]) < 0.1 then ExitLoop
      
      if abs($dir[0]) >= abs($dir[1]) Then
         Send("{a up}{d up}")
         if $dir[0] <=0 Then
            Send("{w down}{s up}") ; forward
         Else
            Send("{s down}{w up}") ; backward
         EndIf
      Else
         Send("{s up}")
         if $dir[1] < 0 Then
            Send("{d down}{a up}") ; right
         Else
            Send("{a down}{d up}") ; left
         EndIf
      EndIf
   wend
   Send("{s up}{a up}{d up}")
EndFunc


И функция поворота
Код:
Func Turn($want)
    while true
        $current = GetPos()
        $sin = sin($current[2] - $want[2])
        ;ToolTip(StringFormat("(%.2f,%.2f,%.2f) to (%.2f,%.2f,%.2f)", $current[0], $current[1], $sin, $want[0], $want[1], $want[2]))
        if abs($sin) < 0.05 then return
        MouseMove(MouseGetPos(0)+50*$sin, MouseGetPos(1), 1)
   wend
EndFunc

Акцент на двух вещах: 1) считывание цветов пикселей по заданным координатам. 2) движения мыши с зажатой правой кнопкой.
1)Проведя поиск по форуму, нашел способ считывания через отснятый скриншот, и его анализа, однако там же, указывается, что это весьма ресурсоемкий процесс, из чего следует 2 вопроса, можно-ли делать скриншоты только определенной (21 пиксель в ширину, и возможно, получится урезать высоту) части окна, и насколько это повысит производительность такого способа?

2) На счет движений мыши в неактивном окне, с зажатой кнопкой, информации практически не нашел.
 
Верх