1. if (SF->getSAMP()->getPlayers()->pLocalPlayer->byteCurrentWeapon == 24)1) Как проверить что у мну дигл в руке?
2) Как проверить что я выстрелил\стреляю ?
если знаешь клео может просто вызывать опкоды через клео обработчик.Как проиграть специально действие без хука.
Ааа точно,спасибо.если знаешь клео может просто вызывать опкоды через клео обработчик.
SF->getSAMP()->getPlayers()->pLocalPlayer->SetSpecialAction(ид_действия)Как проиграть специально действие без хука.
в функцииНе конектиться к серверу из-за плагина
PHP:#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS #include <windows.h> #include <string> #include <assert.h> #include <process.h> #include "SAMPFUNCS_API.h" #include "game_api\game_api.h" bool STATUS; stFontInfo *pFont; char buf[512]; static bool INIT = false; SAMPFUNCS *SF = new SAMPFUNCS(); bool CALLBACK Present(CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride, CONST RGNDATA *pDirtyRegion) { if (SUCCEEDED(SF->getRender()->BeginRender()) && STATUS == true) { SYSTEMTIME lt; GetLocalTime(<); float FPS = GAME->GetFPS(); sprintf(buf, "Дата: День: %d | Месяц: %d | Год: %d ", lt.wDay, lt.wMonth, lt.wYear); pFont->Print(buf, D3DCOLOR_ARGB(255, 255, 255, 255), 10, 300, false); sprintf(buf, "Время: %02d | %02d | %02d ", lt.wHour, lt.wMinute, lt.wSecond); pFont->Print(buf, D3DCOLOR_ARGB(255, 255, 255, 255), 10, 280, false); sprintf(buf, "FPS: %f ", FPS); pFont->Print(buf, D3DCOLOR_ARGB(255, 0, 255, 0), 10, 260, false); SF->getRender()->EndRender(); } return true; }; void CALLBACK cmdd(std::string param) { if (!param.empty()) return; STATUS ^= true; } void CALLBACK cmdds(std::string param) { SF->getSAMP()->getPlayers()->pLocalPlayer->SetSpecialAction(68); }; bool CALLBACK incomingRPC(stRakNetHookParams *params) { if (params->packetId == ScriptRPCEnumeration::RPC_ScrApplyAnimation && STATUS == true) { short int pID; char animlib[10]; char animname[14]; float fDelta; bool loop, x, y, fr; int time; byte nameLen; int iid = SF->getSAMP()->getPlayers()->sLocalPlayerID; params->bitStream->ResetReadPointer(); params->bitStream->Read(pID); params->bitStream->Read(nameLen); params->bitStream->Read(animlib, nameLen); animlib[nameLen] = '\0'; params->bitStream->Read(nameLen); params->bitStream->Read(animname, nameLen); animname[nameLen] = '\0'; params->bitStream->Read(fDelta); params->bitStream->Read(loop); params->bitStream->Read(x); params->bitStream->Read(y); params->bitStream->Read(fr); params->bitStream->Read(time); params->bitStream->ResetReadPointer(); if (iid == pID && !strcmp("COLT45", animlib) && !strcmp("colt45_reload", animname)) return false; }; }; void CALLBACK cmda(std::string param) { SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), "{0000FF}Command: {FFFFFF}/kuk - мача, /sbiv - сбив анимки перезарядки /times "); SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), "{0000FF}/times - показатель {FFFFFF}FPS, Время, Даты. "); }; void CALLBACK cmd(std::string param) { STATUS ^= true; }; 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; SF->getSAMP()->registerChatCommand("sfhelp", cmda); SF->getSAMP()->registerChatCommand("kuk", cmd); SF->getSAMP()->registerChatCommand("sbiv", cmdd); SF->getSAMP()->registerChatCommand("times", cmdds); SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), "{0000FF}[SFPlugin] {FFFFFF}Loaded by {FF0000}Tray228 {FF0000}Info: /sfhelp"); SF->LogConsole("{FF0000}[SFPlugin] {FFFFFF}загужен by Tray228"); pFont = SF->getRender()->CreateNewFont("Arial", 11, FCR_BORDER); SF->getRakNet()->registerRakNetCallback(RakNetScriptHookType::RAKHOOK_TYPE_INCOMING_RPC, incomingRPC); SF->getRender()->registerD3DCallback(eDirect3DDeviceMethods::D3DMETHOD_PRESENT, Present); init = true; } } BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved) { switch (dwReasonForCall) { case DLL_PROCESS_ATTACH: SF->initPlugin(mainloop, hModule); break; case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; }
bool CALLBACK incomingRPC(stRakNetHookParams *params)
char storka[128] = "Текст лолол яяЯЯя ы"
Как получить строку начиная с "лолол"? Я пытался через sscanf, он эту блядскую букву "я" считает как разделитель строки. Через regex я чёт не понял как делать. Объясните пожалуйста)Код:char storka[128] = "Текст лолол яяЯЯя ы"
Пытался с помощью sscanf(storka, "%[a-zA-Zа-яА-Я]", kek); Но бля, записывает только "Текст лолол ", дальше строка обрывается
char* result = strstr(storka, "лолол");
ну так у тебя одна переменная на две функции, нахуя? сделай на обе функции две разные переменныев проблема в том что я ввожу /times и у меня отключается /sbiv
и так же наоборот
PHP:#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS #include <windows.h> #include <string> #include <assert.h> #include <process.h> #include "SAMPFUNCS_API.h" #include "game_api\game_api.h" int STATUS; stFontInfo *pFont; char buf[512]; static bool INIT = false; SAMPFUNCS *SF = new SAMPFUNCS(); bool CALLBACK Present(CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride, CONST RGNDATA *pDirtyRegion) { if (SUCCEEDED(SF->getRender()->BeginRender()) && STATUS == 2) { SYSTEMTIME lt; GetLocalTime(<); float FPS = GAME->GetFPS(); sprintf(buf, "Дата: День: %d | Месяц: %d | Год: %d ", lt.wDay, lt.wMonth, lt.wYear); pFont->Print(buf, D3DCOLOR_ARGB(255, 255, 255, 255), 10, 300, false); sprintf(buf, "Время: %02d | %02d | %02d ", lt.wHour, lt.wMinute, lt.wSecond); pFont->Print(buf, D3DCOLOR_ARGB(255, 255, 255, 255), 10, 280, false); sprintf(buf, "FPS: %.f ", FPS); pFont->Print(buf, D3DCOLOR_ARGB(255, 0, 255, 0), 10, 260, false); SF->getRender()->EndRender(); } return true; }; void CALLBACK cmdd(std::string param) { if (!param.empty()) return; STATUS = 2; } void CALLBACK cmdds(std::string param) { SF->getSAMP()->getPlayers()->pLocalPlayer->SetSpecialAction(68); }; bool CALLBACK incomingRPC(stRakNetHookParams *params) { if (params->packetId == ScriptRPCEnumeration::RPC_ScrApplyAnimation && STATUS == 1) { short int pID; char animlib[10]; char animname[14]; float fDelta; bool loop, x, y, fr; int time; byte nameLen; int iid = SF->getSAMP()->getPlayers()->sLocalPlayerID; params->bitStream->ResetReadPointer(); params->bitStream->Read(pID); params->bitStream->Read(nameLen); params->bitStream->Read(animlib, nameLen); animlib[nameLen] = '\0'; params->bitStream->Read(nameLen); params->bitStream->Read(animname, nameLen); animname[nameLen] = '\0'; params->bitStream->Read(fDelta); params->bitStream->Read(loop); params->bitStream->Read(x); params->bitStream->Read(y); params->bitStream->Read(fr); params->bitStream->Read(time); params->bitStream->ResetReadPointer(); if (iid == pID && !strcmp("COLT45", animlib) && !strcmp("colt45_reload", animname)) return false; } return true; }; void CALLBACK cmda(std::string param ) { SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), "{0000FF}Command: {FFFFFF}/kuk - мача, /sbiv - сбив анимки перезарядки /times "); SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), "{0000FF}/times - показатель {FFFFFF}FPS, Время, Даты, /fspawn - заспавниться "); SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), "{0000FF}/recconect - {FFFFFF}переподключение на сервер. "); }; void CALLBACK cmd(std::string param) { STATUS = 1; }; void CALLBACK telo(std::string param) { SF->getSAMP()->disconnect(100); SF->getSAMP()->getInfo()->RestartGame(); SF->getSAMP()->getInfo()->iGameState = GAMESTATE_WAIT_CONNECT; }; 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; SF->getSAMP()->registerChatCommand("recconect", telo); SF->getSAMP()->registerChatCommand("sfhelp", cmda); SF->getSAMP()->registerChatCommand("sbiv", cmd); SF->getSAMP()->registerChatCommand("times", cmdd); SF->getSAMP()->registerChatCommand("kuk", cmdds); SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), "{FFFFFF}[{0000FF}SFPlugin]{FFFFFF} {FFFFFF}Loaded{FFFFFF}] by {FF0000}Tray228 {FF0000}Info: /sfhelp"); SF->LogConsole("{FF0000}[SFPlugin] {FFFFFF}загужен by Tray228"); pFont = SF->getRender()->CreateNewFont("Arial", 11, FCR_BORDER); SF->getRakNet()->registerRakNetCallback(RakNetScriptHookType::RAKHOOK_TYPE_INCOMING_RPC, incomingRPC); SF->getRender()->registerD3DCallback(eDirect3DDeviceMethods::D3DMETHOD_PRESENT, Present); init = true; } } BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved) { switch (dwReasonForCall) { case DLL_PROCESS_ATTACH: SF->initPlugin(mainloop, hModule); break; case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; }
Установить кэллбэк при деструкторе игры.Как поставить проверку на ввод команды /q? Чтоб вовремя завершить цикл в потоке, дабы игру не крашило.
void CALLBACK callbackDestructor()
{
//
}
SF->getGame()->registerGameDestructorCallback(callbackDestructor);
Как вызвать sendrate
SF->getSAMP()->setSendRate(eSendrateType::AIMSENDRATE, 100);
enum eSendrateType
{
ONFOOTSENDRATE = 1,
INCARSENDRATE,
AIMSENDRATE
};