RecvVarProxyFn oRecvnModelIndex;
void Hooked_RecvProxy_Viewmodel(CRecvProxyData *pData, void *pStruct, void *pOut)
{
int iModel = pData->m_Value.m_Int;
// Get the knife view model id's
static int default_t = Interfaces::ModelInfo->GetModelIndex("models/weapons/v_knife_default_t.mdl");
static int default_ct = Interfaces::ModelInfo->GetModelIndex("models/weapons/v_knife_default_ct.mdl");
static int bayonet = Interfaces::ModelInfo->GetModelIndex("models/weapons/v_knife_bayonet.mdl");
static int karambit = Interfaces::ModelInfo->GetModelIndex("models/weapons/v_knife_karam.mdl");
static int flip = Interfaces::ModelInfo->GetModelIndex("models/weapons/v_knife_flip.mdl");
static int gut = Interfaces::ModelInfo->GetModelIndex("models/weapons/v_knife_gut.mdl");
static int m9 = Interfaces::ModelInfo->GetModelIndex("models/weapons/v_knife_m9_bay.mdl");
static int huntsman = Interfaces::ModelInfo->GetModelIndex("models/weapons/v_knife_tactical.mdl");
static int butterfly = Interfaces::ModelInfo->GetModelIndex("models/weapons/v_knife_butterfly.mdl");
static int daggers = Interfaces::ModelInfo->GetModelIndex("models/weapons/v_knife_push.mdl");
static int falchion = Interfaces::ModelInfo->GetModelIndex("models/weapons/v_knife_falchion_advanced.mdl");
static int bowie = Interfaces::ModelInfo->GetModelIndex("models/weapons/v_knife_survival_bowie.mdl");
// Get local player (just to stop replacing spectators knifes)
IClientEntity* pLocal = Interfaces::EntList->GetClientEntity(Interfaces::Engine->GetLocalPlayer());
if (Menu::Window.MiscTab.KnifeEnable.GetState() && pLocal)
{
// If we are alive and holding a default knife(if we already have a knife don't worry about changing)
if (pLocal->IsAlive() && (pData->m_Value.m_Int == default_t || pData->m_Value.m_Int == default_ct))
{
// Set whatever knife we want
switch (Menu::Window.MiscTab.KnifeModel.GetIndex())
{
case 0:
//none
break;
//bayonet karambit flip gut m9 hunts butterfly
case 1:
pData->m_Value.m_Int = bayonet; //bayonet
break;
case 2:
pData->m_Value.m_Int = karambit; //karambit
break;
case 3:
pData->m_Value.m_Int = flip; //flip
break;
case 4:
pData->m_Value.m_Int = gut; //gut
break;
case 5:
pData->m_Value.m_Int = m9; //m9bayo
break;
case 6:
pData->m_Value.m_Int = huntsman; //hunts
break;
case 7:
pData->m_Value.m_Int = butterfly; //butterfly
break;
case 8:
pData->m_Value.m_Int = daggers;
break;
case 9:
pData->m_Value.m_Int = falchion;
break;
case 10:
pData->m_Value.m_Int = bowie;
break;
}
}
}
// Carry on the to original proxy
oRecvnModelIndex(pData, pStruct, pOut);
}
#pragma region Knife
KnifeGroup.SetPosition(408, 48);
KnifeGroup.SetSize(360, 95);
KnifeGroup.SetText("Knife Changer");
RegisterControl(&KnifeGroup);
KnifeEnable.SetFileId("knife_enable");
KnifeGroup.PlaceLabledControl("Enable", this, &KnifeEnable);
//bayonet karambit flip gut m9 hunts butterfly
KnifeModel.SetFileId("knife_model");
KnifeModel.AddItem("Off");
KnifeModel.AddItem("Bayonet");
KnifeModel.AddItem("Karambit");
KnifeModel.AddItem("Flip Knife");
KnifeModel.AddItem("Gut Knife");
KnifeModel.AddItem("M9 Bayonet");
KnifeModel.AddItem("Huntsman");
KnifeModel.AddItem("Butterfly");
KnifeModel.AddItem("Shadow Daggers");
KnifeModel.AddItem("Falchion");
KnifeModel.AddItem("Bowie");
KnifeGroup.PlaceLabledControl("Knife", this, &KnifeModel);
KnifeSkin.SetFileId("knife_skin");
KnifeSkin.AddItem("Doppler Sapphire");
KnifeSkin.AddItem("Doppler Ruby");
KnifeSkin.AddItem("Tiger");
KnifeSkin.AddItem("Plain");
KnifeGroup.PlaceLabledControl("Skin", this, &KnifeSkin);
KnifeApply.SetText("Apply Knife");
KnifeApply.SetCallback(KnifeApplyCallbk);
KnifeGroup.PlaceLabledControl("", this, &KnifeApply);
#pragma endregion
void __stdcall Hooked_FrameStageNotify(ClientFrameStage_t curStage)
{
if (curStage == FRAME_NET_UPDATE_POSTDATAUPDATE_START)
{
IClientEntity *pLocal = Interfaces::EntList->GetClientEntity(Interfaces::Engine->GetLocalPlayer());
if (Menu::Window.MiscTab.KnifeEnable.GetState() && pLocal)
{
IClientEntity* WeaponEnt = Interfaces::EntList->GetClientEntityFromHandle(pLocal->GetActiveWeaponHandle());
CBaseCombatWeapon* Weapon = (CBaseCombatWeapon*)WeaponEnt;
if (Weapon)
{
static bool LastItemWasKnife = false;
if (WeaponEnt->GetClientClass()->m_ClassID == (int)CSGOClassID::CKnife)
{
*Weapon->FallbackStatTrak() = 1337;
int Skin = Menu::Window.MiscTab.KnifeSkin.GetIndex();
if (Skin == 0) *Weapon->FallbackPaintKit() = 416;
if (Skin == 1) *Weapon->FallbackPaintKit() = 415;
if (Skin == 3) *Weapon->FallbackPaintKit() = 409;
if (Skin == 4) *Weapon->FallbackPaintKit() = 0;
*Weapon->FallbackWear() = 0.0001;
//*Weapon->m_AttributeManager()->m_Item()->ItemIDHigh() = 0xFFFFF;
//*Weapon->m_AttributeManager()->m_Item()->ItemIDLow() = 0xFFFFF;
if (LastItemWasKnife == false)
{
//Meme->nFlags &= ~FCVAR_CHEAT;
//Interfaces::Engine->ClientCmd_Unrestricted("cl_fullupdate");
//Meme->nFlags |= FCVAR_CHEAT;
LastItemWasKnife = true;
}
*Weapon->m_AttributeManager()->m_Item()->ItemIDLow() = 7;
int Model = Menu::Window.MiscTab.KnifeModel.GetIndex();
*Weapon->m_AttributeManager()->m_Item()->ItemIDHigh() = (Model == 0) ? 507 : 500;
*Weapon->m_AttributeManager()->m_Item()->ItemDefinitionIndex() = (Model == 0) ? 507 : 500;
if (GUI.GetKeyState(VK_END))
ForceUpdate();
}
}
}
}
oFrameStageNotify(curStage);
}