Вариант конечно хороший, но есть всякие пидорасы, которую эту папку меняютон и так по стандарту в сф, а так:
C++:std::filesystem::current_path();
Поэтому лучше GetModuleFilename + GetModuleHandle(0)
Вариант конечно хороший, но есть всякие пидорасы, которую эту папку меняютон и так по стандарту в сф, а так:
C++:std::filesystem::current_path();
Лучше через peb -> ProcessParameters -> ImagePathNameВариант конечно хороший, но есть всякие пидорасы, которую эту папку меняют
Поэтому лучше GetModuleFilename + GetModuleHandle(0)
В смысле папку поменять?Вариант конечно хороший, но есть всякие пидорасы, которую эту папку меняют
Поэтому лучше GetModuleFilename + GetModuleHandle(0)
всмысле текущий путь может меняться. Это даже игра делает во время загрузкиВ смысле папку поменять?
То что предложил даркпиксель x86Как получить путь к папке c игрой?
PPEB peb = (PPEB)__readfsdword(0x30);
std::wcout << peb->ProcessParameters->ImagePathName.Buffer;
Куда выводит? код? многобайтовая кодировка? что читаешь? может там и записаны иероглифыПри чтении строк библиотекой fstream, плагин СФ выводит иероглифы, как исправить?
Пробовал в консоль и в чат выводить, многобайтовая кодировка стоит, читаю txt по строкам анг. буквы и цифры.Куда выводит? код? многобайтовая кодировка? что читаешь? может там и записаны иероглифы
Код, поаж, мб флаги там неправильныеПробовал в консоль и в чат выводить, многобайтовая кодировка стоит, читаю txt по строкам анг. буквы и цифры.
Ну хотябы озы c++ поучиПри компиляции вот такого кода ( SFPlugin )
cod:#include <Windows.h> #include "main.h" SAMPFUNCS *SF = new SAMPFUNCS(); void __stdcall mainloop() void CALLBACK cmd_show_info_player(std::string param); { if (param.empty()) return; int i = std::stoi(param); char buf[128]; stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer[i]; if (!pPlayer) return; sprintf(buf, "Nickname - %s, Ping - %d, Score - %d, isNPC - %d, AFKState - %d", pPlayer->szPlayerName, pPlayer->iPing, pPlayer->iScore, pPlayer->iIsNPC, pPlayer->pPlayerData->iAFKState == 2); SF->getSAMP()->getChat()->AddChatMessage(-1, buf); }; { static bool initialized = false; if (!initialized) { if (GAME && GAME->GetSystemState() == eSystemState::GS_PLAYING_GAME && SF->getSAMP()->IsInitialized()) { initialized = true; SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), "SAMPFUNCS Plugin loaded."); SF->getSAMP()->registerChatCommand("showinfo", cmd_show_info_player); } } } BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved) { if (dwReasonForCall == DLL_PROCESS_ATTACH) SF->initPlugin(mainloop, hModule); return TRUE; }
Выдаёт такую ошибку:
1>------ Сборка начата: проект: SFPlugin, Конфигурация: Release Win32 ------
1> main.cpp
1>main.cpp(9): error C2144: синтаксическая ошибка: перед "void" требуется ";"
1>main.cpp(10): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>main.cpp(31): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
ладноНу хотябы озы c++ поучи
У тебя явно написано где ошибка, чего не хватает, и почему не компилируетсяПри компиляции вот такого кода ( SFPlugin )
cod:#include <Windows.h> #include "main.h" SAMPFUNCS *SF = new SAMPFUNCS(); void __stdcall mainloop() void CALLBACK cmd_show_info_player(std::string param); { if (param.empty()) return; int i = std::stoi(param); char buf[128]; stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer[i]; if (!pPlayer) return; sprintf(buf, "Nickname - %s, Ping - %d, Score - %d, isNPC - %d, AFKState - %d", pPlayer->szPlayerName, pPlayer->iPing, pPlayer->iScore, pPlayer->iIsNPC, pPlayer->pPlayerData->iAFKState == 2); SF->getSAMP()->getChat()->AddChatMessage(-1, buf); }; { static bool initialized = false; if (!initialized) { if (GAME && GAME->GetSystemState() == eSystemState::GS_PLAYING_GAME && SF->getSAMP()->IsInitialized()) { initialized = true; SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), "SAMPFUNCS Plugin loaded."); SF->getSAMP()->registerChatCommand("showinfo", cmd_show_info_player); } } } BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved) { if (dwReasonForCall == DLL_PROCESS_ATTACH) SF->initPlugin(mainloop, hModule); return TRUE; }
Выдаёт такую ошибку:
1>------ Сборка начата: проект: SFPlugin, Конфигурация: Release Win32 ------
1> main.cpp
1>main.cpp(9): error C2144: синтаксическая ошибка: перед "void" требуется ";"
1>main.cpp(10): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>main.cpp(31): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
std::ifstream file(license_txt);
if (file.is_open())
{
std::string lines;
while (std::getline(file, lines)) // Перебирает строки и потом сравнивает с hdd_now
{
if (lines == hdd_now) {
SF->Log("Путь к файлу: %s\nHDD: %s\nТекст: %s", license_txt, hdd_now, lines);
msg("Подписки куплена, приятного использования");
}
else
{
SF->Log("Путь к файлу: %s\nHDD: %s\nТекст: %s", license_txt, hdd_now, lines);
msg("Подписки нету, её нужно купить");
}
}
file.close();
}
Для std::string следует использовать метод .c_str()Выводит какой-то бред, замахался с этим уже, помогите пожалуйста.
C++:std::ifstream file(license_txt); if (file.is_open()) { std::string lines; while (std::getline(file, lines)) // Перебирает строки и потом сравнивает с hdd_now { if (lines == hdd_now) { SF->Log("Путь к файлу: %s\nHDD: %s\nТекст: %s", license_txt, hdd_now, lines); msg("Подписки куплена, приятного использования"); } else { SF->Log("Путь к файлу: %s\nHDD: %s\nТекст: %s", license_txt, hdd_now, lines); msg("Подписки нету, её нужно купить"); } } file.close(); }
Скрин:
Посмотреть вложение 119843
lines.c_str()