-
Posts
422 -
Joined
-
Last visited
-
Days Won
1
Posts posted by PinkElfant
-
-
Edited by cep62rus
'Работа с окном'
#include <iostream> #include <Windows.h> #include <math.h> using namespace std; //MAKELONG MACRO #define MAKELONG(a, b) ((LONG)(((WORD)(((DWORD_PTR)(a)) & 0xffff)) | ((DWORD)((WORD)(((DWORD_PTR)(b)) & 0xffff))) << 16)) int main() { setlocale(0, "russian"); HWND hWnd = (HWND)0x000203EC; ///Отправка на перемещение и нажатие кнопки мыши, потом запрос на отрисовку /*SendMessage(hWnd, WM_MOUSEMOVE, 0, MAKELONG (300, 300)); SendMessage(hWnd, WM_LBUTTONDOWN, 0, MAKELONG (300, 300)); SendMessage(hWnd, WM_LBUTTONUP, 0, MAKELONG (300, 300)); SendMessage(hWnd, WM_PAINT, 0, 0);*/ //А теперь прикол =) //рисует в паинте график cos int x, y; SendMessage(hWnd, WM_LBUTTONDOWN, 0, MAKELONG (100, 300)); for(int i = 100; i < 500; i++) { x = i; y = 300 + cos((float)x/4)*70; // cos(х/a) /чем больше, тем функция в длинну растягивается SendMessage(hWnd, WM_MOUSEMOVE, 0, MAKELONG (x, y)); Sleep(50);//Задержка } SendMessage(hWnd, WM_LBUTTONUP, 0, MAKELONG (x, y)); SendMessage(hWnd, WM_PAINT, 0, 0); cout << "Готово!" << endl; system("pause"); return 0; }
'Работа с джоем'
#pragma comment (linker, "/ENTRY:mainCRTStartup") #include <SDL.h> #include <iostream> #include <Windows.h> #pragma comment(lib, "SDL2.lib") #pragma comment(lib, "SDL2main.lib") using namespace std; #undef main int main() { // Переменная для нашего джойстика SDL_Joystick *joy; SDL_Event event; // Инициализация SDL для использования джойстика, включение событий от джойстика и его открытие SDL_Init(SDL_INIT_JOYSTICK); SDL_JoystickEventState(SDL_ENABLE); joy = SDL_JoystickOpen(0); while(1) { Sleep(10);//Задержка, разгрузка процессора SDL_PollEvent(&event); static int mouse_boost = 0; if(SDL_JoystickGetButton(joy, 5)) mouse_boost = 2; else mouse_boost = 1; //Значения по осям от -32768 до 32767. //Ось 1. Y инвертирована int xAxis1 = SDL_JoystickGetAxis(joy, 0); int yAxis1 = -SDL_JoystickGetAxis(joy, 1); //Передвижение мыши с помощью Оси 1 float speed_coef = 0.5;//коэфициент замедления скорости if((xAxis1 != 0) || (yAxis1 != 0)) { POINT mouseCoord; GetCursorPos(&mouseCoord); //Иверт инвертированной оси -yAxis1, т.к. экран с лев. верх. угла. (* mouse_boost) - коэф ускорения SetCursorPos(mouseCoord.x + (xAxis1 / (15000 * speed_coef)) * mouse_boost, mouseCoord.y + (-yAxis1 / (15000 * speed_coef)) * mouse_boost); } } return 0; }
-
1
-
-
параметр "width" в ствойствах списка игроков
-
Вообще стоит пересмотреть и глянуть в сторону AutoIt 3. Просто AutoHotKey есть модификация AutoIt 2. У AutoIt есть свой редактор кода, и компилятор выдает допущеные ошибки
-
Edited by cep62rus
//Ничайно удалил свой пост выше. Интернет лаганул.
Дело в том, что MakeLong должна быть отдельно функцией, не знаю как в AHK это делать, но выглядеть это дожно примерно так
//функция MakeLong( LoWord, HiWord ) { return (HiWord << 16) | (LoWord & 0xffff) } //функция //здесь блок, если нужно перемещать if MouseNeedsToBeMoved { lParam := MakeLong( DeltaX * JoyMultiplier, DeltaY * JoyMultiplier * YAxisMultiplier ) // вызов SendMessage, 0x200, 0, %lParam%,, WoT Client } return
А ошибки выдает интерпритатор?
А также необходимо передавать координаты, тоесть получить при помощи GetCursorPos координаты мыши, прибавить к ним DeltaX, DeltaY и уже перемещать.
//offtop. Печаль, жалко ноутбук сломан, написал бы на C++ бы все, а на старом компьютере ничего не запустить
-
Жаль,спасибо за оперативный ответ.
Почему жаль? В релизах под ранние патчи иконки обновлялись
-
Edited by cep62rus
Так а курсор при выполнении скрипта где. т.е. реальная мышь? Очень-очень интересен Ваш опыт, чуть позже обязательно попробую в танки отправлять отклонения стиков как перемещения мыши в неактивное окно.
Я кстати эту функцию "WM_MOUSEMOVE" уже встречал, но так как обещал сыну на выходных "танчики в разделенном экране", отложил на потом изучение данного вопроса. Если получиться - это будет супер :)
Дело в том, что сам курсор мыши не двигается (мы можем им двигать и работать в любом другом окне, а на фоне у нас скрипт будет слать просто послдовательность координат типа там мышь проходит), мышь лишь эмулируем его плавные движения, последовательно передавая окну мол вот курсор бежит, обработай сообщение. Очень красиво получилось с паинтом, особенно, если сделать задержку, будет красиво и плавно рисовать, курсор при этом даже не движется(само окно не активировано) и им можно управлять в другом окне например. Классная магия)
-
Edited by cep62rus
/del
-
1
-
-
Edited by cep62rus
Как я понимаю AHK умеет отправлять сообщения окну своей функцие SendMessage. Тоесть вызывать ее из WinApi. параметры
SendMessageW(
__in HWND hWnd,
__in UINT Msg,
__in WPARAM wParam,
__in LPARAM lParam);Вообщем надо "курить" Spy++ утилиту и формировать запрос окну с нужными параметрами. Имулировать движение мыши.
Также поискать можно Эмуляция движений мыши в неактивном окне C++ или вообще другой язык программирования. Тоесть там сводится все к вызову WinApi функции с нужными параметрами, тоесть
__in HWND hWnd = хендл окна
__in UINT Msg = тип сообщения(WM_MOUSEMOVE)
__in WPARAM wParam = (не знаю, нужно капать)
__in LPARAM lParam = (тут посмотрел при помощи Spy++ необходим парметр в котором lp = MAKELPARAM(х, у); координаты. формируется не знаю как, надо разбираться.)Извиняюсь, что так резко набрасал. Пока что нашел. Самому аж интересно, сам в танчики не играю сейчас
//upd 23.04 09.06.2014
http://www.vsokovikov.narod.ru/New_MSDN_API/Mouse_input/notify_wm_nchittest.htm
http://www.vsokovikov.narod.ru/New_MSDN_API/Mouse_input/notify_wm_mousemove.htm
-
Edited by cep62rus//Up
Несовсем понятно. Можно поподробнее?
Offtop.Кстати написал на C++ при использовании SDL библиотеки управление мышкой с джойстика =) Радость до ушей. Вот хочу, что нибудь еще написать, больше практиковаться и учить язык.
У меня обработка клавиша нажата или нет идет в цикле. Так вот я там сделал mouse_boost переменную-коэфициент, который увеличивается если я зажму например клавишу 6 на джойстике. Также можно попробывать и на AHK скрипте. Тоесть если нажата эта клавиша, то коэф. увеличить. И мышка движется быстрее
Вот так примерно
while(1) { Sleep(10);//Задержка, разгрузка процессора SDL_PollEvent(&event); static int mouse_boost = 0; if(SDL_JoystickGetButton(joy, 5)) mouse_boost = 2; else mouse_boost = 1; //Ось 1. Y инвертирована int xAxis1 = SDL_JoystickGetAxis(joy, 0); int yAxis1 = -SDL_JoystickGetAxis(joy, 1); //Ось 2. Y инвертирована int xAxis2 = SDL_JoystickGetAxis(joy, 4); int yAxis2 = -SDL_JoystickGetAxis(joy, 2); //Передвижение мыши с помощью Оси 1 float speed_coef = 0.5;//коэфициент замедления скорости if((xAxis1 != 0) || (yAxis1 != 0)) { POINT mouseCoord; GetCursorPos(&mouseCoord); //Иверт инвертированной оси -yAxis1, т.к. экран с лев. верх. угла. (* mouse_boost) - коэф ускорения SetCursorPos(mouseCoord.x + (xAxis1 / (15000 * speed_coef)) * mouse_boost, mouseCoord.y + (-yAxis1 / (15000 * speed_coef)) * mouse_boost); } }
-
1
-
-
Edited by cep62rus
Народ, не откланяйтесь от темы. Называть то как играет игрок можно ,если вдуматься, по-разному(его рейтинг и пр.). И "эффективностью", и его "кпд" - это все философия. Не стоит также забывать, что существует перевод из рейтинга в 4 заначной шкале в 2 знач шкалу(от 0 до 100). Что поправу можно назвать кпд.
По теме. Было бы не плохо. Рейтинг за 1к показывает насколько играет игрок последнюю тысячу боев. Но думаю это сложные алгоритмы и/или просто необходимо железо для обработки этой информации.
-
2
-
-
Edited by cep62rus
Тема уже поднималась на форуме, воспользуйтесь поиском. Пока такое не планируется и информации будет ли это вроде нет.
-
Чит и нереализуемо
Чит и реализуемо, просто помещается не силует, а какая-нибудь модель 3d куба
-
Edited by cep62rus
Разница лишь в том, либите ли вы "кашу" или порядок? Как известно, если порядок - можно быстро найти нужное(настроить)
-
Edited by cep62rus
ассемблер (для бородатых труъ программистов) и C/C++
кроссплатформенны (кроме ассемблера).
даже самые тру бородатые =) очень в экстренных ситуациях прибегают к ассемблеру.
Если же писать на ассемблере под конкретную ОС, то тут прямая зависимость от нее.
.
Но здесь стоит вопрос не в том что кроссплатформенне. Даже програмируя на Delphi и не используя слишком много сторонних компонентов, а юзать функции самой ОС(в этом случае WinApi) можно сделать программу максимум компактную и не занимающую много памяти. В нынешних реалях 30мб особой роли не играют.
PS./ Висит открытый FireFox 10 вкладок открыто, занимает 560 MB озу, компьюетр имеет 1.5GB. Лагов особых нет.
-
Edited by cep62rus
@DonChipato, Поковырял исходники XVM, что если попробовать так?
msg = '<textformat tabstops="[150]"><a href="#XVM_SITE#"><font color="#E2D2A2">www.modxvm.com</font></a>\n\n</textformat>' type = SystemMessages.SM_TYPE.Information SystemMessages.pushMessage(msg, type)
вроде те же яйца только в профиль, тут просто идет передача параметров через переменные
-
Отличная работа
-
Edited by cep62rus
Да, сможет. Окно танков в песочнице имеет системное имя [#] WoT Client [#], геймпады также имеют свой системный номер, для определения есть специальный скрипт.
Отлично, что еще нужно реализовать? Я так понимаю половина уже есть? (В танки сам сейчас не играю, появилось желание выучить скриптовый язык и порешать различные задачи)
-
Edited by cep62rus
Теперь стоит задача в основном узнать от какого джойстика какому окну посылать. Сможет ли AutoHotKey все это сделать?
-
Это не баг, а фича. Вдруг бой эпичный и захочется сохранить на память, вот и реплей сгодится.
По теме: так критично 1-2 мб занимают на диске?
-
Edited by cep62rus
Выше.
Как вариант использовать AutoIt, там можно также принимать нажатия с джоя, и запрограмировать откланения двух осей управлевния(?стиков) в движение мыши.
Upd.05.06.2014 16.14
Тот же AutoHotKey. Движение мышью(левый стик), скрол Up - Down, и клики кнопками лев., прав. - b, y соответственно
; Increase the following value to make the mouse cursor move faster: JoyMultiplier = 0.30 ; Decrease the following value to require less joystick displacement-from-center ; to start moving the mouse. However, you may need to calibrate your joystick ; -- ensuring it's properly centered -- to avoid cursor drift. A perfectly tight ; and centered joystick could use a value of 1: JoyThreshold = 3 ; Change the following to true to invert the Y-axis, which causes the mouse to ; move vertically in the direction opposite the stick: InvertYAxis := false ; Change these values to use joystick button numbers other than 1, 2, and 3 for ; the left, right, and middle mouse buttons. Available numbers are 1 through 32. ; Use the Joystick Test Script to find out your joystick's numbers more easily. ButtonLeft = 1 ButtonRight = 2 ButtonMiddle = 3 ; If your joystick has a POV control, you can use it as a mouse wheel. The ; following value is the number of milliseconds between turns of the wheel. ; Decrease it to have the wheel turn faster: WheelDelay = 250 ; If your system has more than one joystick, increase this value to use a joystick ; other than the first: JoystickNumber = 1 ; END OF CONFIG SECTION -- Don't change anything below this point unless you want ; to alter the basic nature of the script. #SingleInstance JoystickPrefix = %JoystickNumber%Joy Hotkey, %JoystickPrefix%%ButtonLeft%, ButtonLeft Hotkey, %JoystickPrefix%%ButtonRight%, ButtonRight Hotkey, %JoystickPrefix%%ButtonMiddle%, ButtonMiddle ; Calculate the axis displacements that are needed to start moving the cursor: JoyThresholdUpper := 50 + JoyThreshold JoyThresholdLower := 50 - JoyThreshold if InvertYAxis YAxisMultiplier = -1 else YAxisMultiplier = 1 SetTimer, WatchJoystick, 10 ; Monitor the movement of the joystick. GetKeyState, JoyInfo, %JoystickNumber%JoyInfo IfInString, JoyInfo, P ; Joystick has POV control, so use it as a mouse wheel. SetTimer, MouseWheel, %WheelDelay% return ; End of auto-execute section. ; The subroutines below do not use KeyWait because that would sometimes trap the ; WatchJoystick quasi-thread beneath the wait-for-button-up thread, which would ; effectively prevent mouse-dragging with the joystick. ButtonLeft: SetMouseDelay, -1 ; Makes movement smoother. MouseClick, left,,, 1, 0, D ; Hold down the left mouse button. SetTimer, WaitForLeftButtonUp, 10 return ButtonRight: SetMouseDelay, -1 ; Makes movement smoother. MouseClick, right,,, 1, 0, D ; Hold down the right mouse button. SetTimer, WaitForRightButtonUp, 10 return ButtonMiddle: SetMouseDelay, -1 ; Makes movement smoother. MouseClick, middle,,, 1, 0, D ; Hold down the right mouse button. SetTimer, WaitForMiddleButtonUp, 10 return WaitForLeftButtonUp: if GetKeyState(JoystickPrefix . ButtonLeft) return ; The button is still, down, so keep waiting. ; Otherwise, the button has been released. SetTimer, WaitForLeftButtonUp, off SetMouseDelay, -1 ; Makes movement smoother. MouseClick, left,,, 1, 0, U ; Release the mouse button. return WaitForRightButtonUp: if GetKeyState(JoystickPrefix . ButtonRight) return ; The button is still, down, so keep waiting. ; Otherwise, the button has been released. SetTimer, WaitForRightButtonUp, off MouseClick, right,,, 1, 0, U ; Release the mouse button. return WaitForMiddleButtonUp: if GetKeyState(JoystickPrefix . ButtonMiddle) return ; The button is still, down, so keep waiting. ; Otherwise, the button has been released. SetTimer, WaitForMiddleButtonUp, off MouseClick, middle,,, 1, 0, U ; Release the mouse button. return WatchJoystick: MouseNeedsToBeMoved := false ; Set default. SetFormat, float, 03 GetKeyState, joyx, %JoystickNumber%JoyX GetKeyState, joyy, %JoystickNumber%JoyY if joyx > %JoyThresholdUpper% { MouseNeedsToBeMoved := true DeltaX := joyx - JoyThresholdUpper } else if joyx < %JoyThresholdLower% { MouseNeedsToBeMoved := true DeltaX := joyx - JoyThresholdLower } else DeltaX = 0 if joyy > %JoyThresholdUpper% { MouseNeedsToBeMoved := true DeltaY := joyy - JoyThresholdUpper } else if joyy < %JoyThresholdLower% { MouseNeedsToBeMoved := true DeltaY := joyy - JoyThresholdLower } else DeltaY = 0 if MouseNeedsToBeMoved { SetMouseDelay, -1 ; Makes movement smoother. MouseMove, DeltaX * JoyMultiplier, DeltaY * JoyMultiplier * YAxisMultiplier, 0, R } return MouseWheel: GetKeyState, JoyPOV, %JoystickNumber%JoyPOV if JoyPOV = -1 ; No angle. return if (JoyPOV > 31500 or JoyPOV < 4500) ; Forward Send {WheelUp} else if JoyPOV between 13500 and 22500 ; Back Send {WheelDown} return
Источник: http://autohotkey.com/docs/scripts/JoystickMouse.htm
-
Edited by cep62rus
Я особо не вчитывался в суть темы, но может пригодиться http://code.google.com/p/x360ce данная dll hook'ает интерфейс xinput(?world of tanks его воспринимает?), так вот, там есть ini файл в котором указывается pid устройсва(нашего джойстика), если запустить два клиента, но они буду запускаиться с разных дерикторий и со своими конф. файлам этой dll получим, что каждый джойстик подключиться к своему клиенту. Только я не проверял и не знаю, сможет ли принимать wot.
Как вариант написать dll на C++ которая будет принимать при помощи DirectInput команды с джойстика и отдавать их игре через WinApi. Но я жаль нечем помочь немогу, не силен в этой области, джойстики есть, может как-нибудь да покапаюсь.
Если в первом варианте я не уверен, то второй вполне возможен
-
Вангую: чекать сбрученный аккаунт...
-
1
-
-
попробуйте найти скрипт с именем Flash.py
[ERROR.GUI] (scripts/client/gui/Scaleform/Flash.py, 261): Error extracting object with linkage: DetailedStatisticsUnit_UI
пишет слишком много ошибок из-за него, возможно он мешает
-
А фраги вам за край экрана будут писаться ? Думаем, что говорим
а всё понял, ну извините, у меня не получилось выровнять я и плюнул на это дело. буду знать
Вопрос-предложение
in Suggestions for XVM
Posted ·
кстати, отличная идея! упростилась бы настройка конфига, не пришлось бы перезагружать клиент