Advertisement
Guest User

by 0pc0d3R

a guest
Feb 11th, 2016
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
  2. #include <windows.h>
  3. #include <string>
  4. #include <assert.h>
  5. #include <process.h>
  6. #include <sstream>
  7. #include "SAMPFUNCS_API.h"
  8. #include "game_api\game_api.h"
  9. #pragma warning (disable:4700)
  10. #pragma warning (disable:4244)
  11. #define GetCurrentDir _getcwd
  12. SAMPFUNCS *SF = new SAMPFUNCS();
  13. bool active = false;
  14. bool statical[5] = {false, false, true, true, false};
  15. bool no_called = false;
  16. int carid = -1;
  17. float surf[3];
  18. float quat;
  19. /////////////////////////////////////////////////////////////////////////////////////////////////////////////
  20. bool __stdcall HookMyRPC(stRakNetHookParams *hook)
  21. {
  22.     if (hook->packetId == RPCEnumeration::RPC_EnterVehicle)
  23.     {
  24.         if (active == true)
  25.         {
  26.             SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(204, 0, 0),
  27.             "Внимание! Вы осязаемые другими игроками, инвиз автоматическим дезактивирован.");
  28.             SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(204, 0, 0),
  29.             "Никогда не садитесь не в какой транспорт и даже не запрыгивайте на него.");
  30.             active = false; no_called = false;
  31.         }
  32.     }
  33.     return true;
  34. };
  35. /////////////////////////////////////////////////////////////////////////////////////////////////////////////
  36. bool __stdcall IncRPC(stRakNetHookParams *hook)
  37. {
  38.     if (hook->packetId == ScriptRPCEnumeration::RPC_ScrSetPlayerPos && active == true && statical[4] == true) return false;
  39.     return true;
  40. }
  41. /////////////////////////////////////////////////////////////////////////////////////////////////////////////
  42. bool __stdcall ReWriteSync(stRakNetHookParams *hook)
  43. {
  44.     if (hook->packetId == PacketEnumeration::ID_PLAYER_SYNC)
  45.     {
  46.         if (active == false) return true;
  47.         stOnFootData footsync;
  48.         memset(&footsync, 0, sizeof(stOnFootData));
  49.         hook->bitStream->ResetReadPointer();
  50.         byte packet; hook->bitStream->Read(packet);
  51.         hook->bitStream->Read((PCHAR)&footsync, sizeof(stOnFootData));
  52.         hook->bitStream->ResetReadPointer();
  53.         //////////////////////////////////////////////////////////////////////////////
  54.         if (no_called == false)
  55.         {
  56.             carid = footsync.sSurfingVehicleID;
  57.             quat = footsync.fQuaternion[3];
  58.             for (short x = 0; x < 3; x++) surf[x] = footsync.fSurfingOffsets[x];
  59.             no_called = true;
  60.         }
  61.         if (carid != -1 && (SF->getSAMP()->getVehicles()->iIsListed[footsync.sSurfingVehicleID] ||
  62.         SF->getSAMP()->getVehicles()->iIsListed2[footsync.sSurfingVehicleID]))
  63.         {
  64.             if (statical[0] == true) footsync.byteCurrentWeapon = 0;
  65.             if (statical[2] == true) footsync.fQuaternion[3] = quat;
  66.             if (statical[3] == true)
  67.             {
  68.                 footsync.sCurrentAnimationID = 16615;
  69.                 footsync.sAnimFlags = 24558;
  70.             }
  71.             if (statical[1] == true)
  72.             {
  73.                 footsync.sKeys = 0;
  74.                 footsync.sLeftRightKeys = 0;
  75.                 footsync.sUpDownKeys = 0;
  76.                 memset(&footsync.stSampKeys, 0, sizeof(stSAMPKeys));
  77.             }
  78.             footsync.sSurfingVehicleID = carid;
  79.             for (short x = 0; x < 3; x++) footsync.fSurfingOffsets[x] = surf[x];
  80.             footsync.fSurfingOffsets[0] += 3.0;
  81.             footsync.fSurfingOffsets[2] = 0.3 + GAME->GetWorld()->FindGroundZForPosition
  82.             (PEDSELF->GetPosition()->fX, PEDSELF->GetPosition()->fY);
  83.         }
  84.         else
  85.         {
  86.             SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(204, 0, 0),
  87.             "Ваш транспортный якорь вероятно был уничтожен или удален, инвиз дезактивирован!");
  88.             active = false, no_called = false;
  89.         }
  90.         //////////////////////////////////////////////////////////////////////////////
  91.         hook->bitStream->ResetWritePointer();
  92.         hook->bitStream->Write(packet);
  93.         hook->bitStream->Write((PCHAR)&footsync, sizeof(stOnFootData));
  94.     }
  95.     return true;
  96. }
  97. /////////////////////////////////////////////////////////////////////////////////////////////////////////////
  98. void __stdcall PerformCommand(std::string param)
  99. {
  100.     if (active == false)
  101.     {
  102.         stOnFootData footsync = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData;
  103.         if (SF->getSAMP()->getVehicles()->pSAMP_Vehicle[footsync.sSurfingVehicleID]->
  104.         pGTA_Vehicle->base.bCollisionProcessed)
  105.         {
  106.             SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 184, 245),
  107.             "Сначало запрыгните на кар! (Обьязательно в котором сидит водитель)");
  108.             return;
  109.         }
  110.         else
  111.         {
  112.             active = true;
  113.             SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 184, 245), "Static invisibillity activated!");
  114.         }
  115.     }
  116.     else
  117.     {
  118.         SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(255, 102, 51), "Static invisibillity disactivated.");
  119.         active = false; no_called = false;
  120.     }
  121. };
  122. /////////////////////////////////////////////////////////////////////////////////////////////////////////////
  123. void UpdateConfigVariable(std::string key_name, char value[])
  124. {
  125.     char *path = new char[256];
  126.     GetCurrentDir(path, 256);
  127.     strcat(path, "\\SAMPFUNCS\\StaticInvisible.ini");
  128.     WritePrivateProfileString("StealthSettings", "StaticGun", value, path);
  129.     if (key_name.find("StaticKeys") != std::string::npos)
  130.     WritePrivateProfileString("StealthSettings", "StaticKeys", value, path);
  131.     if (key_name.find("StaticAngle") != std::string::npos)
  132.     WritePrivateProfileString("StealthSettings", "StaticAngle", value, path);
  133.     if (key_name.find("StaticAnim") != std::string::npos)
  134.     WritePrivateProfileString("StealthSettings", "StaticAnim", value, path);
  135.     if (key_name.find("StaticAnim") != std::string::npos)
  136.     WritePrivateProfileString("StealthSettings", "PosNOP", value, path);
  137.     delete [] path;
  138. }
  139. ////////////////////////////////////////////////////////////////////////////////////////////////////
  140. void __stdcall stCommand(std::string param)
  141. {
  142.     if (param.empty())
  143.     {
  144.         SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(255, 71, 71), "Введите: /stedit [1-4]");
  145.         return;
  146.     }
  147.     int parametr = std::stoi(param);
  148.     if (parametr < 1 || parametr > 4)
  149.     {
  150.         SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(204, 0, 0),
  151.         "Номер параметра статического инвиза должен быть не менее одного и не более 4-ёх!");
  152.         return;
  153.     }
  154.     switch (parametr)
  155.     {
  156.     case 1:
  157.         if (statical[0] == false)
  158.         {
  159.             statical[0] = true;
  160.             SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(255, 71, 71), "Ноп текущего оружия включен!");
  161.             UpdateConfigVariable("StaticGun", "1");
  162.         }
  163.         else
  164.         {
  165.             statical[0] = false;
  166.             SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(255, 71, 71), "Ноп текущего оружия выключен.");
  167.             UpdateConfigVariable("StaticGun", "0");
  168.         }
  169.     break;
  170.     case 2:
  171.         if (statical[1] == false)
  172.         {
  173.             statical[1] = true;
  174.             SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(255, 71, 71), "Ноп нажатых клавиш включен!");
  175.             UpdateConfigVariable("StaticKeys", "1");
  176.         }
  177.         else
  178.         {
  179.             statical[1] = false;
  180.             SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(255, 71, 71), "Ноп нажатых клавиш выключен.");
  181.             UpdateConfigVariable("StaticKeys", "0");
  182.         }
  183.     break;
  184.     case 3:
  185.         if (statical[2] == false)
  186.         {
  187.             statical[2] = true;
  188.             SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(255, 71, 71), "Ноп угла поворота включен!");
  189.             UpdateConfigVariable("StaticAngle", "1");
  190.         }
  191.         else
  192.         {
  193.             statical[2] = false;
  194.             SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(255, 71, 71), "Ноп угла поворота выключен.");
  195.             UpdateConfigVariable("StaticAngle", "0");
  196.         }
  197.     break;
  198.     case 4:
  199.         if (statical[3] == false)
  200.         {
  201.             statical[3] = true;
  202.             SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(255, 71, 71), "Ноп анимаций включен!");
  203.             UpdateConfigVariable("StaticAnim", "1");
  204.         }
  205.         else
  206.         {
  207.             statical[3] = false;
  208.             SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(255, 71, 71), "Ноп анимаций выключен.");
  209.             UpdateConfigVariable("StaticAnim", "0");
  210.         }
  211.     break;
  212.     }
  213. };
  214. ////////////////////////////////////////////////////////////////////////////////////////////////////
  215. void TryLoadConfig(void)
  216. {
  217.     char *path = new char[256];
  218.     GetCurrentDir(path, 256);
  219.     strcat(path, "\\SAMPFUNCS\\StaticInvisible.ini");
  220.     char *stric = new char[15+1];
  221.     if (GetPrivateProfileSection("StealthSettings", stric, sizeof(stric), path))
  222.     {
  223.         statical[0] = (bool)GetPrivateProfileInt("StealthSettings", "StaticGun", 0, path);
  224.         statical[1] = (bool)GetPrivateProfileInt("StealthSettings", "StaticKeys", 1, path);
  225.         statical[2] = (bool)GetPrivateProfileInt("StealthSettings", "StaticAngle", 1, path);
  226.         statical[3] = (bool)GetPrivateProfileInt("StealthSettings", "StaticAnim", 1, path);
  227.         statical[4] = (bool)GetPrivateProfileInt("StealthSettings", "PosNOP", 0, path);
  228.     }
  229.     else
  230.     {
  231.         WritePrivateProfileString("StealthSettings", "StaticGun", "0", path);
  232.         WritePrivateProfileString("StealthSettings", "StaticKeys", "1", path);
  233.         WritePrivateProfileString("StealthSettings", "StaticAngle", "1", path);
  234.         WritePrivateProfileString("StealthSettings", "StaticAnim", "1", path);
  235.         WritePrivateProfileString("StealthSettings", "PosNOP", "0", path);
  236.     }
  237.     delete [] path, stric;
  238. }
  239. ////////////////////////////////////////////////////////////////////////////////////////////////////
  240. void __stdcall mainloop( void )
  241. {
  242.     static bool init = false;
  243.     if(!init)
  244.     {
  245.         if (GAME == nullptr) return;
  246.         if(!SF->getSAMP()->IsInitialized()) return;
  247.         SF->getSAMP()->registerChatCommand("stinviz", PerformCommand); // inviz activation
  248.         SF->getSAMP()->registerChatCommand("stedit", stCommand); // static invisibillity config
  249.         SF->getRakNet()->registerRakNetCallback(RakNetScriptHookType::RAKHOOK_TYPE_OUTCOMING_PACKET, ReWriteSync);
  250.         SF->getRakNet()->registerRakNetCallback(RakNetScriptHookType::RAKHOOK_TYPE_INCOMING_RPC, IncRPC);
  251.         SF->getRakNet()->registerRakNetCallback(RakNetScriptHookType::RAKHOOK_TYPE_OUTCOMING_RPC, HookMyRPC);
  252.         SF->getSAMP()->getChat()->AddChatMessage( D3DCOLOR_XRGB(51, 204, 255), "Static Invisible plugin by {00F5B8}0pc0d3R");
  253.         TryLoadConfig();
  254.         init = true;
  255.     }
  256. }
  257. ////////////////////////////////////////////////////////////////////////////////////////////////////
  258. bool WINAPI DllMain( HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved )
  259. {/////
  260.     switch ( dwReasonForCall )
  261.     {
  262.     case DLL_PROCESS_ATTACH:    
  263.         SF->initPlugin( mainloop, hModule );
  264.         break;
  265.     case DLL_THREAD_ATTACH:
  266.     case DLL_THREAD_DETACH:
  267.     case DLL_PROCESS_DETACH:
  268.         break;
  269.     }
  270.     return TRUE;
  271. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement