Зачем тебе поток?Я использую поток с циклом. Выгружаю значит скрипт, сворачиваю игру. Затем разворачиваю её и у меня чёрный экран. Цикл останавливаю через EVENT
Помогите сделать нормальный поток с остановкой цикла и завершением самого потока при отгрузке скрипта)
C++:HANDLE event; void ThreadProc(void* pParam) { while (WaitForSingleObject(event, 100) != WAIT_OBJECT_0) { // Anything actions in while } _endthread(); } void CALLBACK mainloop() { static bool init = false; if (!init) { if (GAME == nullptr) return; if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME) return; if (!SF->getSAMP()->IsInitialized()) return; event = CreateEvent(NULL, FALSE, FALSE, NULL); _beginthread(ThreadProc, 0, NULL); init = true; } } BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved) { switch (dwReasonForCall) { case DLL_PROCESS_ATTACH: { SF->initPlugin(mainloop, hModule); } break; case DLL_PROCESS_DETACH: { SetEvent(event); } break; } return TRUE; }
@SR_team @DarkP1xel помогитеПриветствую. Есть несколько вопросов, желаю по всем получить ответ, конечно =)
1) Как найти оффсеты на самп-античит (который фризит)? Мне нужно для КРМП, но оффсеты я желаю найти сам, хочу получить лишь пошаговый алгоритм действий (это тебе не хп или координаты искать, не от чего оттолкнуться).
2) Я сделал хук функции [посл. введённая команда], но там есть несколько багов. Помогите, плиз (всё описал в посту): клик
3) Как на чистом С++ заспавнить машину? Тоже интересно узнать, желательно опять таки, не скидывать функцию из собейта, а расписать пошаговый алгоритм (хотя бы примерный), чтобы я смог повторить его в других играх (не только самп).
Пока что всё =) Еще раз спасибки
удачи тебе со спавном инфернуса в варкрафте, используя метод из гта. А ач ищется так же как и хп с координатами@SR_team @DarkP1xel помогите
А можешь более конкретно ответить? Ты по сути нифига не сказал, а все 3 вопроса остаются в силе (кста, не играю в варкрафт, сравнить машины в одинухе гта 5)удачи тебе со спавном инфернуса в варкрафте, используя метод из гта. А ач ищется так же как и хп с координатами
от фриза. Ты можешь быть заморожен или нет, как найдешь 3-10 значений, чекни нет ли кого из них в сампе, и если есть, то далее работай только с ними, а если нет, то со всеми. Далее вешаешь бп на запись и смотришь откуда пишет, если записи из сампа нет, то находи начала функций и смотри откуда они вызываются. Уходя вглубь по функциям рано или поздно точно выйдешь в самп, но не обязательно в ач. Далее иди вглубь по функциям в сампе, смотри условия вызова, и так придешь в ач.От чего оттолкнуться
Спасибо, сделаю, все понял)от фриза. Ты можешь быть заморожен или нет, как найдешь 3-10 значений, чекни нет ли кого из них в сампе, и если есть, то далее работай только с ними, а если нет, то со всеми. Далее вешаешь бп на запись и смотришь откуда пишет, если записи из сампа нет, то находи начала функций и смотри откуда они вызываются. Уходя вглубь по функциям рано или поздно точно выйдешь в самп, но не обязательно в ач. Далее иди вглубь по функциям в сампе, смотри условия вызова, и так придешь в ач.
В общем, как я и сказал, алгоритм идентичен поиску хп/коорд
так же. Это универсальный метод поиска нужного кодаСпасибо, сделаю, все понял)
А по поводу спавна все же как?)
А потом просто его вызывать? А аргументы как искать? И еще в первом посту я скинул ссылку на то, где я пытался сделать хук, но по непонятным мне причинам тщетно.так же. Это универсальный метод поиска нужного кода
Чекай регистры и запушивание в стек непосредственно перед вызовом функции, и обращения к [ebp+...] в самой функцииА аргументы как искать?
как можно получить разрешение экрана (игры) без SFAPI
/* Глобально в системе. */
POINT globalScreenResolution = { GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN)) }
/* Установленное игрой. */
POINT gameScreenResolution = { *reinterpret_cast<unsigned int *>(0xC9C040), *reinterpret_cast<unsigned int *>(0xC9C044) }
local pool = ffi.cast('struct stGangzonePool*', sampGetGangzonePoolPtr())
local color = pool.pGangzone[id].dwColor
stGangzonePool* pool = SF->getSAMP()->getInfo()->pPools->pGangzone;
pool->pGangzone[id]->dwColor;
Через хук.Приветствую.
Как, используя sampfuncs, при получении RPC_ScrGangZoneStopFlash прочесть новый цвет гангзоны (если она была захвачена)?
В Lua работает просто используя
, а вот sampfuncs'е черезКод:local pool = ffi.cast('struct stGangzonePool*', sampGetGangzonePoolPtr()) local color = pool.pGangzone[id].dwColor
отображает старый цвет гангзоны.Код:stGangzonePool* pool = SF->getSAMP()->getInfo()->pPools->pGangzone; pool->pGangzone[id]->dwColor;