Official site anti-cheat Ultra Core Protector

Home Download F.A.Q. Addons Monitor Forum Support Advertise English version site UCP Anti-Cheat  Russian version site UCP Anti-Cheat
Ultra Core Protector - is the client-server anti-cheat freeware, for server protection from unscrupulous players.

Abilities Supported games  
Half-Life
Condition Zero
Counter-Strike 1.6
Day of Defeat
Adrenaline Gamer
Team Fortress Classic
Counter-Strike Source
MU Online
Ragnarok Online
Half-Life 2 Deathmatch
Adrenaline Gamer 2
Team Fortress 2
CSGO: Changer for Ranks/Levels/Commends/Medals

If you follow this Tutorial you’ll have an working InventoryChanger + Medal Changer + Rank Changer + Recommendation Changer.

WARNING: You could get some VAC authentication errors. In worst case untrusted. Nobody has been banned until now.

Please watch the tutorial video first and make sure that you have really followed all the steps exactly before posting your errors here.
Update: Step by Step Youtube Video Tutorial – How to add Inventory Changer + Rank Changer etc: https://www.youtube.com/watch?v=AXN5CiM5QlA&feature=youtu.be

here is the Link for my tutorial. If something won’t work please write it here so i can try to fix it.

Tutorial by Baseult

I know it looks like a mess but its actually really easy to add. You wont need more than 15 Minutes to C&P that even if your slow or new to C++.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Dont Copy the _________ and ————- it is only there to make everything a little clearer!

———- = Source Code
__________ = next Step

Watch my Step by Step Tutorial – How to add the entire Inventory Changer + Rank Changer if you need help:

I used Indigo 3.6.2 Idk if you get errors with higher versions or other cheats like frosty, phook etc.
Ik my english sucks lmao.

Note: There i no GUI for changing the Medals / Rank / Items. Im to busy right now and i will add it when i have time for it.
Meanwhile you have to change everything manually in the inventoryChanger.cpp and Settings.cpp file but its also easy af.

1. Download protobuf – 2.5.0 Download: https://mega.nz/#!xWIRiRBJ!vAf-6MhdZZjWREzedqChYsxPcDJ44ooRqpf4xvnaoN4
2. Download C&P (Files for Inventory Changer): https://mega.nz/#!BC5gyTQQ!6QgDFciwtlbzBq-5zQ6hsSxQ2K6CyUATiCEqK1vw4Sk

You can also download the finished default Version of Indigo 3.6.2 + Inventory Changer and Rank Changer here. You dont need that if you want to add it in your own Paste: https://mega.nz/#!xHQ1lTAY!YxtcdBwmSwgVv3B2FrHcLRH2mIxryTwXiDbE8vyZ-ZM

protobuf Virustotal: https://www.virustotal.com/de/file/25abfc115e9044e9b3f57559ecef7da2b5bc9fa06c22e1a4ab2cf79affe29345/analysis/1522244746/

C&P Virustotal:
https://www.virustotal.com/de/file/3f72da39b832363ff867260e12f4d27c0654c19b3d38f7b965d8828db74d7097/analysis/1522244876/

_______________________________________________________________________________________________________________________________________

3. Follow the steps in my Video. After that follow step 4.
Video: https://www.youtube.com/watch?v=aUq7Kee7aWE&feature=youtu.be

Also you can watch my Step by Step Tutorial – How to add the entire Inventory Changer + Rank Changer if you need help:

_______________________________________________________________________________________________________________________________________

4. Go to SDK.CPP and C&P this Code into “namespace SDK”
—————————————————————————————————————————————
ISteamGameCoordinator* Interfaces::g_pSteamGameCoordinator = nullptr;
ISteamUser* Interfaces::g_pSteamUser = nullptr;
—————————————————————————————————————————————
SS: https://ibb.co/musin7

_______________________________________________________________________________________________________________________________________

5. Also in SDK.CPP C&P this Code below “return g_pConVar; }” at the bottom
—————————————————————————————————————————————
ISteamUser* Interfaces::SteamUser()
{
if (!g_pSteamUser) {
SteamGameCoordinator();
}

return g_pSteamUser;
}

ISteamGameCoordinator* Interfaces::SteamGameCoordinator()
{
if (!g_pSteamGameCoordinator) {
typedef uint32_t SteamPipeHandle;
typedef uint32_t SteamUserHandle;

SteamUserHandle hSteamUser = ((SteamUserHandle(__cdecl*)(void))GetProcAddress(GetModuleHandle(“steam_api.dll”), “SteamAPI_GetHSteamUser”))();
SteamPipeHandle hSteamPipe = ((SteamPipeHandle(__cdecl*)(void))GetProcAddress(GetModuleHandle(“steam_api.dll”), “SteamAPI_GetHSteamPipe”))();

auto SteamClient = ((ISteamClient*(__cdecl*)(void))GetProcAddress(GetModuleHandle(“steam_api.dll”), “SteamClient”))();

auto SteamHTTP = SteamClient->GetISteamHTTP(hSteamUser, hSteamPipe, “STEAMHTTP_INTERFACE_VERSION002”);
g_pSteamUser = SteamClient->GetISteamUser(hSteamUser, hSteamPipe, “SteamUser019”);
auto SteamFriends = SteamClient->GetISteamFriends(hSteamUser, hSteamPipe, “SteamFriends015”);
auto SteamInventory = SteamClient->GetISteamInventory(hSteamUser, hSteamPipe, “STEAMINVENTORY_INTERFACE_V002”);
g_pSteamGameCoordinator = (ISteamGameCoordinator*)SteamClient->GetISteamGenericInterface(hSteamUser, hSteamPipe, “SteamGameCoordinator001”);
}

return g_pSteamGameCoordinator;
}
—————————————————————————————————————————————
SS: https://ibb.co/fiyTLS

_______________________________________________________________________________________________________________________________________

6. Go to SDK.H and paste this:
—————————————————————————————————————————————
#include “../steam_sdk/steam_api.h”
—————————————————————————————————————————————
#define STEAMAPI_DLL “steam_api.dll”
—————————————————————————————————————————————
SS: https://ibb.co/c11vZn

_______________________________________________________________________________________________________________________________________

7. Stay in SDK.H and C&P this in “class Interfaces{ public:
—————————————————————————————————————————————
static ISteamGameCoordinator* SteamGameCoordinator();
static ISteamUser* SteamUser();
—————————————————————————————————————————————
7.5 in private:
—————————————————————————————————————————————
static ISteamGameCoordinator* g_pSteamGameCoordinator;
static ISteamUser* g_pSteamUser;
—————————————————————————————————————————————
SS: https://ibb.co/dXsuun

_______________________________________________________________________________________________________________________________________

8. Go to CLIENT.CPP and C&P this in “namsepace Client”:
—————————————————————————————————————————————
CInventoryChanger* g_pInventoryChanger = nullptr;
CInventoryChanger1* g_pInventoryChanger1 = nullptr;
—————————————————————————————————————————————
SS: https://ibb.co/i4i0Zn

_______________________________________________________________________________________________________________________________________

9. Stay in CLIENT.CPP and C&P this above “bool Intialize”:
—————————————————————————————————————————————
bool SendClientHello()
{
CMsgClientHello Message;

Message.set_client_session_need(1);
Message.clear_socache_have_versions();

void* ptr = malloc(Message.ByteSize() + 8);

if (!ptr)
return false;

((uint32_t*)ptr)[0] = k_EMsgGCClientHello | ((DWORD)1 << 31); ((uint32_t*)ptr)[1] = 0; Message.SerializeToArray((void*)((DWORD)ptr + 8), Message.ByteSize()); bool result = Interfaces::SteamGameCoordinator()->SendMessage(k_EMsgGCClientHello | ((DWORD)1 << 31), ptr, Message.ByteSize() + 8) == k_EGCResultOK; free(ptr); return result; } --------------------------------------------------------------------------------------------------------------------------------------- SS: https://ibb.co/cAxYn7 _______________________________________________________________________________________________________________________________________ 10. Stay in CLIENT.CPP and C&P this code into "bool Initialize(IDirect3DDevice9* pDevice)" --------------------------------------------------------------------------------------------------------------------------------------- g_pInventoryChanger = new CInventoryChanger(); g_pInventoryChanger1 = new CInventoryChanger1(); --------------------------------------------------------------------------------------------------------------------------------------- SS: https://ibb.co/hPcSEn _______________________________________________________________________________________________________________________________________ 11. Stay in CLIENT.CPP and C&P this above void OnCreateMove(CUserCmd* pCmd) --------------------------------------------------------------------------------------------------------------------------------------- void OnRetrieveMessage(void* ecx, void* edx, uint32_t *punMsgType, void *pubDest, uint32_t cubDest, uint32_t *pcubMsgSize) { g_pInventoryChanger->PostRetrieveMessage(punMsgType, pubDest, cubDest, pcubMsgSize);
g_pInventoryChanger1->PostRetrieveMessage(punMsgType, pubDest, cubDest, pcubMsgSize);
}

void OnSendMessage(void* ecx, void* edx, uint32_t unMsgType, const void* pubData, uint32_t cubData)
{

void* pubDataMutable = const_cast(pubData);
g_pInventoryChanger->PreSendMessage(unMsgType, pubDataMutable, cubData);
g_pInventoryChanger1->PreSendMessage(unMsgType, pubDataMutable, cubData);
}
—————————————————————————————————————————————
SS: https://ibb.co/hRZM77

_______________________________________________________________________________________________________________________________________

12. Go to CLIENT.H and C&P this:
—————————————————————————————————————————————
#include “InventoryChanger/InventoryChanger.h”
—————————————————————————————————————————————
ant this below “class CMisc;”
—————————————————————————————————————————————
class CInventoryChanger;
class CInventoryChanger1;
—————————————————————————————————————————————
SS: https://ibb.co/ce83LS

_______________________________________________________________________________________________________________________________________

13. Stay in CLIENT.H and C&P this above “void OnCreateMove(CUserCmd* pCMD)”:
—————————————————————————————————————————————
void OnRetrieveMessage(void* ecx, void* edx, uint32_t *punMsgType, void *pubDest, uint32_t cubDest, uint32_t *pcubMsgSize);
void OnSendMessage(void* ecx, void* edx, uint32_t unMsgType, const void* pubData, uint32_t cubData);
—————————————————————————————————————————————
SS: https://ibb.co/hDPXEn

_______________________________________________________________________________________________________________________________________

This are the Medal IDS. You can change them to what you want. I added almost all of the best Medals.

14. Go to SETTINGS.CPP and C&P this above “namespace Aimbot”
—————————————————————————————————————————————
namespace InventoryChanger {
bool enabled = true;
std::vector medals = { 874,875,879,883,889,890,896,897,903,904,910,913,916,917,923,926,927,931,937,940,941,948,955,958,961,1003,1318,1329,1332,1338,1341,1344,1363,1372,4356,6021,6020,6019,6012,6032,6027,6002 }; // MEDAL IDS
}
—————————————————————————————————————————————
SS: https://ibb.co/ehbCEn

_______________________________________________________________________________________________________________________________________

15. Go to SETTINGS.H and C&P this in “namespace Settings”:
————————————————————————————————————————————–namespace InventoryChanger {
extern bool enabled;
extern std::vector medals;
}
—————————————————————————————————————————————
SS: https://ibb.co/n4tnfS
_______________________________________________________________________________________________________________________________________

16. Go to HOOK.CPP and C&P this below “CSX::HOOK::VTable SurfaceTable”:
—————————————————————————————————————————————
CSX::Hook::VTable SteamGameCoordinatorTable;
—————————————————————————————————————————————
SS: https://ibb.co/eaxin7
_______________________________________________________________________________________________________________________________________

17. Stay in HOOK.CPP and C&P this above “bool WINAPI Hook_FireEventClientSideThink(IGameEvent* pEvent)”

—————————————————————————————————————————————
EGCResults __fastcall Hook_RetrieveMessage(void* ecx, void* edx, uint32_t *punMsgType, void *pubDest, uint32_t cubDest, uint32_t *pcubMsgSize)
{
SteamGameCoordinatorTable.UnHook();
EGCResults status = Interfaces::SteamGameCoordinator()->RetrieveMessage(punMsgType, pubDest, cubDest, pcubMsgSize);
SteamGameCoordinatorTable.ReHook();

if (status != k_EGCResultOK)
return status;

Client::OnRetrieveMessage(ecx, edx, punMsgType, pubDest, cubDest, pcubMsgSize);

return status;
}

EGCResults __fastcall Hook_SendMessage(void* ecx, void* edx, uint32_t unMsgType, const void* pubData, uint32_t cubData)
{
uint32_t messageType = unMsgType & 0x7FFFFFFF;
void* pubDataMutable = const_cast(pubData);

Client::OnSendMessage(ecx, edx, unMsgType, pubData, cubData);

SteamGameCoordinatorTable.UnHook();
EGCResults status = Interfaces::SteamGameCoordinator()->SendMessage(unMsgType, pubData, cubData);
SteamGameCoordinatorTable.ReHook();

return status;

}

—————————————————————————————————————————————
SS: https://ibb.co/gzhAZn
_______________________________________________________________________________________________________________________________________

18. Stay in HOOK.CPP and C&P this above “bool Initialize()”

—————————————————————————————————————————————
bool SendClientHello()
{
CMsgClientHello Message;

Message.set_client_session_need(1);
Message.clear_socache_have_versions();

void* ptr = malloc(Message.ByteSize() + 8);

if (!ptr)
return false;

((uint32_t*)ptr)[0] = k_EMsgGCClientHello | ((DWORD)1 << 31); ((uint32_t*)ptr)[1] = 0; Message.SerializeToArray((void*)((DWORD)ptr + 8), Message.ByteSize()); bool result = Interfaces::SteamGameCoordinator()->SendMessage(k_EMsgGCClientHello | ((DWORD)1 << 31), ptr, Message.ByteSize() + 8) == k_EGCResultOK; free(ptr); return result; } --------------------------------------------------------------------------------------------------------------------------------------- SS: https://ibb.co/nEnG77 _______________________________________________________________________________________________________________________________________ 19. Stay in HOOK.CPP and C&P this above "if (!GameEventTable.InitTable(Interfaces::GameEvent()))" --------------------------------------------------------------------------------------------------------------------------------------- if (!SteamGameCoordinatorTable.InitTable(Interfaces::SteamGameCoordinator())) return false; SteamGameCoordinatorTable.HookIndex(0, Hook_SendMessage); SteamGameCoordinatorTable.HookIndex(2, Hook_RetrieveMessage); --------------------------------------------------------------------------------------------------------------------------------------- SS: https://ibb.co/bGPk0S _______________________________________________________________________________________________________________________________________ 20. Last Step: Stay in HOOK.CPP and C&P this below "if (Client::Initialize(g_pDevice))" --------------------------------------------------------------------------------------------------------------------------------------- SendClientHello(); --------------------------------------------------------------------------------------------------------------------------------------- Also C&P this below ClientTable.UnHook(); --------------------------------------------------------------------------------------------------------------------------------------- SteamGameCoordinatorTable.UnHook(); --------------------------------------------------------------------------------------------------------------------------------------- SS: https://ibb.co/n8tdLS _______________________________________________________________________________________________________________________________________ Just Compile the Project and your good to go. You can Change your Matchmaking Wins / Rank / recommendations in the InventoryChanger.cpp File Message.set_player_level(42); // PLAYER LEVEL Message.set_player_cur_xp(0); // PLAYER XP PlayerRankingInfo* Ranking = Message.mutable_ranking(); Ranking->set_account_id(Interfaces::SteamUser()->GetSteamID().GetAccountID());
Ranking->set_rank_id(18); // PLAYER RANK 1-18 (18 = Global Elite)
Ranking->set_wins(1842); // PLAYER WINS IN MATCHMAKING

PlayerCommendationInfo* Commendation = Message.mutable_commendation();
Commendation->set_cmd_friendly(423); //RECOMMENDATIONS FRIENDLY
Commendation->set_cmd_leader(553); //RECOMMENDATIONS LEADER
Commendation->set_cmd_teaching(532); //RECOMMENDATIONS TEACHING

You can Change the Inventory and Medals in the SETTINGS.CPP ( Step 14 )

Also you can Change your Inventory Items in the InventoryChanger.cpp File

AddItem(Object, 1, WEAPON_AK47, 6, 600, 0, 0.001f, “”);
AddItem(Object, 2, WEAPON_AK47, 6, 524, 0, 0.001f, “”);
AddItem(Object, 3, WEAPON_KNIFE_KARAMBIT, 6, 558, 38, 0.001f, “”);
AddItem(Object, 4, WEAPON_KNIFE_KARAMBIT, 6, 576, 38, 0.001f, “”);
AddItem(Object, 5, WEAPON_KNIFE_BAYONET, 6, 419, 38, 0.001f, “”);
AddItem(Object, 5, WEAPON_AWP, 6, 344, 38, 0.001f, “”);
AddItem(Object, 5, WEAPON_AWP, 6, 446, 38, 0.001f, “”);
AddItem(Object, 5, WEAPON_FAMAS, 6, 260, 38, 0.001f, “”);

Note: There i no GUI for changing the Medals / Rank / Items. Im to busy right now and i will add it when i have time for it.
Meanwhile you have to change everything manually in the inventoryChanger.cpp and Settings.cpp file.

You can also download the finished default Version of Indigo 3.6.2 + Inventory Changer and Rank Changer here. You dont need that if you want to add it in your own Paste: https://mega.nz/#!xHQ1lTAY!YxtcdBwmSwgVv3B2FrHcLRH2mIxryTwXiDbE8vyZ-ZM

You can add a menu / gui for the Inventory Changer now. : https://pasters.cc/showthread.php?tid=2775

NOTICE: Make sure you add/change what I said in parts 1 & 2 to get the Rank Box Working

//Added int for Rank Box
1. *NEW* Go into Settings.cpp and add these under float hitmarkerAlpha; in namespace Misc

int misc_Rank = 0; //Go back here and change this from 1 to 0 so it starts off.
int misc_Level = 1;
int misc_XP = 1;
int misc_Wins = 1;
int misc_Friendly = 1;
int misc_Leader = 1;
int misc_Teacher = 1;
int misc_Rank_Combo; //Add this for Rank Box

2. Go into Settings.h and add these under extern float hitmarkerAlpha; in namespace Misc

extern int misc_Rank;
extern int misc_XP;
extern int misc_Wins;
extern int misc_Level;
extern int misc_Friendly;
extern int misc_Leader;
extern int misc_Teacher;
extern int misc_Rank_Combo; //Add this for Rank Box

3. Still in Settings.h under extern std::vector medals; add

extern bool equipped_medal_override;
extern uint32_t equipped_medal;
extern std::vector weapons;

4. Also in Settings.h under #define FOV_BASE_DISTANCE 200 paste this

struct k_weapon_data {
int itemDefinitionIndex;
int paintKit;
int rarity;
int seed;
float wear;
};

//New part to save ranks, levels, etc.
5. *NEW* Now still inside Settings.h paste this under #define CVAR_MISC_AWPAIM_COLOR "misc_AwpAimColor"

#define CVAR_MISC_RANK_COMBO "misc_Rank_Combo"
#define CVAR_MISC_LEVEL "misc_Level"
#define CVAR_MISC_XP "misc_XP"
#define CVAR_MISC_WINS "misc_Wins"
#define CVAR_MISC_FRIENDLY "misc_Friendly"
#define CVAR_MISC_LEADER "misc_Leader"
#define CVAR_MISC_TEACHER "misc_Teacher"

6. Goto InventoryChanger.cpp and change these under Medal.set_def_index(MedalIndex);
and add int c = 10001; under int i = 10000;

Before:
Medal.set_inventory(i);
Medal.set_id(i);

After:
Medal.set_inventory(c);
Medal.set_id(c);

7. Now in InventoryChanger.cpp and add this under Medal.set_id(c);

if (Settings::InventoryChanger::equipped_medal_override && Settings::InventoryChanger::equipped_medal == MedalIndex)
{
CSOEconItemEquipped* EquippedState = Medal.add_equipped_state();

EquippedState->set_new_class(0);
EquippedState->set_new_slot(55);
}

8. Still in InventoryChanger.cpp add this under if (Item.equipped_state_size() <= 0) continue; Screenshot for reference: http://prntscr.com/iyvil6 if (Settings::InventoryChanger::equipped_medal_override) { CSOEconItemEquipped* EquippedState = Item.mutable_equipped_state(0); if (EquippedState->new_class() == 0 && EquippedState->new_slot() == 55)
{
Item.clear_equipped_state();

ObjectData->resize(Item.ByteSize());
Item.SerializeToArray((void*)const_cast(ObjectData->data()), Item.ByteSize());
}
}

9. In InventoryChanger.cpp again paste this under uint32_t MessageType = unMsgType & 0x7FFFFFFF;
Screenshot for reference: http://prntscr.com/iyviho

if (MessageType == k_EMsgGCAdjustItemEquippedState) {
CMsgAdjustItemEquippedState Message;

try
{
if (!Message.ParsePartialFromArray((void*)((DWORD)pubData + 8), cubData - 8))
return true;
}
catch (...)
{
return true;
}

if (!Message.has_item_id() || !Message.has_new_class() || !Message.has_new_slot())
return true;

uint32_t item_id = (uint32_t)Message.item_id() - 20000;

if (item_id < 1 || item_id > Settings::InventoryChanger::weapons.size()) {
return true;
}

auto weapon = Settings::InventoryChanger::weapons[item_id - 1];
g_SkinChangerCfg[weapon.itemDefinitionIndex].flFallbackWear = weapon.wear;
g_SkinChangerCfg[weapon.itemDefinitionIndex].iItemDefinitionIndex = weapon.itemDefinitionIndex;
g_SkinChangerCfg[weapon.itemDefinitionIndex].nFallbackPaintKit = weapon.paintKit;

ForceFullUpdate();

return false;
}

10. Also in InventoryChanger.cpp paste this under bool CInventoryChanger1::PreSendMessage(uint32_t &unMsgType, void* pubData, uint32_t &cubData)
Screenshot for reference: http://prntscr.com/iyvewi

void CInventoryChanger::ApplySkins(CMsgSOCacheSubscribed::SubscribedType* pInventoryCacheObject)
{
if (!Settings::InventoryChanger::enabled) {
return;
}

int c = 20001;
for (auto weapon : Settings::InventoryChanger::weapons) {
CSOEconItem Skin;

Skin.set_id(c);
Skin.set_account_id(Interfaces::SteamUser()->GetSteamID().GetAccountID());
Skin.set_def_index(weapon.itemDefinitionIndex);
Skin.set_inventory(c);
Skin.set_origin(24);
Skin.set_quantity(1);
Skin.set_level(1);
Skin.set_style(0);
Skin.set_flags(0);
Skin.set_in_use(false);
Skin.set_original_id(0);
Skin.set_rarity(weapon.rarity);
Skin.set_quality(0);

auto PaintKitAttribute = Skin.add_attribute();
float PaintKitAttributeValue = (float)weapon.paintKit;
PaintKitAttribute->set_def_index(6);
PaintKitAttribute->set_value_bytes(&PaintKitAttributeValue, 4);

auto SeedAttribute = Skin.add_attribute();
float SeedAttributeValue = (float)weapon.seed;
SeedAttribute->set_def_index(7);
SeedAttribute->set_value_bytes(&SeedAttributeValue, 4);

auto WearAttribute = Skin.add_attribute();
float WearAttributeValue = weapon.wear;
WearAttribute->set_def_index(8);
WearAttribute->set_value_bytes(&WearAttributeValue, 4);

pInventoryCacheObject->add_object_data(Skin.SerializeAsString());

c++;
}
}

void CInventoryChanger::ApplyMedals(CMsgSOCacheSubscribed::SubscribedType* pInventoryCacheObject)
{
int c = 10001;
for (uint32_t MedalIndex : Settings::InventoryChanger::medals)
{
CSOEconItem Medal;
Medal.set_account_id(Interfaces::SteamUser()->GetSteamID().GetAccountID());
Medal.set_origin(9);
Medal.set_rarity(6);
Medal.set_quantity(1);
Medal.set_quality(4);
Medal.set_level(1);

CSOEconItemAttribute* TimeAcquiredAttribute = Medal.add_attribute();
uint32_t TimeAcquiredAttributeValue = 0;
TimeAcquiredAttribute->set_def_index(222);
TimeAcquiredAttribute->set_value_bytes(&TimeAcquiredAttributeValue, 4);
Medal.set_def_index(MedalIndex);
Medal.set_inventory(c);
Medal.set_id(c);
if (Settings::InventoryChanger::equipped_medal_override && Settings::InventoryChanger::equipped_medal == MedalIndex)
{
CSOEconItemEquipped* EquippedState = Medal.add_equipped_state();

EquippedState->set_new_class(0);
EquippedState->set_new_slot(55);
}
pInventoryCacheObject->add_object_data(Medal.SerializeAsString());
c++;
}
}

and this under ApplyMedals(Object); add

ApplySkins(Object);

11. Now in InventoryChanger.h add this under void ApplyMedals(CMsgSOCacheSubscribed::SubscribedType* pInventoryCacheObject);

void ApplySkins(CMsgSOCacheSubscribed::SubscribedType* pInventoryCacheObject);

12. *NEW* Go back to Settings.cpp and paste this under CSX::Cvar::SaveCvar( MISC_TEXT , CVAR_MISC_FOV_MDL_VIEW , Misc::misc_FovModelView );

CSX::Cvar::SaveCvar(MISC_TEXT, CVAR_MISC_RANK_COMBO, Misc::misc_Rank_Combo);
CSX::Cvar::SaveCvar(MISC_TEXT, CVAR_MISC_LEVEL, Misc::misc_Level);
CSX::Cvar::SaveCvar(MISC_TEXT, CVAR_MISC_XP, Misc::misc_XP);
CSX::Cvar::SaveCvar(MISC_TEXT, CVAR_MISC_WINS, Misc::misc_Wins);
CSX::Cvar::SaveCvar(MISC_TEXT, CVAR_MISC_FRIENDLY, Misc::misc_Friendly);
CSX::Cvar::SaveCvar(MISC_TEXT, CVAR_MISC_LEADER, Misc::misc_Leader);
CSX::Cvar::SaveCvar(MISC_TEXT, CVAR_MISC_TEACHER, Misc::misc_Teacher);

13. *NEW* Also in Settings.cpp paste this under Misc::misc_FovModelView = CSX::Cvar::LoadCvar( MISC_TEXT , CVAR_MISC_FOV_MDL_VIEW , Misc::misc_FovModelView );

Misc::misc_Rank = CSX::Cvar::LoadCvar(MISC_TEXT, CVAR_MISC_RANK_COMBO, Misc::misc_Rank_Combo);
Misc::misc_Level = CSX::Cvar::LoadCvar(MISC_TEXT, CVAR_MISC_LEVEL, Misc::misc_Level);
Misc::misc_XP = CSX::Cvar::LoadCvar(MISC_TEXT, CVAR_MISC_XP, Misc::misc_XP);
Misc::misc_Wins = CSX::Cvar::LoadCvar(MISC_TEXT, CVAR_MISC_WINS, Misc::misc_Wins);
Misc::misc_Friendly = CSX::Cvar::LoadCvar(MISC_TEXT, CVAR_MISC_FRIENDLY, Misc::misc_Friendly);
Misc::misc_Leader = CSX::Cvar::LoadCvar(MISC_TEXT, CVAR_MISC_LEADER, Misc::misc_Leader);
Misc::misc_Teacher = CSX::Cvar::LoadCvar(MISC_TEXT, CVAR_MISC_TEACHER, Misc::misc_Teacher);

14. Lastly still in Settings.cpp add this under std::vector medals = {}; and remove anything inside those brackets

bool equipped_medal_override = false;
uint32_t equipped_medal = 0;
std::vector weapons = {};

15. In InventoryChanger.cpp replace lines 106-119 with this: It should look like this afterwards: https://prnt.sc/ixyuny

Message.set_player_level(Settings::Misc::misc_Level); // PLAYER LEVEL
Message.set_player_cur_xp(Settings::Misc::misc_XP); // PLAYER XP

// TournamentPlayer

PlayerRankingInfo* Ranking = Message.mutable_ranking();
Ranking->set_account_id(Interfaces::SteamUser()->GetSteamID().GetAccountID());
Ranking->set_rank_id(Settings::Misc::misc_Rank); // PLAYER RANK 1-18 (18 = Global Elite)
Ranking->set_wins(Settings::Misc::misc_Wins); // PLAYER WINS IN MATCHMAKING

PlayerCommendationInfo* Commendation = Message.mutable_commendation();
Commendation->set_cmd_friendly(Settings::Misc::misc_Friendly); //RECOMMENDATIONS FRIENDLY
Commendation->set_cmd_leader(Settings::Misc::misc_Leader); //RECOMMENDATIONS LEADER
Commendation->set_cmd_teaching(Settings::Misc::misc_Teacher); //RECOMMENDATIONS TEACHING

16. Go into Client.cpp and paste this above bool Initialize(IDirect3DDevice9* pDevice)
It should look like this afterwards:https://prnt.sc/ixyu5k

bool SendMMHello()
{
CMsgGCCStrike15_v2_MatchmakingClient2GCHello Message;
void* ptr = malloc(Message.ByteSize() + 8);
if (!ptr)
return false;

auto unMsgType = k_EMsgGCCStrike15_v2_MatchmakingClient2GCHello | ((DWORD)1 << 31); ((uint32_t*)ptr)[0] = unMsgType; ((uint32_t*)ptr)[1] = 0; Message.SerializeToArray((void*)((DWORD)ptr + 8), Message.ByteSize()); bool result = Interfaces::SteamGameCoordinator()->SendMessage(k_EMsgGCCStrike15_v2_MatchmakingClient2GCHello | ((DWORD)1 << 31), ptr, Message.ByteSize() + 8) == k_EGCResultOK; free(ptr); return result; } //Added Medal Changer 17. *NEW* Now go to Client.cpp and paste this under ImGui::Checkbox("NoSky (Spoof)", &Settings::Misc::misc_NoSky); It should look like this afterwards: http://prntscr.com/iyuzc7 ImGui::Text("Ranks/Levels/Commends"); ImGui::Separator(); const char* ranklist[] = { "OFF", "Silver I", "Silver II", "Silver III", "Silver IV", "Silver Elite", "Silver Elite Master", "Gold Nova I", "Gold Nova II", "Gold Nova III", "Gold Nova Master", "Master Guardian I", "Master Guardian II", "Master Guardian Elite", "Distinguished Master Guardian", "Legendary Eagle", "Legendary Eagle Master", "Supreme Master First Class", "Global Elite" }; ImGui::SliderInt("Level (1-40)", &Settings::Misc::misc_Level, 1, 40); ImGui::Combo(("Rank"), &Settings::Misc::misc_Rank_Combo, ranklist, ARRAYSIZE(ranklist)); if (Settings::Misc::misc_Rank_Combo >= 1)
{
Settings::Misc::misc_Rank = Settings::Misc::misc_Rank_Combo;
}
else
{
Settings::Misc::misc_Rank = 0;
}
ImGui::InputInt("XP", &Settings::Misc::misc_XP);
ImGui::InputInt("Wins", &Settings::Misc::misc_Wins);
ImGui::Separator();
ImGui::InputInt("Friendly", &Settings::Misc::misc_Friendly);
ImGui::InputInt("Leader", &Settings::Misc::misc_Leader);
ImGui::InputInt("Teacher", &Settings::Misc::misc_Teacher);

ImGui::Spacing();
if (ImGui::Button("Apply"))
{
SendMMHello();
}

ImGui::Spacing();
ImGui::Separator();
ImGui::Text("Medals");
ImGui::Separator();
static int medal_id = 0;
if (ImGui::Button("Add") && medal_id != 0) {
Settings::InventoryChanger::medals.insert(Settings::InventoryChanger::medals.end(), medal_id);
medal_id = 0;
}
ImGui::InputInt("Medal id", &medal_id);

ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1, 1, 1, 1));
ImGui::ListBoxHeader("Medal list");
for (int m = 0; m < Settings::InventoryChanger::medals.size(); m++) { if (ImGui::Selectable(std::to_string(Settings::InventoryChanger::medals[m]).c_str())) { if (Settings::InventoryChanger::equipped_medal == Settings::InventoryChanger::medals[m]) { Settings::InventoryChanger::equipped_medal = 0; Settings::InventoryChanger::equipped_medal_override = false; } Settings::InventoryChanger::medals.erase(Settings::InventoryChanger::medals.begin() + m); } } ImGui::ListBoxFooter(); ImGui::PopStyleColor(); ImGui::Checkbox("Equipped Medal", &Settings::InventoryChanger::equipped_medal_override); if (Settings::InventoryChanger::equipped_medal_override) { static int equipped_medal = 0; ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1, 1, 1, 1)); if (ImGui::Combo("Equipped Medal", &equipped_medal, [](void* data, int idx, const char** out_text) { *out_text = std::to_string(Settings::InventoryChanger::medals[idx]).c_str(); return true; }, nullptr, Settings::InventoryChanger::medals.size(), 5)) { Settings::InventoryChanger::equipped_medal = Settings::InventoryChanger::medals[equipped_medal]; } ImGui::PopStyleColor(); } ImGui::Spacing(); if (ImGui::Button("Apply##Medals")) { SendClientHello(); } ImGui::Spacing(); ImGui::Separator(); ImGui::Text("Skins"); ImGui::Separator(); ImGui::Spacing(); ImGui::Columns(2, nullptr, false); static int itemDefinitionIndex = 0; static int paintKit = 0; static int rarity = 0; static int seed = 0; static float wear = 0.f; ImGui::InputInt("Item ID", &itemDefinitionIndex); ImGui::InputInt("Skin ID", &paintKit); ImGui::InputInt("Rarity", &rarity); ImGui::InputInt("Seed", &seed); ImGui::SliderFloat("Wear", &wear, FLT_MIN, 1.f, "%.10f", 5); if (ImGui::Button("Add")) { Settings::InventoryChanger::weapons.insert(Settings::InventoryChanger::weapons.end(), { itemDefinitionIndex , paintKit , rarity , seed, wear }); } ImGui::SameLine(); if (ImGui::Button("Apply##Skin")) { SendClientHello(); } ImGui::NextColumn(); ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1, 1, 1, 1)); ImGui::ListBoxHeader("Skins"); int weapon_index = 0; for (auto weapon : Settings::InventoryChanger::weapons) { if (ImGui::Selectable(std::string(std::to_string(weapon.itemDefinitionIndex) + " " + std::to_string(weapon.paintKit)).c_str())) { Settings::InventoryChanger::weapons.erase(Settings::InventoryChanger::weapons.begin() + weapon_index); } weapon_index++; } ImGui::ListBoxFooter(); ImGui::PopStyleColor(); ImGui::Columns(1, nullptr, false); ImGui::Separator(); ImGui::Spacing(); 18. *NEW* Last thing is in Client.cpp paste this under Settings::LoadSettings(BaseDir + "\\" + ConfigList[iConfigSelect]); SendMMHello(); 19. *OPTIONAL BUT VERY USEFUL* Here's a tut made by karmafreediet to add a search box for Medals and Skins! Great Tut.

Screenshot : https://ibb.co/jqsmqS
Screenshot 2 : https://ibb.co/ngA0H7

[Thanks Baseult and Swifty for sharing this code ♥]