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

srg91

Администраторы
  • Постов

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

  • Победитель дней

    22

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

  1. 26 минут назад, Antonshka сказал:

    Работает исправно, но печатает со второй строки. По задумке нужно с первой.

     

    Да, забавно, я и не заметил. Но похоже лучше уже не сделаю, я очень плох в алгоритмике )

     

     

  2. 40 минут назад, partoftheworlD сказал:

    По мне, так это какие-то жесткие и не здоровые извращения.?

     

    А давайте ещё в один цикл ? А, не увидел что подобное решение уже есть (но кажется у меня получилось чуть лаконичнее) :)

    Спойлер
    
    #include <iostream>
    
    int main() {
        unsigned int height = 20, width = height * 2 - 1;
        unsigned char space = ' ', letter = 'X';
        for (unsigned int i = 1; i <= width * height; i++) {
            std::cout << ((i % width <= width - (i / width) * 2) ? space : letter); 
            if (!(i % width)) std::cout << std::endl;
        }
        return 0;
    }
    

     

    Спойлер
    
    
                                         X
                                       XXX
                                     XXXXX
                                   XXXXXXX
                                 XXXXXXXXX
                               XXXXXXXXXXX
                             XXXXXXXXXXXXX
                           XXXXXXXXXXXXXXX
                         XXXXXXXXXXXXXXXXX
                       XXXXXXXXXXXXXXXXXXX
                     XXXXXXXXXXXXXXXXXXXXX
                   XXXXXXXXXXXXXXXXXXXXXXX
                 XXXXXXXXXXXXXXXXXXXXXXXXX
               XXXXXXXXXXXXXXXXXXXXXXXXXXX
             XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
           XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
       XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    

     

     

    43 минуты назад, Antonshka сказал:

    Но за совет спасибо.

     

    После каждой темы ещё дополнительно тестовое задание с проверкой автоматической системой и в конце - курсовой.

     

    • Смешно 1
  3. 29 минут назад, Antonshka сказал:

    P.S. Написать без использования string() смог бы?

    Очень странно писать на C++ и не использовать std::string :) Это больше в алгоритмы тогда.

     

    Очень советую начинать с вот этого прекрасного курса, ребята рассказывают вполне современный C++: https://www.coursera.org/specializations/c-plus-plus-modern-development

    А дальше время и cppreference.com.

     

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

    Но если этот поток нужно отдавать куда-то еще, например, в скайп, тогда да, устройство виртуальное нужно.

     

    Ну в общем я скачал демку SoundPad'a, при установке он сказал что нашаманил над аудиоустройствами и попросил перезагрузиться.

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

  5. 4 часа назад, MEDBEDb сказал:

    Я имел ввиду в звуковых устройствах,

     

    В целом тебе @Xipho довольно сильно подсказал, когда назвал слово loopback. По нему отлично находятся нужные статьи:

    https://docs.microsoft.com/en-us/windows/desktop/CoreAudio/core-audio-apis-in-windows-vista

    https://docs.microsoft.com/en-us/windows/desktop/CoreAudio/loopback-recording

     

    И там есть ссылки на примеры, они сейчас вынесены из Windows SDK, лежат вот тут: https://github.com/Microsoft/Windows-classic-samples/tree/master/Samples/Win7Samples/multimedia/audio

    У меня с пинка получилось только перенаправить звук с дефолтного аудио-устройства в wav-файл. Нужно разбираться, нужно ли создавать своё устройство под микрофон, в которое писать или всё же можно писать в стандартное.

    В общем вот тебе ссылки - это реально то, что нужно. Но нужно поковырять, с пол-пинка сложно разобраться. Напиши, обязательно, что получится, очень интересно :)

    • Понравилось 1
  6. 10 минут назад, Alex2411 сказал:

    хотел спросить . как  можно узнать  по игре в какой версии рпг макер  она сделана ?

    Я обычно смотрю на размер персонажей. Раньше было просто - если он две клетки в высоту (нормальный рост), то скорее всего это RPG Maker XP.

    Если маленький размером с одну клетку, то скорее всего VX.

    Ещё можно посмотреть, что за библиотека используется (например рядом с этой игрой лежи RGSS102E.dll) и по ней выйти на версию (мб через поиск как-то).

    Но конкретно её не узнавал никогда, поэтому не могу сейчас точно сказать.

  7. Только что, Alex2411 сказал:

    на много лучше и проще

    Я даже не знаю, что может быть проще команды "Дай мне 10 000 золота" ? Но тут нужно чуть-чуть поработать, да.

     

    Ну, в любом случае у тебя теперь есть скрипт на золото )

  8. Если вы вдруг ищете простые пути, то моя статья всё так же работает :)

    Спойлер

    2019-02-18 21-18-02.png

     

    Скрипт:

    Спойлер
    
    [ENABLE]
    globalalloc(run_script, 64)
    globalalloc(text, 1024)
    
    text:
    db '$game_party.gain_gold(10000)'
    
    run_script:
    push text
    call RGSSEval
    pop eax
    ret
    
    createthread(run_script)
    
    [DISABLE]
    dealloc(run_script)
    unregistersymbol(run_script)
    
    dealloc(text)
    unregistersymbol(text)

     

     

    • Плюс 1
  9. О, RPG Maker.

    Можно попробовать ломать вот так (правда это не очень красиво и при сохранении может сломаться игра):

    Спойлер

     


    И да, конечно тысячи адресов, это же виртуальная машина с Ruby на борту.

  10. Круто!

    Я просто чуть-чуть добавлю, для улучшения стилистики кода на будущее.

     

    Вместо классов с публичным модификатором доступа (class + public:) можно использовать struct:

    Спойлер
    
    struct Vector3
    {
    	float x;
    	float y;
    	float z;
    };
    

    struct - тот же класс, только он public по умолчанию

     

    Очень советую больше использовать auto, тогда многие вещи превращаются в лаконичное:

    Спойлер
    
    auto Entity = reinterpret_cast<LocalPlayer*>(TemporaryObject);
    
    auto pPlayer = reinterpret_cast<LocalPlayer*>(player);
    
    auto i = EntityList.find(TemporaryObject);

     

     

    Простые структуры прекрасно инициализируются:

    Спойлер
    
    Vector3 entityPos = {
      TempEntity->pPosition->pos_x,
      TempEntity->pPosition->pos_y,
      TempEntity->pPosition->pox_z
    };
    

     

     

    Да и переменные в структуре можно указать в одну строку:

    Спойлер
    
    struct Vector3
    {
    	float x, y, z;
    };
    

     

    Писать class в таких местах не обязательно:

    Спойлер
    
    struct Actors
    {
    	char pad_0000[64]; //0x0000
    	LocalPlayer* pLocalPlayer; //0x0040
    }; //Size: 0x0044

     

     

    И не используйте в C++ C-подобные приведения типов (как (float)1), как минимум можно записать это как 1. 

    Если где-то ошибся, пишите, пожалуйста :)

     

  11. Дополняю эти страшные слова: используй просто char c; вместо char *c;

    Плюс если ты хочешь указать один единственный символ - используются одинарные кавычки: if (c == '+')

    Вместо system("pause"); лучше использовать cin.ignore();

    • Плюс 1
  12. 7 часов назад, Xipho сказал:

    wglGetCurrentContext пробовал?

     

    Поддерживаю.

     

    В OGLHook делал именно так: после хука glSwapBuffers сохранял текущий контекст через wglGetCurrentContext, после создавал новый через wglCreateContext, переключался на новый через wglMakeCurrent, рисовал всё что нужно и возвращал старый через wglMakeCurrent

    Главное помнить, что если работать в отдельном потоке - нужно создавать контекст и на него. Я так создавал поток, в котором грузил текстуры параллельно с выполнением основного кода, но пришлось сращивать контексты через wglShareLists.

    • Плюс 1
  13. 33 минуты назад, partoftheworlD сказал:

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

    С такими условиями еще бы WriteUp от автора )

     

  14. Отключил старый виджет кода. Старые блоки кода редактируются как и раньше, но создать их больше нельзя. 

     

    О проблемах, пожалуйста, сообщайте. Но судя по тому, что за почти год не было жалоб, то проблем не должно быть.

    Для точного применения изменений поможет сброс кеша браузера.

     

    Визуальные изменения:

    Спойлер

    2018-12-11 10-28-02.png

     

    • Понравилось 1
  15. 1 минуту назад, partoftheworlD сказал:

     

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

     

    спасибо за разъяснение, с такой магией вообще не сталкивался, поэтому отчаливаю

     

  16. Я мимо крокодил, потому что плаваю в этой тебе (сам почти не занимался таким), но попробую начать обсуждение.

    Ты хочешь просто создать отдельный lua-state и работать в нем или всё же использовать уже существующий?

     

    Потому что если хочешь использовать уже существующий, то самое главное - это найти уже существующий state (обычная структурка, если не ошибаюсь), а дальше просто передавать её в вызовы сишных lua-функций. В целом есть дока: https://www.lua.org/manual/5.3/manual.html#4

    Но я бы еще порекоммендовал посмотреть код cheat-engine и его работы с lua, потому что это нагляднее :)

     

     

  17. 1 минуту назад, nedix сказал:

    Можно спросить, почему в том коде нет "aobscanmodule()"?

     

    А зачем? Это обучение вызыва функций, а не туториал по всему cheat engine.

    Научишься применять createthread, потом научишься применять aobscanmodule где-нибудь еще.

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

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

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