Что нового

[World of Warcraft] Активные окна, боты, виртуализация

grayswandir

Новичок
Сообщения
7
Репутация
0
Доброго времени суток!
Прошу прощения, если ошибся разделом(сомневался куда запостить: либо сюда, либо в раздел ботов).
Возникла следующая ситуация: написал бота, для эмуляции действий игрока, в игре (World of Warcraft), программа использует мышь и клавиатуру, т.е. нуждается в активном окне. Задача весьма тривиальна: хочу запустить несколько клиентов игры, и ботов соответственно.
Хотел обсудить наиболее рациональные способы достижения цели. Пробовал залить на виртуальную машину(использовалась VMware Workstation 10), результаты странные: если на хосте клиент игры+бота занимают около 10-15% цп, и не глючат, то на виртуальной машине, мало того, что бот съедает больше ресурсов компьютера, так еще и заметно глючит ( особенно страдают модули передвижения(бот пробегает нужную точку, не засчитывая ее достижение, затем возвращается к ней) и поворота (бот не доворачивает до необходимого ракурса)).

В общем, ищу помощи: либо в решении проблем с виртуальными машинами и победы с глюками при их использовании, либо в поиске альтернатив виртуальным машинам (возможно Астер\возможность держать 2 активных пользователя в системе?)
ЗЫ: на виртуальных машинах тестировал разные ОС( Windows 7 x32, xp x32) Хост - Windows server 2008 enterprice r2
ЗЫЫ: код поворота и движения

Поворот
Код:
Func Turn($want)


AdlibUnRegister("analyzz")
AdlibRegister ( "analyzz" ,10000)


    while true
 sleep (50)

        local $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.040 then return
        MouseMove(MouseGetPos(0)+50*$sin, MouseGetPos(1), 1)
   wend
EndFunc

Движения
Код:
Func Move($want)
local $locid = _ColorGetGreen(PixelGetColor(21, $aClientSize[1]/2, $hwnd))/255;
$locid = round($locid, 1)

   while true
      sleep (50)

$aClientSize = WinGetClientSize("[ACTIVE]")
local  $pg = _ColorGetRed(PixelGetColor(1, $aClientSize[1]/2, $hwnd))


      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.3 And abs($dir[1]) < 0.3 then ExitLoop
   if $pg = 51 then Exitloop
   IF $locid = 0.3 AND $playfille <> "2.txt" then Exitloop
   IF $locid <> 0.3 AND $playfille = "2.txt" then Exitloop

   if $pg = 102 AND $playfille <> "resu.txt" 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
 

Belfigor

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

grayswandir

Новичок
Сообщения
7
Репутация
0
Belfigor сказал(а):
Настройки клиента запущенного на виртмашине выкручивал до минимума?
Настройки везде допустимом минимуме.
UPD: Нашел решение проблемы в удаленке(подключаюсь к своем компьютеру удаленно, под другим юзером)
Там возникла еще одна проблема, бот не воспринимает цвета должным образом, т.е.
Код:
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
На хосте работает нормально, через удаленку - определяет цвета не верно.
UPD2: Решил проблему настроив удаленный доступ к своему же пользователю.
 
Верх