Перейти к содержанию

pachela

Пользователи
  • Постов

    154
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные pachela

  1. А как это на работе пользователя повлияет? Будет ли мешать мне, к примеру работать в VS или лазить в браузере по ютубам и вконтактам?

    Приблизительно это будет так:

    API FindWindow, GetForegroundWindow, SetForegroundWindow.

    Узнаем дескриптор уже активного окна, узнаем дескриптор окна мишени, устанавливаем фокус на окно мишень, эмулируем нажатие клавиш и возвращаем фокус на прошлое активное окно. Правильно?

  2. 3 часа назад, Xipho сказал:

    Собственно, если так уж необходимо держать окно в фокусе, никто не может помешать запустить игру с минимальными настройками в виртуалке, и кликер в ней же. И саму виртуалку хоть вообще в headless режиме запускать (только настроить все на автозагрузку).

    Даже в режиме оптимизации игра тянет слишком много ресурсов. Но ни это главное.

    Я тут вспомнил, Что совсем недавно видел уже видео с подобным ботом, там вот китаец реализовал то, что я хочу. Даже в свернутой игре, бот выполняет все поставленные задачи. Возможно он через драйвер это решил?

  3. На просторах интернет вычитал, что если игра защищена чем то вроде "фемиды", то эмуляция клавиш в фоновом режиме ей до одного места. А точнее речь идет не столько о самой фемиде, а о том, что современные ММО ставят проверку на фокус окна?

    Т.е. если я пробую тем же AHK или AutoIT и у меня в активном окне кликер работает, а в свернутом нет, то дальше и не мучить яйца, кота, мозги и Шарп, в попытках заставить слать клики в свернутое приложение?

    P.s. Пардоньте за кашу, на ногах уже кучу времени, голова стремительно клонится к подушке.

  4. 10 часов назад, kiwipapayamongoose сказал:

    Давно бы уже сделал управление, через память, т.е при нажатии клавиши в памяти изменяются значения, типа 256 нажата клавиша, а 0 опущена, тогда все равно игра в фокусе или нет.

    Я об этом думал, но как найти значение клавиш в памяти?

  5. Походу я не загружаю API нужную. Ибо все у меня красное =\.

    Можно как нибудь кратно, без лишней воды, но так, что бы было доходчиво, объяснить как эмулировать нажатие клавиши в фоновом приложении, без перенесения на него фокуса.

    В гугле доходчивых и полноценных примеров нет. Одни куски, которые ни чему умному научить не могут.

    Нажатие в окне на котором фокус, у меня получилось и то, только с бубном в виде InputSimulator

    private void button15_Click(object sender, EventArgs e)
            {
                inputSimulator.Keyboard.KeyPress(VirtualKeyCode.VK_R);
            }

    Но мне нужно, что бы клавиши клацались в окне без фокуса! Что бы свернул и ушел, а оно работает.

  6. В 16.02.2018 в 14:38, Xipho сказал:

    Я очень дико извиняюсь, вернулся работать над ботом и дошел до стадии эмуляции клавиш. Увидел вашу ссылочку, а можно теперь для тугодума рассосать каждую строчку?

    public static void Send(short Keycode)
    {
        INPUT[] InputData = new INPUT[1];
    
        InputData[0].type = 1;
        InputData[0].ki.wScan = Keycode;
        InputData[0].ki.dwFlags = KEYEVENTF_KEYUP | KEYEVENTF_SCANCODE;
        InputData[0].ki.time = 0;
        InputData[0].ki.dwExtraInfo = IntPtr.Zero;
    
        SendInput(1, InputData, Marshal.SizeOf(typeof(INPUT)));
    }

    по ссылке, вижу ниже комментарий, который гласит, что нужно  сначала слать нажатие клавиши, потом отпускание, с небольшой паузой, как это реализуется или просто сначала KeyDown а затем KeyUp? Как я понимаю, это отправка в активное окно? Или в фоновое тоже можно?

  7. Так, почему была ошибка в OpenProcess, я понял. Просто почему то опечатался и ввел одинарные кавычки. это поправили и теперь код отчасти работает. Начало просто постоянно выдавать ошибку про время ожидания для присоединения отладчика. Если клацнуть НЕТ, то значение все равно напишет, НО игра через пару секунд вылетает...

    В игре античит защищает память от API. Может таким образом отладчик использует это самое API?

  8. Почему все время выдает вот такую вот ошибку?

    597281261c86b751d3460f2e81476df1.png

    И вот что выдает еще, этого не выдавало...

    openProcess('myproc.exe')
    debugProcess(2)
    local addressCode = 'myproc.exe+D4BC13'
    debug_setBreakpoint(addressCode)
    print(RCX)
    s = string.format("%08X", RCX)
    print(s)
    
    debug_removeBreakpoint(addressCode)
    writeToClipboard(s)
    
     
    Ошибка:[string "openProcess('myproc.exe')
    ..."]:6: bad argument #2 to 'format' (number expected, got nil)
    Ошибка скрипта

    П.С. Я когда спрашивал про создание трейнера без формы, то имел ввиду в CE =). В шарпе это не проблема, проблема в шарпе отладку сделать, я этого еще не умею.

  9. Временно решил проблему в Lua Engine (нужно будет перенести в Lua или реализовать как то трейнер =)) вот таким вот кодом:

    Спойлер
    
    local addressCode = 'MyProcc.exe+D4BC13'
    debug_setBreakpoint(addressCode)
    print(RCX)
    s = string.format("%08X", RCX)
    print(s)
    
    debug_removeBreakpoint(addressCode)
    showMessage(s)
    writeToClipboard(s)

     

    А в Шарпе я беру с Буфера обмена, добавляю смещение и имею, то что хочу. Но это пока, что для развития, вообще нужно будет думать как это сделать в Шарпе.

    Подскажите еще вот что, как сделать форму трейнера или вообще трейнер, что бы при запуске не отображалось окно? Ну типа запустил, оно в фоне клацнуло и закрылось.

  10. Собственно задача заключается в следующем:

    1. Есть инструкция "movss [rcx+00000378],xmm0" которая располагается по статическому адресу.

    2. Мне нужно по средством CE, желательно LUA, что бы можно было использовать в дальнейшем трейнере, прочитать содержимое регистра RCX.

    3. К этому значению прибавить 378.

    4. Значение RCX записать в переменную 1, значение со смещением записать в переменную 2.

     

    P.s. На C# это сложно реализовать?

  11. 3 часа назад, Antonshka сказал:

    Можно сделать таким алгоритмом:

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

    Да и зачем на столько заморачиваться, если можно сделать хождение по точкам. Сейчас пока что мучаю форму с лист боксом, сохранением результата в тхт и циклами. Но в ближайшем будущем я хочу организовать автозапись в лист бокс координат, через каждые 10 метров. А потом воспроизведение записи по этим точкам и воспроизведение в обратном порядке. Но пока что застрял на цикле поворота и отмера растояния до цели.

    А в дальних планах еще и до передвижения добавить боевку. Но вот с эмуляцией нажатий в Шарпе, я еще не знаком. Так что все по мере поступления.

  12. Такс, имеем результат!

    Перво наперво хочу сказать, что приходится дабл преобразовывать в флоат. Но так, как я использую при записи в память стороннюю библиотеку, в которой запись происходит как стринг, то проблем не возникает =).

    Вся запарка была в сторонах! Ведь у меня есть поворот тела от 0 до 6.28 и нет отрицательного числа. И наличие отрицательного числа, меня путало =).

    Так же в примере мы переводили градусы в радианты угол, а не полученное значение.

    Имею вот такой вот код, это если вдруг понадобится кому. Возможно где и косякнул, но вроде бы пашет =)

    Скрытый текст

    Пока что сделано в 2 функции, но функцию нахождения нужного угла, я думаю перенести в отдельный класс(пока что не шарю как).

    Первая функция это присвоение переменных и запуск второй функции

    
    private void button7_Click(object sender, EventArgs e) //Жмакаем кнопку и понеслась
            {
                X = ReadMemory(addressX); //Сюда считывайте свое текущее положение Х. я написал от балды для примера =)
                Y = ReadMemory(addressY); //Сюда считываете текущее Y
                nX = 501.9024963f; //Конечная точка Х
                nY = -437.4102173f; //Конечная точка Y
                CalcAngle();            //Запуск функции по калькулированию угла
            }

    Вторая функция это расчет угла

    
    private void CalcAngle() //Функция калькуляции угла
            {      
                //Section 1
                if (nY > Y && nX <= X)
                {
                    Ydiff = nY - Y;
                    Xdiff = X - nX;
                    // Умножаем на 57.29578 для перевода из радиан в градусы.
                    AngleA = Math.Atan(Xdiff / Ydiff) * 57.29578;	
                    tmp = 180 - AngleA;
    
                }
                // Section 2 
                if (nY <= Y && nX < X)
                {
                    Ydiff = Y - nY;
                    Xdiff = X - nX;
    
                    AngleA = Math.Atan(Xdiff / Ydiff) * 57.29578;
    
                    tmp = 0 + AngleA;
                }
                // Section 3
                if (nY < Y && nX >= X)
                {
                    Ydiff = Y - nY;
                    Xdiff = nX - X;
    
                    AngleA = Math.Atan(Xdiff / Ydiff) * 57.29578;
    
    
                    tmp = 360 - AngleA;
                }
                // Section 4
                if (nY >= Y && nX > X)
                {
                    Ydiff = nY - Y;
                    Xdiff = nX - X;
    
                    AngleA = Math.Atan(Xdiff / Ydiff) * 57.29578;
    
                    tmp = 180 + AngleA;
                }
    
                tmp = tmp / 57.29578;            
                label3.Text = tmp.ToString();
      			//Если нужно будет преобразовать double в float, то делаем так somevalue = (float) tmp;
            }

    Продолжаем оптимизацию. Хочу теперь перенести функцию калькуляции угла перенести в отдельный класс.

     

    • Понравилось 2
  13. Повылазили косячки, повылазали родные. Что то да делается не так.

    Значение всегда в районе 0.8-0.7. Я так подозреваю, что возможно дело все в мат.методе? Я использую Метод Math.Atan (Double).

    Сейчас пойду покушаю, сварю кофейку и еще немного покурю. Если ниче не выйдет, выложу сюда то, что есть.

  14. 20 часов назад, temtriss сказал:

    P.S. Извеняюсь, что-то не обратил внимания на C# в заголовке, пример на C++ хотя может тоже поможет. Сори.

    Из-за того, что я в С++ вообще не бумбум, но вроде бы код предоставленных вами не сильно заморочен, то попытаюсь для начала прочитать его правильно.

    Под спойлом приведу ваш же код, но уже с добавленными мной комментариями вопросами.

    Скрытый текст
    
    int main()
    {
      ///Объявляем переменные и присваиваем им нулевое значение?
    	float X = 0;
    	float Y = 0;
    	float nX = 0;
    	float nY = 0;
      ///Почему следующая переменная полный круг double? И что значит M_PI? или мне это не нужно?
    	double halfcircle = M_PI;
    	// Ввод/Вывод нужной информации
    	cout << "Angel Calculator by Wi11ka" << endl; //Это я тоже не знаю зачем. Какое то значение =)
    	// Проверяем наши переменные
    	cout << "Math PI: " << M_PI << endl; // not needed :D
    	
    	// Получаем нужные значение от пользователя
    	// и сразу же выводим значение для проверки правильности.
    	cout << "Input X:" << endl; //Это Х по факту?
    	cin  >> X;
    	cout << "X =" << X << endl; //Сравнивается с чем? Чему должне быть равен Х?
    	cout << "Input Y:" << endl; //Y по факту?
    	cin >> Y;
    	cout << "Y =" << Y << endl; //Чему он должен быть равен?
    	cout << "Input needed X:" << endl; //Х конечной точки?
    	cin >> nX;
    	cout << "Needed X = " << nX << endl; //Чему он должен быть равен?
    	cout << "Input needed Y:" << endl; //Y конечной точки?
    	cin >> nY;
    	cout << "Needed Y = " << nY << endl; //Чему он должен быть равен?
    
    	// Вызываем функцию Калькулирующую наш угол и выводим результат.
    	float res = CalcAngle(X, Y, nX, nY);
    	cout << "Result: " << res << endl;
    	float fResult = CalcRadians(res);
    	cout << "Finish Result: " << fResult << endl;
    	system("PAUSE");
      //Как я понял, мы вызвали функция калькуляции угла и калькуляции окружности и вывели это дело на экран
    }
    
    float CalcAngle(float X, float Y, float nX, float nY)
    {
    
    	// Различие между нами и целью по оси X и Y
    	double Xdiff; //Почему в этой функции все переменные double? Я же могу их заменить на float?
    	double Ydiff;
    	// Угол 
    	double AngleA;
    
    	// Времянка :D
    	double tmp;
    
    	// Разбиваем работу на 4 секции
    	// Section 1
    	if (nY > Y && nX <= X)
    	{
    		Ydiff = nY - Y;
    		Xdiff = X - nX;
    		// Умножаем на 57.29578 для перевода из радиан в градусы.
    		AngleA = atan(Xdiff / Ydiff) * 57.29578; //В MSDN вижу, что в atan используется double, не возникнет ли конфликта при вычислениях Ydiff и Xdiff
          											 //ведь X и Y у нас в флоат, да и значение поворота камеры у меня тоже флоат.		
    		tmp = 0 - AngleA;
    
    	}
    	// Section 2 
    	if (nY <= Y && nX < X)
    	{
    		Ydiff = Y - nY;
    		Xdiff = X - nX;
    
    		AngleA = atan(Xdiff / Ydiff) * 57.29578;
    		
    		tmp = (180 - AngleA)*-1;
    	
    
    	}
    	// Section 3
    	if (nY < Y && nX >= X)
    	{
    		Ydiff = Y - nY;
    		Xdiff = nX - X;
    
    		AngleA = atan(Xdiff / Ydiff) * 57.29578;
    		
    
    		tmp = 180 - AngleA;
    
    	}
    	// Section 4
    	if (nY >= Y && nX > X)
    	{
    		Ydiff = nY - Y;
    		Xdiff = nX - X;
    
    		AngleA = atan(Xdiff / Ydiff)  * 57.29578;
    		
    
    		tmp = 0 + AngleA;
    
    	}
    	return tmp;
    }
    
    float CalcRadians(float angle)
    {
    	// Возвращаем в радианы
    	angle = angle / 57.29578; 
    
    	return angle;
    }

     

    Я надеюсь, что хоть приблизительно понял код правильно =)

  15. Прочитал ваш пример и теоретически понял его. Осталось перевести в Шарп.

    Я правильно понял, что 

    float CalcRadians(float angle)
    {
    	// Возвращаем в радианы
    	angle = angle / 57.29578; 
    
    	return angle;
    }

    Вот этот вот "angle" мы впишем в адрес содержащий "6.28"? Т.е. вот этот вот 6.28 и есть угол, который нам нужно изменить?

  16. 14 часа назад, temtriss сказал:

    А мне нужен угол на который повернута камера. И его Мин/Макс значения

    Я вот сижу и думаю, на сколько я вчера сильно протупил? Камеру в игре можно поворачивать на 360 градусов по горизонтали и на 180 градусов по вертикали.

    Почитал я статейку от немца Алекса, любезно порекомендованную вот в этом посте товарищем 2zolo2, и мне она понравилась. Но только тяжковато воспринимается немецкий даже с переводом =). Теперь вот буду думать как вычислить "идеальный угол" =).

    Не. Не 6.14, если я правильно понял что пишет программа, то это xmm4:6.27

  17. 7 минут назад, temtriss сказал:

    Не совсем, FOV - это угол поля зрения. А мне нужен угол на который повернута камера. И его Мин/Макс значения

    Вот это вот сложнее вычислить. Хотя у меня есть адрес отвечающий за поворот "тела". Так вот оно от 0 и до 6 в float.

  18. Ой. Тут бы сейчас на велосипеде научиться кататься, а за баранку боинга я даже и не думаю.

    Пока что пытаюсь реализовать сравнение 2 значений. Теперешний и последний вектора. И если значение теперешнего будет больше, то делать поворот. Пока что попробую так. ДАльше будем смотреть.

    В игре то есть маркер и автопуть, но не всегда этот автопуть кратчайший, да и в небе он не нужен =))). А маркер в некоторых ситуациях перестает работать и именно для этих ситуаций и нужен бот.

  19. Только что, kiwipapayamongoose сказал:

    Может, проще будет задать алгоритм при котором дистанция всегда должна быть меньше текущей пока не станет равна 0?

    я подозреваю, что руками тогда будет проще бежать =).

    Хочется же тыкнуть одну кнопку и идти пить чай. А он себе летит к нужной точке, а потом мягкая посадочка =)))

    Нашел сейчас вот такой вот ответ, но пока что еще не придумал ему применения =)

  20. Давайте разберемся для начала с прямой, без каких либо препятствий.

    Я вот что подумал, может стоит сравнивать 2 вектора, что бы бот повернул в правильном направлении? Ну т.е. запускаю кнопку и бот едет вперед 20 метров, записывает координаты старта и координаты финиша. Строит вектор и умножает это все в 500-1000 раз. А далее бот сравнивает эти 2 вектора и принимает решение, поворачивать или идти прямо.

    Или я не в те дебри лезу?

  21. 30 минут назад, IzerodayI сказал:

    PS я вижу это так : находимся на беспрепятственной прямой и ищем вектор "А"  и бежим по вектору к точке (то есть все три вектора могут спокойно меняться(и z тоже)).

    Такс, сейчас опробовал это на практике и вижу, что я понял ход ваших мыслей.

    Мы берем в цикле считываем X0, Y0, Z0 и вычисляем вектор. Далее делаем сравнение, если вектор увеличивается, то нужно "повернуть", если вектор уменьшатся, то значит правильным путем мы идем.

    Но вот как оптимально выбрать самый кратчайший путь? Ведь я могу к примеру повернуть на 5 градусов и до поры, до времени значение будет уменьшаться и только когда угол станет слишком большой, начнет сначала слишком медленно уменьшаться, а в конечном итоге и увеличиваться.

  22. 12 минуты назад, IzerodayI сказал:

    Ну если по прямой , то это просто  А = sqrt(x^2+y^2+z^2)  так получится пространственный вектор (прямая) от точки твоего персонажа до точки А

    PS ну что-то мне подсказывает , что нужно искать не прямой путь ) 

    3 рисунок 

    Ну мы же говорим о читах? Тем более в которых используется ось Z. Т.е. я планирую делать так: Перешел на определенную высоту и дальше по прямой до точки "А", а потом сбрасываем высоту.

    Нашел на просторах гугла, что этот математический метод для вычисления корня квадратного. А тем самым мы получим расстояние.

    Пример вот такой вот

    float deltaX = x1 - x0;
    float deltaY = y1 - y0;
    float deltaZ = z1 - z0;
    
    float distance = (float) Math.Sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ);

    Хорошо, мы вычислим расстояние. Но как нам повернуть в нужную сторону и двигаться? Ведь я знаю координаты точки "А", но не знаю в какой стороне она находится.

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.