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

pachela

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

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

  • Посещение

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

  1. 1 час назад, LIRW сказал:

    :offtopic: Проще отрубить проверку попадания персонажа в воду и ходить прям по дну, как по дороге. 

    Ну вот как ни будь более наглядно пример можно? Теоретически я понимаю, что как то это делается. Просто не придумаю каким образом это найти.

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

    Можно подходом "в лоб" найти проверку, которая проверяет, как далеко персонаж от "земли", и переключает анимацию движения и падения, и от нее танцевать уже. Ну или просто отключить.

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

  3. 20 минут назад, Garik66 сказал:

    короче хочешь чтобы твой герой ходил по воздуху, воде "аки посуху"

    Истинну глаголишь дядя Гарик! Хочу, что бы мой герой не просто ходил, но и был полноценным.

    Сейчас порыл игру, нашел очень много координат ХУZ. Z на пару сантиметров ниже Z персонажа. Пытался изменить, заморозить и т.п.. При отлючении инструкции (nop), персонаж сразу же на месте  начинает прыгать и кряхтеть, как будто пытаясь упасть. Посмотрел все адреса которые изменяет эта иснтрукция, очень много координат Z. Попытался при заморозке инструцкии изменять и координаты, ничего толком не добился.

  4. Ну передвигаться по воздуху я могу. Просто лечу размахивая руками в стороны. Но есть минус, я не могу взаимодействовать с природой, нпц, использовать удочку или оружие. Потому что происходит "свободное падение". Потому и хочу найти как-то возможность переключения в режим падения, плавания, стояния и лежания. Что бы самому это регулировать.

  5. Долго думал как обозвать тему, так и не придумал ничего умнее того, имеем.

    Суть вопроса в следующем:

    В любой игре, будь то онлайн или оффлайн, есть моменты когда персонаж стоит с оружием, просто стоит, сидит, лежит или падает. И вот изменение положения или позиции и нужно найти.

    Зачем это нужно? Хочу заставить персонажа ходить по воде от острова к острова, через реки и озера. По Z персонажа замораживаю и двигаюсь по X и Y, но как только под ногами становится высота больше определенной, персонаж переходит в режим "падения" (машет ручками и норовить ляпнуться на асфальт).

  6. 33 минуты назад, JustHack сказал:

    В общем так, логику создания радара тебе написали. Код реализации дали. Учить основам программирования на C# и базового курса математики, тебя никто не будет. Не хочешь разбираться -> просто воткни этот модуль к себе в проект. Хочешь разобраться -> бери код, бери описание логики, читай код / переделывай под себя / бери какую-то часть, разбирайся и вникай. На поставленный вопрос тебе ответили.

    Жаль тут нет эмодзи поклона в пол.

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

    Зачем ты продолжаешь мусолить тему, если я тебе скинул готовое решение?

    Потому что:

    1. Я не являюсь профи в программировании и не могу идеально читать код. Многие моменты мне не понятны!

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

  8. Так как спойлеры первого сообщения пустые и то сообщение я не могу редактировать, то пусть все будет новым сообщением

    Вот код формы радара, не рабочий, пока просто болванка.

    Спойлер
    
    public partial class Form3 : Form
        {
            Timer t = new Timer();
            int WIDTH = 200, HEIGHT = 200;
            
            float cx, cy; //center
            Bitmap bmp;
            Graphics g;
            
            public Form3()
            {
                InitializeComponent();
            }        
    
            private void Form3_Load(object sender, EventArgs e)
            {
                bmp = new Bitmap(WIDTH + 1, HEIGHT + 1);
                //center
                cx = WIDTH / 2;
                cy = HEIGHT / 2;
              
                this.BackColor = Color.Black;
    
                //timer
                t.Interval = 1000;
                t.Tick += new EventHandler(this.t_Tick);
                t.Start();
            }
    
            private void t_Tick(object sender, EventArgs e)
            {
                g = Graphics.FromImage(bmp);
                
                float XX = (float)Form1.Xdiff; //под следующим спойлером
                float YY = (float)Form1.Ydiff; //под следующим спойлером
              
                PointF point1 = new PointF(cx, cy);
                PointF point2 = new PointF(XX, YY);            
    
                g.Clear(Color.White); //еще не вникал, что это делает
    
                //рисуем круг
                g.DrawEllipse(new Pen(Color.Green, 1f), 0, 0, WIDTH, HEIGHT);
    
                //Рисуем стрелку 
                Pen blackPen = new Pen(Color.Green, 2);
    
                g.DrawLine(blackPen, point1, point2);
    
                g.Dispose();
            }
        }

     

    А теперь вот код с вычислением угла, который прекрасно работает уже много времени

    Спойлер
    
    private void CalcAngle2() //Калькуляция угла поворота
            {
                while (stopThreadeFlag != 0)
                {
                    nX = EndXX; //Координаты точки
                    nY = EndYY; //Координаты точки
                    X = XXmem; //Текущие координаты игрока
                    Y = YYmem; //Текущие координаты игрока
                    //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; //переводим с градусов в радианы
                }            
            }

     

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

  9. 3d координаты и актера и точки есть. Я просто не вижу смысла использовать Z координаты.

    Положение актера у нас будет всегда в центре компаса.

    Как перенести игровые координаты точки в координаты на плоскости радара, я не знаю. В этом и вопрос.

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

  10. Задумал интересную задачку, пока сам не смог реализовать, так как не сильно понимаю как взять координаты для построения линии.

    Ну да все по порядку.

    Есть 2 координаты: Моя текущая (FactX, FactY) и конечная точка (endX, EndY)

    Нужно в C# в небольшом окошке нарисовать стрелку (как на компасе) указывающую с центра и в направлении конечной точки.

    будем использовать System.Drawing

    Далее код который у меня есть, но который не работает и он вообще не доведен до ума.

    Спойлер

     

     

    Проблема возникает на моменте вычисления координат. За пример брал аналоговые часы. Но это не совсем корректно.

    Так же есть интересный код, который мы тут ранее обсуждали (старая тема)

    Приведу сюда вычисление угла
     

    Спойлер

     

     

    Но пока то, что имею не могу применить. Дайте напутствие форумчане!

    Заранее спасибо.

  11. Не знаю, правильно ли я назвал тему или то, что я хочу сделать это не вызов функции.

    В общем есть в игре функция Вот такая

    ASJzFgrbSCGx7cpAosYWcQ.jpg

    Она уже готовая и при определенных условиях к ней игра обращается, а дальше либо происходит действие, либо ничего не происходит. Т.е. когда появляется диалог, то происходит активация, если диалога нет, то и активации нет.

    Так вот мне нужно обращаться к этой функции бесконечно.

    Ну к примеру, что-то типа:

    140927028:
    
    je 140927031

    Естественно, если я через AAssembler такое напишу, то у меня произойдет запись по адресу 140927028, а не обращение запуск функции в этом адресе.

    И вот сижу и туплю. Гугл как то не курится и буквы разлазятся по сторонам. Может кто имеет светлую мысль?

  12. Есть у меня телепорт-бот, он телепортируется по координатам взятым с лист бокса. Работает отлично, без нареканий.

    Но появилась нужна сделать бота, который будет тупо лететь с точки А в точку Б, которые находятся на огромном расстоянии друг от друга и за 1 раз нельзя сделать такой прыжок. В игре есть некая "защита" от таких телепортов, максимальный шаг 10-15 метров.

    Координаты имеют вот такой вид: 4009,14; -34,06; -39,59;

    Могут быть как положительными, так и отрицательными.

    Сижу и думаю, как бы это реализовать. По идее тут можно вычислить 2 вектора, Х и У. А дальше перемещаться по этим векторам с шагом не превышающим 10 метров. но пока что на этой догадке и остановился.

    Видел приблизительное решение задачи, но оно на С++ и я не уверен, что в Шарпе так же будет реализоваться. Привожу функцию:

    Спойлер
    
    void AutoTP(float x, float y, float z) 
    {
    	if (ActivatedTP)
    	{
    
    		uintptr_t TPX = GetDMA(PlayerAddr, TeleportOffsetsX, 4);
    		uintptr_t TPY = GetDMA(PlayerAddr, TeleportOffsetsY, 4);
    		uintptr_t TPZ = GetDMA(PlayerAddr, TeleportOffsetsZ, 4);
    		float Xposo = Read<float>(TPX);
    		float Yposo = Read<float>(TPY);
    
    		float start[] = { Xposo, Yposo };
    		float end[] = { x, y };
    		std::cout << "AutoPathing from (" << start[0] << "," << start[1] << ") to ("
    			<< end[0] << "," << end[1] << ")" << std::endl;
    
    		float minDistance = 8;
    		double distance = sqrt(powf(end[0] - start[0], 2) + powf(end[1] - start[1], 2));
    		int steps = distance / minDistance;
    		float dVec[] = { 0 , 0 };
    		dVec[0] = (end[0] - start[0]) / steps;
    		dVec[1] = (end[1] - start[1]) / steps;
    		vector< vector<float> > stepVec(steps, vector<float>(2));
    		int i;
    		float currPos[] = { start[0] , start[1] };
    		for (i = 0; i < steps; i++)
    		{
    			//Add each step with dist for new vector of points
    			vector<float> tempVec(2);
    			tempVec[0] = dVec[0] + currPos[0];
    			tempVec[1] = dVec[1] + currPos[1];
    
    			// Update theorytical current position player would be now for next increment
    			// Since its a primary type ( float ) I don't think we need to clone
    
    			currPos[0] = tempVec[0];
    			currPos[1] = tempVec[1];
    
    			// Push calculated step vector into our array of arrays
    			stepVec[i] = tempVec;
    		}
    
    		// Our steps array is populated with coords
    		// Simply for loop for TP
    		
    		for (i = 0; i < steps; i++)
    		{
    			if (ActivatedTP)
    			{
    				TP(stepVec[i][0], stepVec[i][1], tpheight);
    				std::cout << stepVec[i][0] << ", " << stepVec[i][1] << ", " << tpheight << std::endl;
    				std::this_thread::sleep_for(std::chrono::milliseconds(timedelay));
    			}
    		}
    		Sleep(500);
    		Xposo = Read<float>(TPX);
    		Yposo = Read<float>(TPY);
    		Zposo = Read<float>(TPZ);
    		double distanceleft = sqrt(powf(end[0] - Xposo, 2) + powf(end[1] - Yposo, 2));
    		if (distanceleft < 8 & ActivatedTP)
    		{
    			Zposo = Read<float>(TPZ);
    			float swapheight = Zposo - z;
    			std::cout << "Distance to ground." << swapheight << std::endl;
    			while (swapheight > 40 & ActivatedTP)
    			{
    				std::cout << "Too far up, descending." << std::endl;
    				Zposo = Read<float>(TPZ);
    				swapheight = Zposo - z;
    				Write(TPZ, Zposo - 10);
    				Sleep(100);
    			}
    			RestoreTP();
    			Sleep(2000);
    			while (Read<float>(TPZ) != z & ActivatedTP)
    			{
    				Write(TPZ, z);
    				Sleep(2000);
    			}
    			std::cout << "Finished Teleport." << std::endl;
    			//RestoreTP();
    		}
    		else
    		{
    			if (ActivatedTP)
    			{
    				AutoTP(x, y, z);
    			}
    		}
    	}
    }

     

    Вроде бы и расписано, но пока кто то не разжует, могу сидеть долго тупить.

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

  13. Только что, JustHack сказал:

    Почему я вообще тебе ответил? Потому-что мне стало смешно. Ты пишешь

    Так если ты можешь прочитать код и понимаешь, как он работает, что тебе мешает самому обрезать всё лишнее? Просто зачем писать, что можешь прочитать ?

    Я и Английский читать могу и даже немного понимаю прочитанное, но это не значит, что я смогу говорить с англичанином, а работать переводчиком тем более ?

    Ну и еще, вот отписался мне один человек, который опытнее меня, так и они сказал, что в коде черт ногу сломит.

    Потому и ищу человека, который заработать хочет.

  14. 9 минут назад, JustHack сказал:

    А ты не думал, что вот эта нужная тебе функция, использует 10 не нужных тебе функций, а может и классов?

    Думал. 10 не использует. Я не смогу переписать под себя, но прочитать могу. Там не такая уж и большая и объемная получается программа, если убрать все не нужное.

    Один человек уже отписался, посмотрим, что он скажет.

  15. Название игры: [C#]Написание функции с исходника

    Версия игры: 1

    Тип издания: Free Source

    Тип запроса: Исходный код

    Цена работы: 1000

    Срок выполнения: 01/28/2019

    Требуемые опции: 

    1. Вытащить с исходника функцию

    Дополнительная информация: 

    Есть исходник, свободно лежащий на просторах интернет. Написан данный исходник на C# (90%) и С++(10%). Программа большая, с кучей ненужных мне функций.

    Мне нужно из всей этой каши, достать 1 функцию и все переменные, которые эта функция использует.

    Сам я код прочитать могу, но вот переписать под себя, это не мой уровень.

    Конечный код по идее должен быть коротким.

    Сроки и оплату обговариваем. Приблизительный бюджет 1000 рублей.

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

    Если есть заинтересованные, пишите в ЛС.

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

    Сообщение выше было и так по существу.

    std::map - ассоциативный контейнер, с парами ключ-значение, в std::map(в std::multimap могут!) ключи повторятся не могут... 

     

    Вот это действительно полезный ответ. Теперь я знаю, что это за контейнер, почитал о нем в гугле. И понимаю, что g_targets всего навсего имя этого контейнера.

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

    1 час назад, JustHack сказал:
    2 часа назад, pachela сказал:

    хотелось видеть в теме сообщения по существу, а не бессмысленный спам.

    Это не бессмысленный спам, а очень дельный совет)) Судя по этому предложению

    Цитата

    я не могу понять, эта табличка массив или переменная?

    Даже нужно начать не с изучения C++, а с изучения программирования в целом)) Если ты не понимаешь даже, что это, как ты собрался считывать это?) Исходя из этого, вот этот ответ

    1 час назад, temtriss сказал:

    std::map - ассоциативный контейнер, с парами ключ-значение, в std::map(в std::multimap могут!) ключи повторятся не могут... 

    Тебе никак не поможет вообще.

    Может и не поможет, но точно уж не помешает. Информативной нагрузки твои сообщения не несут и это печалит.

    Я не являюсь про программистом. Чисто для себя как хобби пишу трейнеры. С++ для меня слишком круто, 2-3 часа в неделю, слишком мало, для его изучения. Тут бы в Шарпе и CE Lua не потеряться.

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

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

  17. 1 час назад, JustHack сказал:

    Может стоит начать изучать C++? Это кощунство такие вопросы задавать.

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

    А так, мне бы хотелось видеть в теме сообщения по существу, а не бессмысленный спам.

  18. Есть некоторая функция или не функция, я С++ не знаю что это такое =), в которой содержится некая информация. Вот пример:

    static std::map<std::string, uint32_t> g_targets = {
        { "Shaggy Dog", 17939 },
        { "Chubby Dog", 17966 },
        { "Panda", 18098 },
        { "Snowball", 18426 },
        { "Crow", 18439 },
        { "Horse", 21012 },
        { "Horn Bow +0", 13138 },    
    };

    Я хочу, что бы содержимое g_targets загружалось с тхт файла. Да только в связи с тем, что я С++ вообще не знаю, я не могу понять, эта табличка массив или переменная? Это одна строка, для удобства чтения разбитая на несколько или массив?

    В общем то прошу помочь, объяснить непонятки. И будет отдельное спасибо за пример правильного кода.

  19. Приветствую  завсегдатаев и залетных читаков, прошу помощи, так как гугл не смог этого сделать.

    У меня есть некий приватный чит, который хотелось бы юзать на халяву. Сам лаунчер чита, который отвечает за авторизацию и инжект в игру написан на C# и накрыт ConfuserEX-1.0.0.2.

    Так вот естественно, что в dnSpy я вижу не код, а краказябру в фуркциях. Вроде бы как это полные настройки конфузера.

    Поискал в гугле способы снять защиту, все что нашел, применил, но вот результата нету, файл Koi не достать.

    Возможно я не все нарыл или возможно руки не из того места, но результат один.

    Прошу помочь кто чем может. Ссылки, советы или личное участие в снятии защиты.

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

    Спасибо всем неравнодушным.

  20. Такс. Вылез косяк, раньше для записи точек, по которым должен двигаться бот, использовал горячие клавиши. Сейчас решил освободить клавиатуру и перенести горячую клавишу с букв, на цифры и вылез косяк.

    Для того, что бы прикрутить перехват горячих клавиш, я использовал API

    Спойлер
    
    [DllImport("User32.dll")]   //Для хоткея 2 строки
            private static extern short GetAsyncKeyState(Keys vKey);
    
    int arch_1 = Convert.ToInt32(GetAsyncKeyState(Keys.MButton).ToString());
                        if (arch_1 != 0)
                            {
                                Kliker_Hunter();
                            }

     

    Но вот беда, когда я пытаюсь убрать к примеру MButton и вписать туда, к примеру цифру 3 (НЕ ЦИФРОВАЯ КЛАВИАТУРА СБОРКУ!!!), то в выпадающем списке нет цифр. Ну думаю прикручу виртуальный код, и тут я немного не пойму как сделать.

    И может кто подсказать, что это за клавиши в выпадающем списке? b9774be317dfcd5ff1c1f5010892ec66.png

  21. 2zolo2, сколько я не читал, везде пишут, что для DiretX игр PostMessage и SendMessage не подходят. Сам проверить не могу, так как толком не могу разобраться с ними и с Spy++. Пытаюсь отловить, сообщения, но окно остается пустым, может какая защита не дает словить сообщения?

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

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

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