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

checkdasound

Известный
Проверенный
963
410
Мне нужно организовать файл с информацией, сформированной по секциям и подсекциям. Я выбрал JSON, а для работы с ним выбрал библиотеку nlohmann/json.

Не уверен, что структуру правильно составил, первый раз работаю с этим форматом.

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

Тоесть вынести все группы конкретного сервера и их содержимое в двумерный массив, std::vector<std::vector<std::string>> groupColors.

groupColors = j["server1"], вот как это сделать? (j - это nlohmann::json)


JSON:
{
    "server1":
    {
        "group1":
        {
            "color1": "FFАААА",
            "color2": "FFAAFF",
            "color2": "FFFFFF"
        },
        "group2":
        {
            "color1": "FFАААА",
            "color2": "FFFFFF"
        }
    },
   "server2":
    {
        "group1":
        {
            "color1": "FFАААА",
            "color2": "FFFFFF"
        },
        "group2":
        {
            "color1": "FFАААА",
            "color2": "FFFFFF"
        }
    }

}
 

SR_team

like pancake
BH Team
4,802
6,473
Мне нужно организовать файл с информацией, сформированной по секциям и подсекциям. Я выбрал JSON, а для работы с ним выбрал библиотеку nlohmann/json.

Не уверен, что структуру правильно составил, первый раз работаю с этим форматом.

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

Тоесть вынести все группы конкретного сервера и их содержимое в двумерный массив, std::vector<std::vector<std::string>> groupColors.

groupColors = j["server1"], вот как это сделать? (j - это nlohmann::json)


JSON:
{
    "server1":
    {
        "group1":
        {
            "color1": "FFАААА",
            "color2": "FFAAFF",
            "color2": "FFFFFF"
        },
        "group2":
        {
            "color1": "FFАААА",
            "color2": "FFFFFF"
        }
    },
   "server2":
    {
        "group1":
        {
            "color1": "FFАААА",
            "color2": "FFFFFF"
        },
        "group2":
        {
            "color1": "FFАААА",
            "color2": "FFFFFF"
        }
    }

}
 
  • Нравится
Реакции: checkdasound

Hatrig

Известный
38
43
Уже придирки. Нэймспейс - нормальная практика, кроме тебя нигде не слышал, что не рекомендуется. Какой-то ты грубый

Тоже добавлю, к текущим ответам - using namespace std является плохой практикой по большому счету для больших проектов, хотя это не рекомендуется делать вообще где-либо, потому что делая так - вы сразу огромное количество вещей делаете предопределенными. Нет никакой гарантии, что в дальнейшем вы что-нибудь не напишете такое, что уже имеет смысл в std.
 

корбус

Известный
434
108
я только начал писать на c++ но при компиляции пишет что нету d3d9x.h(точно не помню, ну короче директИкс) где его скачать?
 

_razor

t.me/sssecretway | ТГК: t.me/razor_code
Всефорумный модератор
1,948
3,211
я только начал писать на c++ но при компиляции пишет что нету d3d9x.h(точно не помню, ну короче директИкс) где его скачать?
поставь DirectX SDK и поставь в настройках проектах пути до хидеров и либ
 

bottom_text

Известный
675
320
1611958842369.png

Мудрецы, как сделать приколюху выше из луа в сф плагине? При телепорте под землёй появляюсь
upd:
LoadMapAroundPoint()
Нашёл какую-то вроде приколюху, но не понимаю как с ней работать да и та ли.
 
Последнее редактирование:

sc6ut

неизвестный
Модератор
382
1,089
Как получить свои координаты?
если я не ошибаюсь, то вот так. к сожаленую проверить не могу.
C++:
DWORD CPed = *reinterpret_cast<DWORD*>(0xB6F5F0);
if (CPed != NULL) {
    DWORD CPed_stPos = *reinterpret_cast<DWORD*>(CPed + 0x14);
    float CPed_X = *reinterpret_cast<float*>(CPed_stPos + 0x30);
    float CPed_Y = *reinterpret_cast<float*>(CPed_stPos + 0x34);
    float CPed_Z = *reinterpret_cast<float*>(CPed_stPos + 0x38);
}
 

DarkP1xel

Сила воли наше всё.
BH Team
3,635
4,982
Мудрецы, как сделать приколюху выше из луа в сф плагине? При телепорте под землёй появляюсь
Загрузка сцены по позиции:
auto cStreaming::loadScene(const class cVector3D *pPos) -> void {
    reinterpret_cast<void(__cdecl *)(const class cVector3D *pPos)>(0x40EB70)(pPos);
    return;
}


Загрузка коллизии сцены по позиции:
auto cStreaming::loadSceneCollision(const class cVector3D *pPos) -> void {
    reinterpret_cast<void(__cdecl *)(const class cVector3D *pPos)>(0x40ED80)(pPos);
    return;
}

Гуглится по переменной среды DXSDK_DIR
Конкретно пятый абзац.
 
  • Нравится
Реакции: darkjer и bottom_text

SR_team

like pancake
BH Team
4,802
6,473
Загрузка сцены по позиции:
auto cStreaming::loadScene(const class cVector3D *pPos) -> void {
    reinterpret_cast<void(__cdecl *)(const class cVector3D *pPos)>(0x40EB70)(pPos);
    return;
}


Загрузка коллизии сцены по позиции:
auto cStreaming::loadSceneCollision(const class cVector3D *pPos) -> void {
    reinterpret_cast<void(__cdecl *)(const class cVector3D *pPos)>(0x40ED80)(pPos);
    return;
}


Гуглится по переменной среды DXSDK_DIR
Конкретно пятый абзац.
Зачем использовать auto ... -> type вне лямбд?
 
  • Нравится
Реакции: imring

ishi

Известный
493
110
Ребят, меня тралит компилятор, помогите

Есть функция, чья задача, это при вызове получить аргументы, отправленные в MessageBoxA, и позволить их изменить
Эта функция корректно отображает аргументы, т.е. всё перехватывается
C++:
__declspec(naked)  void _stdcall printSomeShit(int a, char* b, char* c, int d)
{
    char bb[256];
    char cc[256];
    printf("\n");
    std::cin >> bb;
    b = bb;
    printf("\n");
    std::cin >> cc;
    c = cc;
    printf("\n%d || %s || %s || %d", a, b, c, d);
    _asm ret;
}

Однако же попытки присваивания не меняют значение аргументов, хотя если в отладчике студии свапнуть адреса, то всё сработает
Я решил посмотреть, что делает в этом случае компилятор, и вот:
1612445016382.png

То-есть, он вообще ничего не делает. Он буквально проигнорировал b = bb и не прописал ей инструкций. В смысле? Почему?

Если же попытаться написать &b == &bb, то он даже компилировать программу откажется.
Я не понимаю, что тут происходит ,_,
 

#Northn

Pears Project — уже запущен!
Всефорумный модератор
2,650
2,535
Ребят, меня тралит компилятор, помогите

Есть функция, чья задача, это при вызове получить аргументы, отправленные в MessageBoxA, и позволить их изменить
Эта функция корректно отображает аргументы, т.е. всё перехватывается
C++:
__declspec(naked)  void _stdcall printSomeShit(int a, char* b, char* c, int d)
{
    char bb[256];
    char cc[256];
    printf("\n");
    std::cin >> bb;
    b = bb;
    printf("\n");
    std::cin >> cc;
    c = cc;
    printf("\n%d || %s || %s || %d", a, b, c, d);
    _asm ret;
}

Однако же попытки присваивания не меняют значение аргументов, хотя если в отладчике студии свапнуть адреса, то всё сработает
Я решил посмотреть, что делает в этом случае компилятор, и вот:
Посмотреть вложение 85221
То-есть, он вообще ничего не делает. Он буквально проигнорировал b = bb и не прописал ей инструкций. В смысле? Почему?

Если же попытаться написать &b == &bb, то он даже компилировать программу откажется.
Я не понимаю, что тут происходит ,_,
ну у тебя как минимум __declspec(naked) а ты объявляешь переменные внутри функции
прибавь к ним static (static char) и проверь, как себя поведёт
мсвс запрещает вообще внутри функций объявлять переменные (не static), значит у тебя не мсвс
 
  • Нравится
Реакции: ishi

sc6ut

неизвестный
Модератор
382
1,089
Можно ли как-то подменинить функцию хука на пустышку которая вызывает трамплин, чтобы не прервать цепочку вызовов и не поломать чужие хуки и игру?