Другое С/С++ Вопрос - Ответ

Тема в разделе "C, C++", создана пользователем Jesik, 10 май 2013.

  1. iAmerican

    iAmerican Известный пользователь

    Регистрация:
    17.02.14
    Сообщения:
    262
    Лайки:
    50
    Репутация:
    11
    Код (C++):

    if (strstr(szPlayerName, "nickname") != NULL) {
                SF->getSAMP()->getChat()->AddChatMessage(D3DPlayerColor, "%s[%d] Подключился к серверу.", szPlayerName, sPlayerID); // добавляем сообщение в чат.
            }
     
    хотя вроде будет правильнее strcmp , ну сам погугли, поймешь
     
    #1241
  2. Woofing Giraffe

    Woofing Giraffe Известный пользователь

    Регистрация:
    14.06.15
    Сообщения:
    368
    Лайки:
    40
    Репутация:
    14
    Функция есть получения ника, ну а если так, то ID со своим сравнивай, или строку со строкой. Хотя я хз отправляется ли этот RPC при твоем коннекте
     
    #1242
  3. barspinoff

    barspinoff Известный пользователь

    Регистрация:
    31.12.15
    Сообщения:
    78
    Лайки:
    1
    Репутация:
    0
    "nickname"? не понял. Мне нужен именно мой ник, под которым я зайду, а LocalPlayerName у меня иногда с кривыми символами отображается.
     
    #1243
  4. Dark_Knight

    Dark_Knight Фипа не обижать. Я його "кохаю".
    Друг

    Регистрация:
    18.03.13
    Сообщения:
    1.992
    Лайки:
    518
    Репутация:
    176
    Как читаешь? После упрочнения надо записывать ноль в конце строки.
    char text[123];
    auto len = strlen(text);
    text[len] = '\0';
     
    #1244
  5. p1cador

    p1cador tvoy ded
    Проверенный

    Регистрация:
    19.03.14
    Сообщения:
    109
    Лайки:
    97
    Репутация:
    31
    Хочу собрать в .asi все свои наработки. По /командам все раскидывать уже не вариант, хочу сделать простую менюшку.
    Начал делать

    Но почему-то кажется, что у меня адский говнокод, размер файла растет пиздец как быстро, хотелось бы подглядывать куда-нибудь. Дайте пож. ссылки на соурсы каких-нибудь ПРОСТЫХ менюшек, чтобы можно было изучить, как там все устроено, классы там, всякое такое.
     
    #1245
    iAmerican нравится это.
  6. FYP

    FYP админ какой-то

    Регистрация:
    09.03.13
    Сообщения:
    688
    Лайки:
    1.464
    Репутация:
    628
    никогда не видел каких-то идеальных интерфейсов в опенсорсных читах, у всех всегда всё по-своему. думал, знаю один такой вариант, хотел предложить, но сейчас глянул - тоже дерьмо. в общем, либо делать тоже как умеешь, либо использовать готовые универсальные gui - они уж точно подойдут под любые нужды. но если всё же найдёшь что-то годное - поделись, если не затруднит.
     
    #1246
    iAmerican нравится это.
  7. iAmerican

    iAmerican Известный пользователь

    Регистрация:
    17.02.14
    Сообщения:
    262
    Лайки:
    50
    Репутация:
    11
    https://zhyk.ru/forum/showthread.php?t=840968
    Мне вот эта статья когда-то помогла. Делал тоже самое что и ты.
     
    #1247
    p1cador нравится это.
  8. p1cador

    p1cador tvoy ded
    Проверенный

    Регистрация:
    19.03.14
    Сообщения:
    109
    Лайки:
    97
    Репутация:
    31
    да-да, давно видел этот гайд на жуке, спасибо что напомнил
    получается пока как-то так
    это не столько сложно, сколько скучно и однообразно, столько всякого дерьма нужно учесть
     
    #1248
    iAmerican нравится это.
  9. p1cador

    p1cador tvoy ded
    Проверенный

    Регистрация:
    19.03.14
    Сообщения:
    109
    Лайки:
    97
    Репутация:
    31
    Жопа полыхает.
    Код (C++):
    samp_dll = (uint32_t)LoadLibrary("samp.dll");
    kek = (stScoreboardInfo *)(samp_dll + 0x21A0B4); //SAMP_SCOREBOARD_INFO 0x21A0B4
    дебаг вывод (вдруг ошибка в получении):
    sa-mp-345.png
    (предпоследнее samp_dll, последнее kek->iIsEnabled )
    проверка:
    Безымянный2.png
    все правильно. Идем дальше. Адрес 1b505d0, смотрим, ставим брекпоинт на запись
    Безымянный4.png
    разворачиваем, жмем tab, брекпоинт срабатывает
    Безымянный5.png
    Нубовопросы:
    1) какого хуя в углу на 1 скрине рендерится адрес, а не само значение
    2) является ли адрес структуры адресом первого поля? Просто тогда не добавлял бы целую структуру ради одного значения
     
    #1249
    Последнее редактирование: 11 окт 2016
  10. FYP

    FYP админ какой-то

    Регистрация:
    09.03.13
    Сообщения:
    688
    Лайки:
    1.464
    Репутация:
    628
    по этому адресу находится указатель на структуру, соответственно, его нужно разыменовать перед обращением к структуре.
    Код (C++):
    kek = *(stScoreboardInfo **)(samp_dll + 0x21A0B4); //SAMP_SCOREBOARD_INFO 0x21A0B4
     
    #1250
  11. Skadi

    Skadi Активный пользователь

    Регистрация:
    03.11.14
    Сообщения:
    43
    Лайки:
    6
    Репутация:
    8
    #1251
  12. iAmerican

    iAmerican Известный пользователь

    Регистрация:
    17.02.14
    Сообщения:
    262
    Лайки:
    50
    Репутация:
    11
    #1252
  13. SR_team

    SR_team BH Team
    BH Team

    Регистрация:
    26.10.13
    Сообщения:
    2.445
    Лайки:
    1.368
    Репутация:
    395
    #1253
  14. Skadi

    Skadi Активный пользователь

    Регистрация:
    03.11.14
    Сообщения:
    43
    Лайки:
    6
    Репутация:
    8
    где она там?
     
    #1254
  15. return

    return Известный пользователь

    Регистрация:
    29.07.15
    Сообщения:
    56
    Лайки:
    0
    Репутация:
    0
    как привести pPresentParam.BackBufferWidth / 2 и pPresentParam.BackBufferHeight / 2 в обычное число ?
     
    #1255
  16. Dark_Knight

    Dark_Knight Фипа не обижать. Я його "кохаю".
    Друг

    Регистрация:
    18.03.13
    Сообщения:
    1.992
    Лайки:
    518
    Репутация:
    176
    Всмысле в обычное?
     
    #1256
  17. SR_team

    SR_team BH Team
    BH Team

    Регистрация:
    26.10.13
    Сообщения:
    2.445
    Лайки:
    1.368
    Репутация:
    395
    не делить на 2
     
    #1257
  18. return

    return Известный пользователь

    Регистрация:
    29.07.15
    Сообщения:
    56
    Лайки:
    0
    Репутация:
    0
    нет, я имею ввиду, что я получаю этим центр экрана, а как его получить в цифрах?
    что бы можно было записывать не так - pPresentParam.BackBufferWidth / 2 и pPresentParam.BackBufferHeight / 2, а допустим 640 на 512
    я конечно могу сделать под свой экран, но он ведь у всех разный, вот и вопрос возник, как получить центр экрана, без этого - pPresentParam.BackBufferWidth / 2 и pPresentParam.BackBufferHeight / 2 ?
     
    #1258
  19. Dark_Knight

    Dark_Knight Фипа не обижать. Я його "кохаю".
    Друг

    Регистрация:
    18.03.13
    Сообщения:
    1.992
    Лайки:
    518
    Репутация:
    176
    int a = pPresentParam.BackBufferWidth / 2;
     
    #1259
  20. return

    return Известный пользователь

    Регистрация:
    29.07.15
    Сообщения:
    56
    Лайки:
    0
    Репутация:
    0
    если использовать pPresentParam.BackBufferWidth, то я не могу его изменять.
    мне нужно получать число, которое я в дальнейшем буду изменять на своё.

    есть альтернатива pPresentParam.BackBufferWidth и pPresentParam.BackBufferHeight ?
     
    #1260
  21. SR_team

    SR_team BH Team
    BH Team

    Регистрация:
    26.10.13
    Сообщения:
    2.445
    Лайки:
    1.368
    Репутация:
    395
    ты чо идиот? в чем проблема его изменения?
     
    #1261
  22. NarutoUA

    NarutoUA Хокаге
    BH Team

    Регистрация:
    26.05.13
    Сообщения:
    529
    Лайки:
    571
    Репутация:
    270
    ты чо хочешь разрешение экрана менять? так просто не получится
     
    #1262
  23. iAmerican

    iAmerican Известный пользователь

    Регистрация:
    17.02.14
    Сообщения:
    262
    Лайки:
    50
    Репутация:
    11
    Код (C++):
    iX = GetSystemMetrics(SM_CXSCREEN) / 2;
                iY = GetSystemMetrics(SM_CYSCREEN) / 2;
     
    #1263
  24. Rapt0r6113

    Rapt0r6113 Известный пользователь

    Регистрация:
    10.07.15
    Сообщения:
    98
    Лайки:
    8
    Репутация:
    0
    Киньте ссылку на норм учебник или видосик по C++, буду благодарен
     
    #1264
  25. Dark_Knight

    Dark_Knight Фипа не обижать. Я його "кохаю".
    Друг

    Регистрация:
    18.03.13
    Сообщения:
    1.992
    Лайки:
    518
    Репутация:
    176
    Страуструп с++ 4 издание
     
    #1265
  26. Rapt0r6113

    Rapt0r6113 Известный пользователь

    Регистрация:
    10.07.15
    Сообщения:
    98
    Лайки:
    8
    Репутация:
    0
    спс, почитаю
     
    #1266
  27. iAmerican

    iAmerican Известный пользователь

    Регистрация:
    17.02.14
    Сообщения:
    262
    Лайки:
    50
    Репутация:
    11
    youtube С++ уроки.
    http://cppstudio.com - лучший сайт , ИМХО
     
    #1267
  28. Rapt0r6113

    Rapt0r6113 Известный пользователь

    Регистрация:
    10.07.15
    Сообщения:
    98
    Лайки:
    8
    Репутация:
    0
    Как редактировать адреса памяти? например надо 0xB7CEE4 (бесконечный бег) сделать включённым, если спросите, почему в клео не сделать, отвечу, что для ГВ нужно(exe формат)
     
    #1268
  29. AWRage

    Проверенный

    Регистрация:
    10.07.15
    Сообщения:
    635
    Лайки:
    115
    Репутация:
    53
    bool b = *(bool *)0xB7CEE4; // read
    *(bool *)0xB7CEE4 = true; // write
     
    #1269
    Rapt0r6113 нравится это.
  30. Rapt0r6113

    Rapt0r6113 Известный пользователь

    Регистрация:
    10.07.15
    Сообщения:
    98
    Лайки:
    8
    Репутация:
    0
    благодарю
     
    #1270
  31. Dark_Knight

    Dark_Knight Фипа не обижать. Я його "кохаю".
    Друг

    Регистрация:
    18.03.13
    Сообщения:
    1.992
    Лайки:
    518
    Репутация:
    176
    То там по другому делать надо.
     
    #1271
  32. AWRage

    Проверенный

    Регистрация:
    10.07.15
    Сообщения:
    635
    Лайки:
    115
    Репутация:
    53
    Он спросил как редачить адреса памяти. Я ответил.
     
    #1272
  33. Woofing Giraffe

    Woofing Giraffe Известный пользователь

    Регистрация:
    14.06.15
    Сообщения:
    368
    Лайки:
    40
    Репутация:
    14
    Нужно зарандомить число от x до y включительно. Как реализовать? Пробовал так: rand() % (Count[1] - Count[0]) + Count[0];
    На числах от 1 до 9 работает, дальше бред выдает
     
    #1273
  34. FYP

    FYP админ какой-то

    Регистрация:
    09.03.13
    Сообщения:
    688
    Лайки:
    1.464
    Репутация:
    628
    rand() - прошлый век, не надо его юзать.
    Код (C++):
    #include <random>

    int randomInteger(int min, int max)
    {
       static std::random_device rd;
       static std::default_random_engine e1(rd());
       std::uniform_int_distribution<int> uniform_dist(min, max);
       return uniform_dist(e1);
    }
     
    #1274
    Woofing Giraffe нравится это.
  35. p1cador

    p1cador tvoy ded
    Проверенный

    Регистрация:
    19.03.14
    Сообщения:
    109
    Лайки:
    97
    Репутация:
    31
    Несколько вопросов, не касаемых гта:
    1)Steam. HL2: DM. На сервере использвуется VAC. Если сразу после включения игры заинжектить простую .dll, которая хукает directx, то при заходе на сервер прилетает VAC бан, или кикает, или еще че, но если заинжектить ее после подключения к серверу - все работает прекрасно. Неужели в CS:GO будет так же? dZFHfvybigc.jpg
    2)Может есть какие-нибудь хитрости в поиске различных структур в играх? Поделитесь ссылками на статьи/гайды пож. Потому что у меня, кроме как пригласить 2-3 человек на сервер и искать в памяти их хп, позицию и т.п., искать закономерности, разницу между адресами этих значений у игроков (по идее должна быть равна размеру стр-ры), других идей пока что нет.
    3)Или, может, по HL2: DM (движок Source) выкладывали хоть какие-нибудь адреса? Искать всё с нуля впадлу пзедц. Нашел исходники движка, но они старые и хер знает, сколько потерпели изменений.
     
    #1275
  36. FYP

    FYP админ какой-то

    Регистрация:
    09.03.13
    Сообщения:
    688
    Лайки:
    1.464
    Репутация:
    628
    @Picador
    1. насколько мне известно, инжектить dll туда, где есть встроенный античит - это плохая практика. спустя время такие дллки начинают палится, если не будут замечены античитом сразу же. почему? точно сказать не могу, но можно предположить, что неизвестные библиотеки отправляются на сервера античита для анализа, возможно даже ручного. альтернатива - внешние (external) читы, но и у них есть хуева гора нюансов.
    2. трюки есть, но они все не универсальные. например, в CE есть немало инструментов для автоматического анализа структур, в IDA Pro можно составить структуру из обращения к полям, есть даже отдельная программа ReClass, которая предназначена лишь для одной цели - разбора структур в запущенном процессе, но любые автоматические методы никак не могут гарантировать правильность распознавания, и чаще всего разбор любых структур требует ручного вмешательства.
    3. можно поискать читы с открытыми исходниками. начни с unknowncheats.me, там немало такого контента.
     
    Последние данные очков репутации:
    Devil1606: 2 Очки (побольше подобных ответов на подобные вопросы. надеюсь, не трудно) 26 ноя 2016
    #1276
    Devil1606, AWRage и p1cador нравится это.
  37. Sire

    Sire vk.com/sire_lol
    Друг

    Регистрация:
    20.10.14
    Сообщения:
    409
    Лайки:
    256
    Репутация:
    39
    Код (C++):
    int x = rand() % (B - A + 1) + A;
    я так делал

    Pawn, как пример.
    Код (Text):
    stock FractionName(playerid)
    {
        new fractionname[40];
        switch(pInfo[playerid][pMember])
        {
            case 1: { fractionname = "38"; }
            case 2: { fractionname = "64"; }
            case 3: { fractionname = "208+"; }
             case 4: { fractionname = "++102"; }
            case 5: { fractionname = "283"; }
        }
        return fractionname;
    }
    И потом хуярим например так:
    Код (Text):
    new dialog[24 + 40 + 40]; format(dialog, sizeof(dialog), "%s приглашает Вас присоединиться к %s", pInfo[playerid][pName], FractionName(playerid));
    Kak захуярить на C++ такое? Ну сток создать
     
    #1277
    Последнее редактирование модератором: 17 ноя 2016
  38. Woofing Giraffe

    Woofing Giraffe Известный пользователь

    Регистрация:
    14.06.15
    Сообщения:
    368
    Лайки:
    40
    Репутация:
    14
    char же обычный
     
    #1278
  39. BlackKnigga

    BlackKnigga Известный пользователь

    Регистрация:
    10.01.16
    Сообщения:
    327
    Лайки:
    72
    Репутация:
    42
    Есть две строки, одна указатель, другая массив:
    Код (C++):
    char *pstr = "string",
            str[] = "string";
    Как их сравнить?
     
    #1279
  40. p1cador

    p1cador tvoy ded
    Проверенный

    Регистрация:
    19.03.14
    Сообщения:
    109
    Лайки:
    97
    Репутация:
    31
    @BlackKnigga, название массива(str) это адрес его первого элемента.
    Передай их в соответствующую функцию/напиши сам
     
    #1280
    Последнее редактирование: 22 ноя 2016