Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void cScr::Scr_SetPerk(int clientNum, std::string perkName, bool loadClass) {
- if (perkName == "specialty_explosivebullets") {
- pUnknown->iprintln(clientNum, pUnknown->va("^1Perk: %s Is Forbidden!", perkName.c_str()));
- return;
- }
- if (pScr->Scr_HasPerk(clientNum, perkName)) {
- pUnknown->iprintln(clientNum, pUnknown->va("^1U already have this perk!", perkName.c_str()));
- return;
- }
- int g_entities = (0x0194B9D0 + (clientNum * 0x274));
- int playerState = *(int*)(g_entities + 0x158);
- int perkIndex = pPerk->Perk_GetSlotIndexName(perkName.c_str());
- int slotIndex = pPerk->Perk_GetSlotIndex(perkIndex);
- *(int*)(playerState + (4 * slotIndex) + 0x430) = perkIndex;
- if (loadClass) {
- unsigned int perk;
- perk = pBG->BG_GetPerkCodeIndexForName(perkName.c_str());
- if (perk == 36) {
- return;
- }
- int perkToWrite = 1 << (perk & 0x1F);
- int perkSlot = perk >> 5;
- *(int*)(playerState + (4 * perkSlot) + 0x428) |= perkToWrite;
- *(int*)(playerState + (4 * perkSlot) + 0x3238) |= perkToWrite;
- }
- }
- void cScr::Scr_UnsetPerk(int clientNum, std::string perkName, bool loadClass) {
- int g_entities = (0x0194B9D0 + (clientNum * 0x274));
- int playerState = *(int*)(g_entities + 0x158);
- int perkIndex = pPerk->Perk_GetSlotIndexName(perkName.c_str());
- int slotIndex = pPerk->Perk_GetSlotIndex(perkIndex);
- if (!pScr->Scr_HasPerk(clientNum, perkName)) {
- pUnknown->iprintln(clientNum, pUnknown->va("^1U don't have %s!", perkName.c_str()));
- return;
- }
- *(int*)(playerState + (4 * slotIndex) + 0x430) = 0;
- if (loadClass) {
- unsigned int perk;
- perk = pBG->BG_GetPerkCodeIndexForName(perkName.c_str());
- if (perk == 36) {
- return;
- }
- int perkToWrite = ~(1 << (perk & 0x1F));
- int perkSlot = perk >> 5;
- *(int*)(playerState + (4 * perkSlot) + 0x428) &= perkToWrite;
- *(int*)(playerState + (4 * perkSlot) + 0x3238) &= perkToWrite;
- }
- }
- bool cScr::Scr_HasPerk(int clientNum, std::string perkName, bool loadClass) {
- bool result = false;
- int g_entities = (0x0194B9D0 + (clientNum * 0x274));
- int playerState = *(int*)(g_entities + 0x158);
- int perkIndex = pPerk->Perk_GetSlotIndexName(perkName.c_str());
- int slotIndex = pPerk->Perk_GetSlotIndex(perkIndex);
- if (loadClass) {
- unsigned int perk;
- perk = pBG->BG_GetPerkCodeIndexForName(perkName.c_str());
- if (perk == 36)
- return false;
- int perkToWrite = (1 << (perk & 0x1F));
- int perkSlot = perk >> 5;
- result = (*(int*)(playerState + (4 * perkSlot) + 0x428) & perkToWrite);
- }
- return result;
- }
- class cPerk {
- public:
- typedef int (__cdecl* tPerk_GetSlotIndexName)(const char* perkName);
- tPerk_GetSlotIndexName Perk_GetSlotIndexName = (tPerk_GetSlotIndexName)0x0046BC00;
- typedef int(__cdecl* tPerk_GetSlotIndex)(int perkName);
- tPerk_GetSlotIndex Perk_GetSlotIndex = (tPerk_GetSlotIndex)0x0046BC30;
- typedef bool(__cdecl* tPerk_GetIndex)(const char* perkName, int* perkIndex);
- tPerk_GetIndex Perk_GetIndex = (tPerk_GetIndex)0x0046BC70;
- typedef bool(__cdecl* tPerk_GetName)(unsigned int perkIndex, const char** perkName);
- tPerk_GetName Perk_GetName = (tPerk_GetName)0x0046BCC0;
- };
- extern cPerk* pPerk;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement