********king norecoil

Posts 1–9 of 9 · Page 1 of 1
********king norecoil
Hello guys. today i found gаmеbrеaking bug.
When i turn on my norecoil - its work OK , but after game ending my game gui breaking and i cant do anything (like: leave from the room, open store or smth else)
also the names of other players disappear:
like in this screenshot:



My norecoil function:
Code:
	DWORD CShell = (DWORD)GetModuleHandleA("cshell.dll");
	DWORD CPlayerClnt = *(DWORD*)((CShell + dw_PlayerClient) + off_PlayerClient);
	if (CPlayerClnt && *(float*)(CPlayerClnt + 0x61C) != 0.0002f)
	{
		*(float*)(CPlayerClnt + 0x61C) = 0.0002f;
	}
offsets are 100% valid. bcuz original values are good
Code:
float data1, data2;
void init()
{
	DWORD CShell = (DWORD)GetModuleHandleA("cshell.dll");
	DWORD CPlayerClnt = *(DWORD*)((CShell + dw_PlayerClient) + off_PlayerClient);
	if (CPlayerClnt)
	{
		data1 = *(float*)(CPlayerClnt + 0x61C); // lessrecoil
		//data2 = *(float*)(CPlayerClnt + 0x52C); // lessrecoil ZM
	}
}
data1 always from <0 to 1> and seems to be ok
Code:
D::DrawText(15, 35, Color::White(), FontFlags::None, "Recoil <%.10f> <%.10f>", data1, data2);
offset is valid because its working
Try to restore their default values if not in game

That's what I'm currently doing. It gives me the same result. Game gui is breaking.
enable = Settings.bNoRecoil && IsInGame
Quote Originally Posted by peshkayt View Post

That's what I'm currently doing. It gives me the same result. Game gui is breaking.
enable = Settings.bNoRecoil && IsInGame
Try use class Game Status....
.. some of my old stuff

Code:
void		ICPlayerClntBase::QuickFire(int State)
{
	if (!this) return;
	if (!this->GetPlayerViewManager()) return;
	if (!this->GetPlayerViewManager()->GetModelInstance()) return;
	
	int WeaponID = this->GetPlayerViewManager()->GetWeaponID();

	if (WeaponID < 0 || WeaponID >= NetVar::DT_Weapon::m_MaxWeaponCount) return;

	ICWeaponMgr* Weapon = I::g_WeapInfo->GetWeaponById(WeaponID);
	if (Weapon != NULL && Weapon != nullptr)
	{
		if (Weapon->GetWeaponType() == WEAPONCLASS::WEPCLASS_SNIPER ||
			Weapon->GetWeaponType() == WEAPONCLASS::WEPCLASS_SHOTGUN ||
			Weapon->GetWeaponType() == WEAPONCLASS::WEPCLASS_KNIFE ||
			Weapon->GetWeaponType() == WEAPONCLASS::WEPCLASS_C4)
			return;
	}

#ifdef USE_QUICKFIRE_WEAPON_ANIM
	if (!this->GetPlayerViewManager()->GetModelInstance()->GetModel()) return;
	if (!this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()) return;

	for (int i = 0; i < this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimCount(); i++)
	{
		if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i))
		{
			std::string AnimName = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetAnimName();

			std::size_t foundPreFire = AnimName.find("prefire");
			std::size_t foundPostFire = AnimName.find("postfire");

			if ((foundPreFire != std::string::npos) || (foundPostFire != std::string::npos))
			{
				if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetKeyFrame())
				{
					__int32 FrameCount = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetFramesCount();

					if (State && Vars.Miscs.enabled)
						this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetKeyFrame()->SetAnimLength(FrameCount) = 1;
					else
					{
						this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetKeyFrame()->SetAnimLength(FrameCount) =
							WeaponKeyFrames_DB[WeaponID].AnimLegth_DB[i];
					}
				}
			}

		}
	}
#else
	if (State && Vars.Miscs.enabled)
		if (this->RealWeaponState() == 3)
			this->RealWeaponState() = 2;
#endif
}

void		ICPlayerClntBase::SlashKnife(bool State)
{
	if (!Vars.Miscs.enabled) return;
	if (I::g_pRoomInfo->IsPlayerIn_KnockBackMode()) return;
	if (!this) return;
	if (!this->GetPlayerViewManager()) return;
	if (!this->GetPlayerViewManager()->GetModelInstance()) return;

	int WeaponID = this->GetPlayerViewManager()->GetWeaponID();

	if (WeaponID < 0 || WeaponID >= NetVar::DT_Weapon::m_MaxWeaponCount) return;

	ICWeaponMgr* Weapon = I::g_WeapInfo->GetWeaponById(WeaponID);
	if (Weapon != NULL && Weapon != nullptr)
	{
		//removed....
	}
}

void		ICPlayerClntBase::FastKnife(int iSpeed)
{
	if (!Vars.Miscs.enabled) return;
	if (I::g_pRoomInfo->IsPlayerIn_KnockBackMode()) return;		
	if (!this) return;
	if (!this->GetPlayerViewManager()) return;
	if (!this->GetPlayerViewManager()->GetModelInstance()) return;

	int WeaponID = this->GetPlayerViewManager()->GetWeaponID();

	if (WeaponID < 0 || WeaponID >= NetVar::DT_Weapon::m_MaxWeaponCount) return;

	ICWeaponMgr* Weapon = I::g_WeapInfo->GetWeaponById(WeaponID);
	if (Weapon != NULL && Weapon != nullptr)
	{
		//removed....
	}
}

void		ICPlayerClntBase::FastReload(int iSpeed)
{
	if (!Vars.Miscs.enabled) return;
	if (!this) return;
	if (!this->GetPlayerViewManager()) return;
	if (!this->GetPlayerViewManager()->GetModelInstance()) return;

	if (this->IsReloading())
	{
		float fSpeed = 1.0f;
		if (iSpeed > 0)
		{
			fSpeed = iSpeed + 1;
			if (I::g_pPlayerInfo->GetPlayerViewManager()->IsCurrentWeaponSniper())
			{
				if (fSpeed > 5.0f)
					fSpeed = 5.0f;
			}
		}
		I::g_pModelLT->SetAnimRate(this->GetModelInstance(), PlayerBodyContext::kUpperContext, fSpeed);
	}
}

void		ICPlayerClntBase::FastChange(int iSpeed)
{
	if (!Vars.Miscs.enabled) return;
	if (!this) return;
	if (!this->GetPlayerViewManager()) return;
	if (!this->GetPlayerViewManager()->GetModelInstance()) return;

	// fast switch
	if (this->IsSwitching())
	{
		float fSpeed = 1.0f;
		if (iSpeed > 0)
		{
			if (iSpeed > 8)
				fSpeed = iSpeed * 10;
			else
				fSpeed = iSpeed * (iSpeed + 1);
		}
		I::g_pModelLT->SetAnimRate(this->GetModelInstance(), PlayerBodyContext::kUpperContext, fSpeed);
	}
}

void		ICPlayerClntBase::RemoveWeaponAnimation(void)
{
	/*if (!this) return;
	if (!this->GetPlayerViewManager()) return;
	if (!this->GetPlayerViewManager()->GetWeaponAnimationMgr()) return;

	int WeaponID = this->GetPlayerViewManager()->pCurrentWeaponID();

	if (WeaponID < 0 || WeaponID >= offsets.m_MaxWeaponCount) return;

	ICWeaponMgr* Weapon = I::g_WeapInfo->GetWeaponById(WeaponID);
	if (Weapon != NULL && Weapon != nullptr)
	{
		if (Weapon->GetWeaponType() == WEAPONCLASS::WEPCLASS_PISTOL
			&& Vars.Miscs.Weapon.Animation.Pistol) {
			//this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
			//GetWeaponAnimation()->AnimationState(0);
			this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
				GetWeaponAnimation()->DisableAnimation(1);
		}
		else if (Weapon->GetWeaponType() == WEAPONCLASS::WEPCLASS_SHOTGUN
			&& Vars.Miscs.Weapon.Animation.SG) {
			//this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
			//GetWeaponAnimation()->AnimationState(0);
			this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
				GetWeaponAnimation()->DisableAnimation(1);
		}
		else if (Weapon->GetWeaponType() == WEAPONCLASS::WEPCLASS_SMG
			&& Vars.Miscs.Weapon.Animation.SMG) {
			//this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
			//GetWeaponAnimation()->AnimationState(0);
			this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
				GetWeaponAnimation()->DisableAnimation(1);
		}
		else if (Weapon->GetWeaponType() == WEAPONCLASS::WEPCLASS_RIFLE
			&& Vars.Miscs.Weapon.Animation.Rifle) {
			//this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
			//GetWeaponAnimation()->AnimationState(0);
			this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
				GetWeaponAnimation()->DisableAnimation(1);
		}
		else if (Weapon->GetWeaponType() == WEAPONCLASS::WEPCLASS_SNIPER
			&& Vars.Miscs.Weapon.Animation.Sniper) {
			//this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
			//GetWeaponAnimation()->AnimationState(0);
			this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
				GetWeaponAnimation()->DisableAnimation(1);
		}
		else if (Weapon->GetWeaponType() == WEAPONCLASS::WEPCLASS_MACHINEGUN
			&& Vars.Miscs.Weapon.Animation.MG) {
			//this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
			//GetWeaponAnimation()->AnimationState(0);
			this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
				GetWeaponAnimation()->DisableAnimation(1);
		}
		else if (Weapon->GetWeaponType() == WEAPONCLASS::WEPCLASS_GRENADE
			&& Vars.Miscs.Weapon.Animation.Grenade) {
			//this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
			//	GetWeaponAnimation()->AnimationState(0);
			//this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
			//	GetWeaponAnimation()->DisableAnimation(1);
			this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
				GetWeaponAnimation()->SetAnimRateFn(10.0f);
		}
		else if (Weapon->GetWeaponType() == WEAPONCLASS::WEPCLASS_C4
			&& Vars.Miscs.Weapon.Animation.C4) {
			this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
				GetWeaponAnimation()->AnimationState(0);
			this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
				GetWeaponAnimation()->DisableAnimation(1);
		}
		else {
			this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
				GetWeaponAnimation()->AnimationState(1);
			this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
				GetWeaponAnimation()->DisableAnimation(0);
		}
	}*/
}

void		ICPlayerClntBase::RunWeaponFramesBackup()
{
	Vars.Miscs.Weapon.Animation.ResetAfterGame = true;

	if (!this) return;

	int WeaponID = this->GetPlayerViewManager()->GetWeaponID();

	if (WeaponID < 0 || WeaponID >= NetVar::DT_Weapon::m_MaxWeaponCount) return;

	if (WeaponID >= WeaponKeyFrames_DB.size()) return;

	if (!WeaponKeyFrames_DB[WeaponID].IsBackup)
	{
		if (!this->GetPlayerViewManager()) return;
		if (!this->GetPlayerViewManager()->GetModelInstance())  return;
		if (!this->GetPlayerViewManager()->GetModelInstance()->GetModel())  return;
		if (!this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()) return;

		int AnimCount = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimCount();
		int StatusAnimCount = 0;

		int Top = 50;

		WeaponKeyFrames_DB[WeaponID].ClearVectors();

		for (int i = 0; i < AnimCount; i++)
		{
			if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i))
			{
				DWORD BaseAddress = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetBaseAddress();
				
				WeaponKeyFrames_DB[WeaponID].BaseAddress = BaseAddress;
				
				/*D::Font->AddString(200, Top,
					Yellow, true, true, "%s: WeaponID[%d]:",
					ReClass::GetAddressInfo(BaseAddress).c_str(), WeaponID);
				Top += 15;*/

				//if (WeaponKeyFrames_DB[WeaponID]->IsBackupSuccess())
				//	StatusAnimCount += 1;

				CAnimKeyFrame* AnimKeyFrame = (CAnimKeyFrame*)BaseAddress;
				if (AnimKeyFrame == NULL || !U::CanReadPtr((DWORD)AnimKeyFrame))
					continue;

				/*D::Font->AddString(200, Top,
					Yellow, true, true, "Frames[%d]: %d", i, AnimKeyFrame->GetFramesCount());
				Top += 15;*/

				if (!U::CanReadPtr((DWORD)AnimKeyFrame->GetKeyFrame()))
					continue;

				CKeyFrame* KeyFrame = (CKeyFrame*)AnimKeyFrame->GetKeyFrame();
				if (KeyFrame == NULL || !U::CanReadPtr((DWORD)KeyFrame))
					continue;

				int Frames = AnimKeyFrame->GetFramesCount();

				WeaponKeyFrames_DB[WeaponID].FrameCount_DB.push_back(Frames);
				WeaponKeyFrames_DB[WeaponID].AnimName_DB.push_back(AnimKeyFrame->GetAnimName());
				WeaponKeyFrames_DB[WeaponID].AnimLegth_DB.push_back(KeyFrame->SetAnimLength(Frames));

				StatusAnimCount += 1;
			}
		}

		if (StatusAnimCount >= AnimCount)
			WeaponKeyFrames_DB[WeaponID].IsBackup = true;
	}
}

void		ICPlayerClntBase::Smoke()
{
	if (!this) return;
	if (!this->GetPlayerViewManager()) return;
	if (!this->GetPlayerViewManager()->GetModelInstance()) return;
	if (!this->GetPlayerViewManager()->GetModelInstance()->GetModel()) return;

	if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo())
	{
		// Select
		{
			__int32 prefire = 3;

			if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(prefire))
			{
				__int32 FrameCount = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(prefire)->GetFramesCount();

				if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(prefire)->GetKeyFrame())
				{
					if (G::GrenadeRemovePin_BaseAddress == NULL)
					{
						const char* FrameString = "";

						__int32 GrenadeRemovePinIndex = 5;

						if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(prefire)->GetKeyFrame()->GetFrame(GrenadeRemovePinIndex))
							FrameString = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(prefire)->GetKeyFrame()->GetFrame(GrenadeRemovePinIndex)->FrameString();

						if (strlen(FrameString) > 0)
							G::GrenadeRemovePin_BaseAddress = *(DWORD*)this->GetPlayerViewManager()->GetModelInstance()->
							GetModel()->GetAnimInfo()->GetAnimKeyFrame(prefire)->GetKeyFrame()->
							GetBaseAddressOfFrameString(GrenadeRemovePinIndex);
					}

					if (G::GrenadeRemovePin_BaseAddress != NULL)
					{
						__int32 select = 0; // Anim Index

						__int32 FrameID = 1; //2nd frame


						this->GetPlayerViewManager()->
							GetModelInstance()->GetModel()->GetAnimInfo()->
							GetAnimKeyFrame(select)->GetKeyFrame()->SetPointerFrameString(FrameID) =
							G::GrenadeRemovePin_BaseAddress;

						if (this->GetPlayerViewManager()->
							GetModelInstance()->GetModel()->GetAnimInfo()->
							GetAnimKeyFrame(select)->GetKeyFrame()->GetFrame(FrameID))
						{
							this->GetPlayerViewManager()->
								GetModelInstance()->GetModel()->GetAnimInfo()->
								GetAnimKeyFrame(select)->GetKeyFrame()->GetFrame(FrameID)->SetFrameString("ThrowingKnife");
						}

					}

				}
			}
		}
		// run
		{
			__int32 Run = 6;

			if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Run))
			{
				__int32 FrameCount = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Run)->GetFramesCount();

				if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Run)->GetKeyFrame())
				{
					if (G::GrenadeRemovePin_BaseAddress != NULL)
					{
						__int32 FrameID = 0; //1st frame

						this->GetPlayerViewManager()->GetModelInstance()->
							GetModel()->GetAnimInfo()->GetAnimKeyFrame(Run)->
							GetKeyFrame()->SetPointerFrameString(FrameID) =
							G::GrenadeRemovePin_BaseAddress;

						if (this->GetPlayerViewManager()->
							GetModelInstance()->GetModel()->GetAnimInfo()->
							GetAnimKeyFrame(Run)->GetKeyFrame()->GetFrame(FrameID))
						{
							this->GetPlayerViewManager()->
								GetModelInstance()->GetModel()->GetAnimInfo()->
								GetAnimKeyFrame(Run)->GetKeyFrame()->GetFrame(FrameID)->SetFrameString("ThrowingKnife");
						}

					}
				}
			}
		}

		if (G::GrenadeRemovePin_BaseAddress != NULL)
		{
			U::Logs::CreateLog("AOE-AnimFrameSmoke-MOD.log", ios::trunc);

			__int32 AnimCount = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimCount();

			for (int i = 0; i < AnimCount; i++)
			{
				if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i))
				{
					std::string AnimName = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetAnimName();

					std::string _idle_0 = "idle_0";
					std::string _run = "run";
					std::string _select = "select";

					if ((AnimName == _idle_0) || (AnimName == _run) || (AnimName == _select))
					{
						__int32 FrameCount = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetFramesCount();

						if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetKeyFrame())
						{
							if (AnimName == _idle_0)
								U::Logs::tWritelogKeys("//===============_idle_0     [%d]    ================//", i);
							if (AnimName == _run)
								U::Logs::tWritelogKeys("//===============_run     [%d]     ================//", i);
							if (AnimName == _select)
								U::Logs::tWritelogKeys("//===============_select     [%d]     ================//", i);

							U::Logs::tWritelogKeys("FrameCount: %d"), FrameCount;

							for (int x = 0; x < FrameCount; x++)
							{
								const char* FrameString = "";

								if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetKeyFrame()->GetFrame(x))
									FrameString = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetKeyFrame()->GetFrame(x)->FrameString();

								__int32 FrameTime = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetKeyFrame()->FrameTime(x);

								U::Logs::tWritelogKeys("FrameTime[%d]: %d => %s", x, FrameTime, FrameString);
							}

						}
					}
				}
			}

			U::Logs::tWritelogKeys("//===============================//");
			U::Logs::LogKeys.close();
		}

	}
}

void		ICPlayerClntBase::Claymore()
{
	if (!this) return;
	if (!this->GetPlayerViewManager()) return;
	if (!this->GetPlayerViewManager()->GetModelInstance()) return;

	if (this->GetPlayerViewManager()->GetModelInstance()->GetModel())
	{
		// Select
		{
			__int32 Select = 5;

			if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Select))
			{
				__int32 FrameCount = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Select)->GetFramesCount();

				if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Select)->GetKeyFrame())
				{
					if (G::WeaponReload_BaseAddress == NULL)
					{
						const char* FrameString = "";

						__int32 WeaponReloadIndex = 0;

						if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Select)->GetKeyFrame()->GetFrame(WeaponReloadIndex))
							FrameString = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Select)->GetKeyFrame()->GetFrame(WeaponReloadIndex)->FrameString();

						if (strlen(FrameString) > 0)
							G::WeaponReload_BaseAddress = *(DWORD*)this->GetPlayerViewManager()->GetModelInstance()->
							GetModel()->GetAnimInfo()->GetAnimKeyFrame(Select)->GetKeyFrame()->
							GetBaseAddressOfFrameString(WeaponReloadIndex);
					}

					if (G::CreateObject_BaseAddress != NULL)
					{
						for (int x = 1; x < FrameCount - 1; x++)
						{
							this->GetPlayerViewManager()->
								GetModelInstance()->GetModel()->GetAnimInfo()->
								GetAnimKeyFrame(Select)->GetKeyFrame()->SetPointerFrameString(x) =
								G::CreateObject_BaseAddress;
						}
					}

				}
			}
		}
		// run
		{
			__int32 Run = 4;

			if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Run))
			{
				__int32 FrameCount = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Run)->GetFramesCount();

				if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Run)->GetKeyFrame())
				{
					if (G::CreateObject_BaseAddress != NULL)
					{
						for (int x = 0; x < FrameCount - 1; x++)
						{
							this->GetPlayerViewManager()->GetModelInstance()->
								GetModel()->GetAnimInfo()->GetAnimKeyFrame(Run)->
								GetKeyFrame()->SetPointerFrameString(x) = G::CreateObject_BaseAddress;
						}
					}
				}
			}
		}
		//fire
		{
			__int32 Fire = 1;

			if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Fire))
			{
				__int32 FrameCount = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Fire)->GetFramesCount();

				if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Fire)->GetKeyFrame())
				{
					if (G::CreateObject_BaseAddress == NULL)
					{
						const char* FrameString = "";

						__int32 CreateObjectIndex = 14;

						if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Fire)->GetKeyFrame()->GetFrame(CreateObjectIndex))
							FrameString = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Fire)->GetKeyFrame()->GetFrame(CreateObjectIndex)->FrameString();

						if (strlen(FrameString) > 0)
							G::CreateObject_BaseAddress = *(DWORD*)this->GetPlayerViewManager()->GetModelInstance()->GetModel()->
							GetAnimInfo()->GetAnimKeyFrame(Fire)->GetKeyFrame()->
							GetBaseAddressOfFrameString(CreateObjectIndex);
					}

					if (G::CreateObject_BaseAddress != NULL && G::WeaponReload_BaseAddress != NULL)
					{
						for (int x = 0; x < FrameCount; x++)
						{
							if (x == 0)
							{
								this->GetPlayerViewManager()->
									GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Fire)->
									GetKeyFrame()->SetPointerFrameString(x) = G::WeaponReload_BaseAddress;
							}
							else
							{
								this->GetPlayerViewManager()->
									GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Fire)->
									GetKeyFrame()->SetPointerFrameString(x) = G::CreateObject_BaseAddress;
							}

						}
					}

				}
			}
		}

		if (!G::ClaymoreLog)
		{
			if (G::WeaponReload_BaseAddress != NULL && G::CreateObject_BaseAddress != NULL)
			{
				U::Logs::CreateLog("AOE-AnimFrame-MOD.log", ios::trunc);

				__int32 AnimCount = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimCount();

				for (int i = 0; i < AnimCount; i++)
				{
					if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i))
					{
						std::string AnimName = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetAnimName();

						std::string _fire = "fire";
						std::string _run = "run";
						std::string _select = "select";

						if ((AnimName == _fire) || (AnimName == _run) || (AnimName == _select))
						{
							__int32 FrameCount = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetFramesCount();

							if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetKeyFrame())
							{
								if (AnimName == _fire)
									U::Logs::tWritelogKeys("//===============_fire     [%d]    ================//", i);
								if (AnimName == _run)
									U::Logs::tWritelogKeys("//===============_run     [%d]     ================//", i);
								if (AnimName == _select)
									U::Logs::tWritelogKeys("//===============_select     [%d]     ================//", i);

								U::Logs::tWritelogKeys("FrameCount: %d", FrameCount);

								for (int x = 0; x < FrameCount; x++)
								{
									const char* FrameString = "";

									if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetKeyFrame()->GetFrame(x))
										FrameString = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetKeyFrame()->GetFrame(x)->FrameString();

									__int32 FrameTime = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetKeyFrame()->FrameTime(x);

									U::Logs::tWritelogKeys("FrameTime[%d]: %d => %s", x, FrameTime, FrameString);
								}

							}
						}
					}
				}

				U::Logs::tWritelogKeys("//===============================//");
				U::Logs::LogKeys.close();
			}

			G::ClaymoreLog = true;
		}

	}
}

#ifdef USE_NEW_NO_RECOIL
void		ICPlayerClntBase::NewNoRecoil(bool Status)
{
	static bool DoOnce = true;

	if (Status && DoOnce)
	{
		for (int i = 0; i < 2; i++)
		{
			// [ NO RECOIL ]
			B::HACKS::P_Perturb_Min_Max[i]->RePatch();
			// [ NO SPREAD ]
			B::HACKS::P_Full_Shot_ReactPitch[i]->RePatch();
			B::HACKS::P_Full_Shot_ReactYaw[i]->RePatch();
			// [ CROSSHAIR FIX ]
			B::HACKS::P_DetailPerturbShot[i]->RePatch();
		}
		DoOnce = false;
	}
	else if (!Status && !DoOnce)
	{
		for (int i = 0; i < 2; i++)
		{
			// [ NO RECOIL ]
			B::HACKS::P_Perturb_Min_Max[i]->UnPatch();
			// [ NO SPREAD ]
			B::HACKS::P_Full_Shot_ReactPitch[i]->UnPatch();
			B::HACKS::P_Full_Shot_ReactYaw[i]->UnPatch();
			// [ CROSSHAIR FIX ]
			B::HACKS::P_DetailPerturbShot[i]->UnPatch();
		}
		DoOnce = true;
	}
}
#endif

void		ICPlayerClntBase::NoRecoil(bool DoReset)
{

#pragma region ANTI_SHAKE
	// [ ACTIVATE NO SHAKE SCREEN ] for Sniper
	if (!NetVar::DT_Hacks::m_NoShakeScreen)
		return;

	static float _def = *(float*)NetVar::DT_Hacks::m_NoShakeScreen;

	if (DoReset)
		*(float*)NetVar::DT_Hacks::m_NoShakeScreen = _def;
	else
		*(float*)NetVar::DT_Hacks::m_NoShakeScreen = 0.0f;
#pragma endregion

#ifdef CROSSHAIR_0
	if (!offsets.m_Recoil1 || !offsets.m_Recoil2 || !offsets.m_Recoil3)
		return;
	if (*(float*)offsets.m_Recoil1)
		U::FastWrite<float>(offsets.m_Recoil1, 2.400000095f); 
	if (*(float*)offsets.m_Recoil2)
		U::FastWrite<float>(offsets.m_Recoil2, 7.400000095f);
	//if (*(DWORD*)offsets.m_Recoil3)
	//*(DWORD*)(offsets.m_Recoil3) = 1; //sniper
#endif
	if (this->IsGameModeIsOld())
	{
		if (DoReset)
		{
			// [ 90% NO RECOIL ]
			*(DWORD*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_Recoil[0][0]) = 0;
			// [ NO RECOIL ]
			B::HACKS::P_Perturb_Min_Max[0]->UnPatch();
			// [ CROSSHAIR FIX ]
			B::HACKS::P_DetailPerturbShot[0]->UnPatch();
		}
		else
		{
			// [ 90% NO RECOIL ]
			*(DWORD*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_Recoil[0][0]) = -1;
			// [ NO RECOIL ]
			B::HACKS::P_Perturb_Min_Max[0]->RePatch();
			// [ CROSSHAIR FIX ]
			B::HACKS::P_DetailPerturbShot[0]->RePatch();
		}
	}
	else
	{
		if (DoReset)
		{
			// [ 90% NO RECOIL ]
			*(DWORD*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_Recoil[1][0]) = 0;
			// [ NO RECOIL ]
			B::HACKS::P_Perturb_Min_Max[1]->UnPatch();
			// [ CROSSHAIR FIX ]
			B::HACKS::P_DetailPerturbShot[1]->UnPatch();
		}
		else
		{
			// [ 90% NO RECOIL ]
			*(DWORD*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_Recoil[1][0]) = -1;
			// [ NO RECOIL ]
			B::HACKS::P_Perturb_Min_Max[1]->RePatch();
			// [ CROSSHAIR FIX ]
			B::HACKS::P_DetailPerturbShot[1]->RePatch();
		}
	}
}

void		ICPlayerClntBase::SetViewAngle(float x, float y)
{
#ifdef USE_SETVIEWANGLE_VT
	typedef void(__thiscall* SetViewAngleFn)(void*, float Yaw, float Pitch, float Roll);
	return reinterpret_cast<SetViewAngleFn>(NetVar::DT_CGamePlayer::m_SetViewAngle[this->GameMode()])(this, y, x, this->GetRoll());
#else
	this->GetPitch() = x;
	this->GetYaw() = y;
#endif
}

void		ICPlayerClntBase::ShiftSpeed(bool isActive, float fSpeed)
{
	if (!this) return;

	if (this->IsGameModeIsOld())
	{
		if (isActive)
			*(float*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_ShiftSpeed[0]) = fSpeed; // 1.8f;
		else
			*(float*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_ShiftSpeed[0]) = 1.0f;
	}
	else
	{
		if (isActive)
			*(float*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_ShiftSpeed[1]) = fSpeed; // 1.8f;
		else
			*(float*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_ShiftSpeed[1]) = 1.0f;
	}
}

void		ICPlayerClntBase::CrouchSpeed(bool isActive, float fSpeed)
{
	if (!this) return;

	if (this->IsGameModeIsOld())
	{
		if (isActive && Vars.Miscs.enabled)
			*(float*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_CrouchSpeed[0]) = fSpeed; // 1.75f;
		else
			*(float*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_CrouchSpeed[0]) = 1.0f;
	}
	else
	{
		if (isActive && Vars.Miscs.enabled)
			*(float*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_CrouchSpeed[1]) = fSpeed; // 1.75f;
		else
			*(float*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_CrouchSpeed[1]) = 1.0f;
	}
}

void		ICPlayerClntBase::WalkThroughWall()
{
	if (this->IsGameModeIsOld())
	{
		*(float*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_WalkThroughWall[0][0]) = -56.0f;
		//*(float*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_WalkThroughWall[0][1]) = 140.0f;
		*(float*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_WalkThroughWall[0][2]) = -56.0f;
	}
	else
	{
		*(float*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_WalkThroughWall[1][0]) = -56.0f;
		//*(float*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_WalkThroughWall[1][1]) = 140.0f;
		*(float*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_WalkThroughWall[1][2]) = -56.0f;
	}
}

bool		ICPlayerClntBase::IsGun()
{
	if (this->WeaponSlot() == eCurrentWeaponSlot::CWS_PRIMARY ||
		this->WeaponSlot() == eCurrentWeaponSlot::CWS_SECONDARY)
		return true;
	return false;
}

bool		ICPlayerClntBase::IsGameModeIsOld()
{
	return (this->GameType() != MapType::NEW);
}

bool		ICPlayerClntBase::HasBullet()
{
	return (this->Clip() > 0);
}

bool		ICPlayerClntBase::IsReloading()
{
	return ((this->WeaponState() == eWeaponState::WS_RELOADING) ||
		(this->WeaponState() == eWeaponState::WS_RELOADING_SG) ||
		(this->WeaponState() == eWeaponState::WS_SLUG_RIGHTCLICK) ||
		(this->WeaponState() == eWeaponState::WS_SUBWEAPON_FPJ_FASTSHOOT));
}

bool		ICPlayerClntBase::IsSwitching()
{
	return (this->WeaponState() == eWeaponState::WS_SWITCHING);
}

bool		ICPlayerClntBase::IsFiring()
{
	return ((this->WeaponState() == eWeaponState::WS_FIRING) ||
		(this->WeaponState() == eWeaponState::WS_AFTERFIRING));
}

bool		ICPlayerClntBase::IsMoving()
{
	if (!this) return false;
	return this->PlayerState() == Movement::PS_MOVING;
}

bool		ICPlayerClntBase::IsJumping()
{
	if (!this) return false;
	return this->PlayerState() == Movement::PS_JUMP;
}

__int32		ICPlayerClntBase::GetPlayerState()
{
	return this->PlayerState();
}

bool		ICPlayerClntBase::IsMountedWeapon()
{
	__int32 MounteWeapons[] =
	{
		WN_GATLING_GUN,
		WN_FAL_CAMO_MOUNT,
		WN_MORTAR,
		WN_MOUNTED_WEAPON,
		WN_MOUNTED_WEAPON_MG_MODE_1,
		WN_MOUNTED_WEAPON_MG_MODE_2,
		WN_MOUNTED_WEAPON_MG_MODE_3
	};

	if (!Vars.Miscs.enabled) return false;
	if (!this) return false;
	if (!this->GetPlayerViewManager()) return false;

	__int32 WeaponID = this->GetPlayerViewManager()->GetWeaponID();

	if (WeaponID >= 0 && WeaponID < NetVar::DT_Weapon::m_MaxWeaponCount)
	{
		for (int i = 0; i < IM_ARRAYSIZE(MounteWeapons); i++)
			if (WeaponID == MounteWeapons[i])
				return true;
	}

	return false;
}

bool		ICPlayerClntBase::IsAIWeapon()
{
	if (!Vars.Miscs.enabled) return false;
	if (!this) return false;
	if (!this->GetPlayerViewManager()) return false;

	__int32 WeaponID = this->GetPlayerViewManager()->GetWeaponID();

	if (WeaponID >= 0 && WeaponID < NetVar::DT_Weapon::m_MaxWeaponCount)
	{
		ICWeaponMgr* Weapon = I::g_WeapInfo->GetWeaponById(WeaponID);
		if (Weapon != NULL && Weapon != nullptr)
		{
			if (Weapon->GetWeaponType() == WEAPONCLASS::WEPCLASS_AI3_WEAPON) 
				return true;
		}
	}

	return false;
}

class PlayerViewManager
{
public:
	void CreateAddressLog()
	{
		if (!this) return;
		U::CreateVMT(this, "AOE-PlayerViewManager-VT.log", false, 200);
	}

	ModelInstance* GetModelInstance() //access to weapon animation
	{
		if (!this) return NULL;
		return *(ModelInstance**)((uintptr_t)this + 0x0004);
	}

	PlayerViewModelManager* pPlayerViewModelManager()
	{
		if (!this) return NULL;
		return *(PlayerViewModelManager**)((uintptr_t)this + 0x003C);
	}

	ModelInstance* GetLocalPlayerObject()
	{
		if (!this) return NULL;
		//(*(int (__thiscall **)(int))(*(_DWORD *)CharacFX + 0x4C))(CharacFX);
		return *(ModelInstance**)((uintptr_t)this + NetVar::DT_PVM::m_LocalPlayerObject);
	}

	CObjectFX* GetCharacFX()
	{
		if (!this) return NULL;
		return *(CObjectFX**)((uintptr_t)this + NetVar::DT_PVM::m_CharacFX);
	}

	int _0x4C()
	{
		//*(char *)(CharacFX + 0xA8);
		return *(int*)((uintptr_t)this + 0x004C);
	}

	BYTE LocalPlayerIndex()
	{
		return *(BYTE*)((uintptr_t)this + NetVar::DT_PVM::m_LocalPlayerID);
	}

	int& CharacterID()
	{
		//(*(int (__thiscall **)(int))(*(_DWORD *)CharacFX + 0xB4))(CharacFX);
		return *(int*)((uintptr_t)this + NetVar::DT_PVM::m_CharacterTypeID);
	}

	int LocalTeamID()
	{
		//*(char *)(CharacFX + 0xEF39);
		return *(int*)((uintptr_t)this + 0x0054);
	}

	int GetWeaponID()
	{
		if (!this)
			return -1;
#ifdef USE_WEAPONID_VT
		typedef int(__thiscall* GetWeaponIDFn)(void*);
		return GetVTable<GetWeaponIDFn>(this, 29)(this);
#else
		//WeappnID = (*(int (__thiscall **)(int))(*(_DWORD *)CharacFX + 0xD4))(CharacFX);
		return *(int*)((uintptr_t)this + NetVar::DT_PVM::m_WeaponID);
#endif
	}

	bool IsCurrentWeaponSniper();

	//Zoom Status
	//50 54
	//50 0 1 2
	//54 2 0 1
	bool IsZoomed()
	{
		return this->WeaponZoomIndex() != 0;
	}

	int WeaponZoomIndex()
	{
		return *(int*)((uintptr_t)this + 0x0070);
	}

	int LastWeaponZoomIndex()
	{
		return *(int*)((uintptr_t)this + 0x0074);
	}

	//58 WeaponZoom default (1.571) 3 far 2 far 0.571 OK
	float& WeaponZoom()
	{
		return *(float*)((uintptr_t)this + 0x0078);
	}

	BYTE _0x88()
	{
		//*(_BYTE *)(CharacFX + 0x1247C);
		return *(BYTE*)((uintptr_t)this + 0x0088);
	}

	//eWeaponStateReload
	//8C
	//2 idle
	//1 switching
	//3 hold grenade
	//4 firing
	//7 after fire
	//5 reload
	//8 moving
	//12 combo 1
	//13 combo 2
	//16 knifebigshot
	int WeaponState()
	{
		return *(int*)((uintptr_t)this + 0x008C);
	}

	CBulletMgr* GetBulletMgr()
	{
		if (!this) return NULL;
		return *(CBulletMgr**)((uintptr_t)this + 0x009C);
	}

};

#include "../../SDK.h"

D3DXVECTOR3			ModelInstance::GetEyeLevel()
{
	D3DXVECTOR3 vPos, vDims;
	VEC_INIT(vPos);

	if (!this) return vPos;

	I::g_pPhysicsLT->GetObjectDims(this, &vDims);
	I::g_pLTClient->GetObjectPos(this, &vPos);

	vPos.y += vDims.y / 2.0f;
	//	vPos.y -= m_fEyeLevelOffset;
	vPos.y -= 1;

	return vPos;
}

bool				ModelInstance::IsVisible_CastRay()
{
	if (!this)
		return false;

	D3DXVECTOR3 vOurPos, vTheirPos;
	D3DXVECTOR3 vPos = E::Visuals->GetMyObject()->GetEyeLevel();

	// [ GET LOCAL WORLD POSITION ]
	I::g_pLTClient->GetObjectPos(E::Visuals->GetMyObject(), &vOurPos);
	// [ GET ENEMY WORLD POSITION ]
	I::g_pLTClient->GetObjectPos(this, &vTheirPos);

	D3DXVECTOR3 vDir;
	VEC_SUB(vDir, vTheirPos, vOurPos);

	IntersectQuery IQuery;
	IntersectInfo IInfo;

	memset(&IQuery, 0, sizeof(IQuery));
	memset(&IInfo, 0, sizeof(IInfo));

	//VEC_COPY(IQuery.m_From, vOurPos);
	VEC_COPY(IQuery.m_From, vPos);
	VEC_COPY(IQuery.m_Direction, vDir);

	IQuery.m_Flags = INTERSECT_OBJECTS;
	IQuery.m_FilterFn = NULL;

	if (I::g_pLTBase->CastRay(&IQuery, &IInfo))
	{
		// BUGBUG: If the object is partially occluded it might fail this test!
		if (IInfo.m_hObject == this)
		{
			return TRUE;
		}
	}

	return FALSE;
}

bool				ModelInstance::IsVisible()
{
	if (!this) 
		return false;

	D3DXVECTOR3 MyPos, EnemyPos;

	// [ GET LOCAL WORLD POSITION ]
	I::g_pLTClient->GetObjectPos(E::Visuals->GetMyObject(), &MyPos);
	// [ GET ENEMY WORLD POSITION ]
	I::g_pLTClient->GetObjectPos(this, &EnemyPos);

	IntersectQuery IQuery;
	IntersectInfo IInfo;

	memset(&IQuery, 0, sizeof(IQuery));
	memset(&IInfo, 0, sizeof(IInfo));

	VEC_COPY(IQuery.m_From, MyPos);
	VEC_COPY(IQuery.m_To, EnemyPos);

	//IQuery.m_Flags = INTERSECT_OBJECTS | IGNORE_NONSOLID;
	//IQuery.m_FilterFn = TransparentObjectFilterFn;

	bool bVisible = !((bool(__cdecl *)(IntersectQuery *, IntersectInfo *))
		NetVar::DT_CLTBase::DT_CLTBase_Address::m_IntersectSegment)(&IQuery, &IInfo);
	if ((!bVisible) &&
		(IInfo.m_hObject == this))
	{
		bVisible = true;
	}

	return bVisible;
}

LTRect				ModelInstance::GetBox()
{
	// https://www.*************.me/forum/counterstrike-global-offensive/124388-bounding-esp-boxes.html

	LTRect rect;
	rect.x = 0;
	rect.y = 0;
	rect.w = 0;
	rect.h = 0;

	// Get bounding box
	//D3DXVECTOR3 min = this->GetcObject()->GetOrigin();
	//D3DXVECTOR3 max = this->GetcObject()->GetBoxMax();

	//D3DXVECTOR3 min = this->GetCharacFX()->Object()->GetOrigin();
	//D3DXVECTOR3 max = this->GetCharacFX()->Object()->GetBoxMax();

	D3DXVECTOR3 min = D3DXVECTOR3(0, 0, 0);
	D3DXVECTOR3 max = D3DXVECTOR3(0, 0, 0);

	if (!this) return rect;

	if (I::g_pLTClient->GetObjectBoxMin(this, &min) != LT_OK)
		return rect;
	if (I::g_pLTClient->GetObjectBoxMax(this, &max) != LT_OK)
		return rect;

	// Points of a 3d bounding box
	D3DXVECTOR3 points[] =
	{
		D3DXVECTOR3(min.x, min.y, min.z),
		D3DXVECTOR3(min.x, max.y, min.z),
		D3DXVECTOR3(max.x, max.y, min.z),
		D3DXVECTOR3(max.x, min.y, min.z),
		D3DXVECTOR3(max.x, max.y, max.z),
		D3DXVECTOR3(min.x, max.y, max.z),
		D3DXVECTOR3(min.x, min.y, max.z),
		D3DXVECTOR3(max.x, min.y, max.z)
	};

	/*
	.6-------5					        blb = 0
	.' |       .' |					        brb = 1
	7---+--4'   |			0 = min			frb = 2
	|   |    |    |			4 = max			flb = 3
	y |  ,0---+---1					        frt = 4
	|.'       | .'  z					    brt = 5
	3------2						        blt = 6
	x						                flt = 7

	blt------brt		blt = back-left-top
	.' |        .'|			brt = back-right-top
	flt---+--frt  |			brb = back-right-bottom
	|   |     |   |			blb = back-left-bottom
	y |  blb---+--brb		flt = front-left-top
	|.'        | .'  z		frt = front-right-top
	flb------frb			frb = front-right-bottom
	x						flb = front-left-bottom
	*/

	// Variables
	D3DXVECTOR3 flb, brt, blb, frt, frb, brb, blt, flt;

	// Get screen positions
	if (D::WTS(points[3], &flb) &&
		D::WTS(points[5], &brt) &&
		D::WTS(points[0], &blb) &&
		D::WTS(points[4], &frt) &&
		D::WTS(points[2], &frb) &&
		D::WTS(points[1], &brb) &&
		D::WTS(points[6], &blt) &&
		D::WTS(points[7], &flt))
	{
		// Put them in an array (maybe start them off in one later for speed?)
		D3DXVECTOR3 arr[] = { flb, brt, blb, frt, frb, brb, blt, flt };

		// Init this shit
		float left = flb.x;
		float top = flb.y;
		float right = flb.x;
		float bottom = flb.y;

		// Find the bounding corners for our box
		for (int i = 1; i < 8; i++)
		{
			if (left > arr[i].x)
				left = arr[i].x;
			if (bottom < arr[i].y)
				bottom = arr[i].y;
			if (right < arr[i].x)
				right = arr[i].x;
			if (top > arr[i].y)
				top = arr[i].y;
		}

		// Width / height
		rect.x = left;
		rect.y = top;
		rect.w = right - left;
		rect.h = bottom - top;

		rect.centerX = rect.x + (rect.w / 2);
		rect.centerY = rect.y + (rect.h / 2);

		return rect;
	}

	return rect;
}

unsigned int		ModelInstance::UnknownFn()
{
	unsigned int result; // eax
	unsigned int BoneID; // [esp+Ch] [ebp-8h]
	unsigned int TotalBones; // [esp+10h] [ebp-4h]

	CModel* Model = (CModel*)this->GetModel();
	if (!Model) return result;

	TotalBones = Model->GetModelNodeCount();

	CBones_20A4* CBones = (CBones_20A4*)this->GetBones_20A4();
	if (!CBones) return result;

	for (BoneID = 0; ; ++BoneID)
	{
		result = BoneID;
		if (BoneID >= TotalBones)
			break;

		//*(BYTE *)(*(DWORD *)(CBones->GetBaseAddress() + 3 * BoneID + 1)) = 0;
		//*(BYTE *)(*(DWORD *)(CBones->GetBaseAddress() + 3 * BoneID + 2)) = 0;

		//*(BYTE *)(*(DWORD *)this->GetBones_20A4()->GetBaseAddress() + 3 * BoneID + 1) = 0;
		//*(BYTE *)(*(DWORD *)this->GetBones_20A4()->GetBaseAddress() + 3 * BoneID + 2) = 0;
	}
	return result;
}

void				ModelInstance::SetCurrAnim(unsigned __int8 TrackerID, unsigned int AnimID)
{
	if (!this) return;

	CAnimation* Animation = (CAnimation*)this->GetAnimation();
	if (!Animation) return;

	CModelAnimation* ModelAnimation = (CModelAnimation*)Animation->GetModelAnimation(TrackerID);
	if (!ModelAnimation) return;

	if (ModelAnimation->SetCurrAnimFn(AnimID, 1))
	{
		//this->UnknownFn();
		//ModelAnimation->off_0070() = 1;
	}
}

void				ModelInstance::SetAnimRate(unsigned __int8 TrackerID, float fRate)
{
	if (!this) return;

	CAnimation* Animation = (CAnimation*)this->GetAnimation();
	if (!Animation) return;

	CModelAnimation* ModelAnimation = (CModelAnimation*)Animation->GetModelAnimation(TrackerID);
	if (!ModelAnimation) return;

	ModelAnimation->SetAnimRateFn(fRate);
	ModelAnimation->off_0070() = 1;
}

float				ModelInstance::GetAnimRate(unsigned __int8 TrackerID)
{
	if (!this) return 0.0f;

	CAnimation* Animation = (CAnimation*)this->GetAnimation();
	if (!Animation) return 0.0f;

	CModelAnimation* ModelAnimation = (CModelAnimation*)Animation->GetModelAnimation(TrackerID);
	if (!ModelAnimation) return 0.0f;

	return ModelAnimation->GetAnimRateFn();
}

void				ModelInstance::SetPosition(D3DXVECTOR3 NewPosition)
{
	if (!this) return;

	//if (this->CheckForTeleport())
	{
		typedef float*(__thiscall* SetPositionFn)(float *, float *);
		reinterpret_cast<SetPositionFn>(NetVar::DT_Misc_Virtual::m_SetPositionFn)((float*)this, NewPosition);
		//this->CheckForTeleport() = 0;
	}
}

__int32				ModelInstance::GetNumNodes()
{
	unsigned int numnodes = 0;

	if (!this) return numnodes;

	I::g_pModelLT->GetNumNodes(this, numnodes);
	return numnodes;
}

void				ModelInstance::SetObjectFlags(const ObjFlagType flagType, uint32 dwFlags, uint32 dwMask)
{
	if (!this) return;

	I::Engine->GetICLTCommonClient()->GetLTCommon()->SetObjectFlags(this, flagType, dwFlags, dwMask);
}

void				ModelInstance::SetRespawnInvulnerability()
{
	if (!this) return;
}

void				ModelInstance::SetObjectEnableRefraction(char a2)
{
	if (!this) return;
	I::g_pCommonLT->SetObjectEnableRefraction(this, a2);
}
some reference [CFPH]
Code:
class ICPlayerClntBase : public CPlayerCInt
{
public:
	//V[45]: cshell.dll + 1098C430 LowerAnimRate WeaponMgr
	//V[55]: cshell.dll + 985FE0 FastKnife
	//V[555]: cshell.dll + 99EC60 STW
	//V[160]: cshell.dll + 9915B0 CameraYaw
	//V[67]: cshell.dll + 99AA00 CameraYaw
	//V[54]: cshell.dll + 9AC3C0 Fire ANim Multiplier
	//V[622]: cshell.dll + 98F690 RangeDamage
	//V[761]: cshell.dll + 4C9000 void __thiscall sub_104C9000(char *this, __int16 a2, int a3)
	//V[20]: cshell.dll + 980EF0 subweaponindex  return weaponmgrbase int __thiscall sub_10980EF0(int *this)
	//V[20]: cshell.dll + 980EF0 (linkweaponindex 0x1128) called by smoke  return weaponmgrbase int __thiscall sub_10980EF0(int *this)
	//V[838]: cshell.dll + 4E2360 Grenade Bound
	//V[826]: cshell.dll + 4E5AC0 Freeze Smoke and Flash     void __thiscall sub_104E5AC0(_BYTE *PlayerClient, float a2)
	//V[128]: cshell.dll + 55F4F0 check if rifle and subtype == 5 and 13
	//V[49]: cshell.dll + 970260 LeverAction WeaponMgr
	//V[459]: cshell.dll + 9B9620 GAMEPROTO_CS_PICKUPWEAPONREQ
	//V[457]: cshell.dll + 9B8B30 Return WeaponBaseMgr  void __thiscall sub_109B8B30(void *this)
	//V[453]: cshell.dll + 9B7F70 GAMEPROTO_CS_REQ_LINKWEAPON
	//V[698]: cshell.dll + 985880 JumpGravity
	//V[53]: cshell.dll + 988820 FastFireAnimRatio
	//V[469]: cshell.dll + 9735F0 ChangeModeAnimRatio
	//V[85]: cshell.dll + 971160 bag trigger
	//V[560]: cshell.dll + 9937A0 Knockback
	//V[685]: cshell.dll + 9857B0 Call SetKnockBack
	//V[600]: cshell.dll + 976620 MoveSpeedPenalty
	//V[695] : cshell.dll + 974060 ReloadAnimRatio
	//V[696] : cshell.dll + 974080 ChangeWeaponAnimRatio
	//V[110]: cshell.dll + 10884980 SetViewAngle
	//V[112] : cshell.dll + 878FD0 SetViewAngle
	//V[329]: cshell.dll + 96F920 AMMO PER MAGAZINE
	//V[396]: cshell.dll + 991C00 Crosshair
	//V[638]: cshell.dll + 97F3C0 WTW
	//V[546]: cshell.dll + 98A7D0 ThrowVelAngleGravityAirResTime
	//V[654]: cshell.dll + 970520 Weapon_Attributes Function
	//V[641]: cshell.dll + 96F7A0   738 CurrentAnim strcopy
	//V[642]: cshell.dll + 975AE0  ShotGun Reload0-1-2
	//V[643]: cshell.dll + 975850  Reload%s
	//V[644]: cshell.dll + 975CD0  GViewAnimNameSD
	//V[681]: cshell.dll + 979280 GAMEPROTO_CS_SET_RANDOM_KNIFE
};
Credits: Vaisefud, hkchen, geopulse
Quote Originally Posted by jayjay153 View Post
.. some of my old stuff

Code:
void		ICPlayerClntBase::QuickFire(int State)
{
	if (!this) return;
	if (!this->GetPlayerViewManager()) return;
	if (!this->GetPlayerViewManager()->GetModelInstance()) return;
	
	int WeaponID = this->GetPlayerViewManager()->GetWeaponID();

	if (WeaponID < 0 || WeaponID >= NetVar::DT_Weapon::m_MaxWeaponCount) return;

	ICWeaponMgr* Weapon = I::g_WeapInfo->GetWeaponById(WeaponID);
	if (Weapon != NULL && Weapon != nullptr)
	{
		if (Weapon->GetWeaponType() == WEAPONCLASS::WEPCLASS_SNIPER ||
			Weapon->GetWeaponType() == WEAPONCLASS::WEPCLASS_SHOTGUN ||
			Weapon->GetWeaponType() == WEAPONCLASS::WEPCLASS_KNIFE ||
			Weapon->GetWeaponType() == WEAPONCLASS::WEPCLASS_C4)
			return;
	}

#ifdef USE_QUICKFIRE_WEAPON_ANIM
	if (!this->GetPlayerViewManager()->GetModelInstance()->GetModel()) return;
	if (!this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()) return;

	for (int i = 0; i < this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimCount(); i++)
	{
		if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i))
		{
			std::string AnimName = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetAnimName();

			std::size_t foundPreFire = AnimName.find("prefire");
			std::size_t foundPostFire = AnimName.find("postfire");

			if ((foundPreFire != std::string::npos) || (foundPostFire != std::string::npos))
			{
				if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetKeyFrame())
				{
					__int32 FrameCount = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetFramesCount();

					if (State && Vars.Miscs.enabled)
						this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetKeyFrame()->SetAnimLength(FrameCount) = 1;
					else
					{
						this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetKeyFrame()->SetAnimLength(FrameCount) =
							WeaponKeyFrames_DB[WeaponID].AnimLegth_DB[i];
					}
				}
			}

		}
	}
#else
	if (State && Vars.Miscs.enabled)
		if (this->RealWeaponState() == 3)
			this->RealWeaponState() = 2;
#endif
}

void		ICPlayerClntBase::SlashKnife(bool State)
{
	if (!Vars.Miscs.enabled) return;
	if (I::g_pRoomInfo->IsPlayerIn_KnockBackMode()) return;
	if (!this) return;
	if (!this->GetPlayerViewManager()) return;
	if (!this->GetPlayerViewManager()->GetModelInstance()) return;

	int WeaponID = this->GetPlayerViewManager()->GetWeaponID();

	if (WeaponID < 0 || WeaponID >= NetVar::DT_Weapon::m_MaxWeaponCount) return;

	ICWeaponMgr* Weapon = I::g_WeapInfo->GetWeaponById(WeaponID);
	if (Weapon != NULL && Weapon != nullptr)
	{
		//removed....
	}
}

void		ICPlayerClntBase::FastKnife(int iSpeed)
{
	if (!Vars.Miscs.enabled) return;
	if (I::g_pRoomInfo->IsPlayerIn_KnockBackMode()) return;		
	if (!this) return;
	if (!this->GetPlayerViewManager()) return;
	if (!this->GetPlayerViewManager()->GetModelInstance()) return;

	int WeaponID = this->GetPlayerViewManager()->GetWeaponID();

	if (WeaponID < 0 || WeaponID >= NetVar::DT_Weapon::m_MaxWeaponCount) return;

	ICWeaponMgr* Weapon = I::g_WeapInfo->GetWeaponById(WeaponID);
	if (Weapon != NULL && Weapon != nullptr)
	{
		//removed....
	}
}

void		ICPlayerClntBase::FastReload(int iSpeed)
{
	if (!Vars.Miscs.enabled) return;
	if (!this) return;
	if (!this->GetPlayerViewManager()) return;
	if (!this->GetPlayerViewManager()->GetModelInstance()) return;

	if (this->IsReloading())
	{
		float fSpeed = 1.0f;
		if (iSpeed > 0)
		{
			fSpeed = iSpeed + 1;
			if (I::g_pPlayerInfo->GetPlayerViewManager()->IsCurrentWeaponSniper())
			{
				if (fSpeed > 5.0f)
					fSpeed = 5.0f;
			}
		}
		I::g_pModelLT->SetAnimRate(this->GetModelInstance(), PlayerBodyContext::kUpperContext, fSpeed);
	}
}

void		ICPlayerClntBase::FastChange(int iSpeed)
{
	if (!Vars.Miscs.enabled) return;
	if (!this) return;
	if (!this->GetPlayerViewManager()) return;
	if (!this->GetPlayerViewManager()->GetModelInstance()) return;

	// fast switch
	if (this->IsSwitching())
	{
		float fSpeed = 1.0f;
		if (iSpeed > 0)
		{
			if (iSpeed > 8)
				fSpeed = iSpeed * 10;
			else
				fSpeed = iSpeed * (iSpeed + 1);
		}
		I::g_pModelLT->SetAnimRate(this->GetModelInstance(), PlayerBodyContext::kUpperContext, fSpeed);
	}
}

void		ICPlayerClntBase::RemoveWeaponAnimation(void)
{
	/*if (!this) return;
	if (!this->GetPlayerViewManager()) return;
	if (!this->GetPlayerViewManager()->GetWeaponAnimationMgr()) return;

	int WeaponID = this->GetPlayerViewManager()->pCurrentWeaponID();

	if (WeaponID < 0 || WeaponID >= offsets.m_MaxWeaponCount) return;

	ICWeaponMgr* Weapon = I::g_WeapInfo->GetWeaponById(WeaponID);
	if (Weapon != NULL && Weapon != nullptr)
	{
		if (Weapon->GetWeaponType() == WEAPONCLASS::WEPCLASS_PISTOL
			&& Vars.Miscs.Weapon.Animation.Pistol) {
			//this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
			//GetWeaponAnimation()->AnimationState(0);
			this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
				GetWeaponAnimation()->DisableAnimation(1);
		}
		else if (Weapon->GetWeaponType() == WEAPONCLASS::WEPCLASS_SHOTGUN
			&& Vars.Miscs.Weapon.Animation.SG) {
			//this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
			//GetWeaponAnimation()->AnimationState(0);
			this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
				GetWeaponAnimation()->DisableAnimation(1);
		}
		else if (Weapon->GetWeaponType() == WEAPONCLASS::WEPCLASS_SMG
			&& Vars.Miscs.Weapon.Animation.SMG) {
			//this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
			//GetWeaponAnimation()->AnimationState(0);
			this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
				GetWeaponAnimation()->DisableAnimation(1);
		}
		else if (Weapon->GetWeaponType() == WEAPONCLASS::WEPCLASS_RIFLE
			&& Vars.Miscs.Weapon.Animation.Rifle) {
			//this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
			//GetWeaponAnimation()->AnimationState(0);
			this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
				GetWeaponAnimation()->DisableAnimation(1);
		}
		else if (Weapon->GetWeaponType() == WEAPONCLASS::WEPCLASS_SNIPER
			&& Vars.Miscs.Weapon.Animation.Sniper) {
			//this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
			//GetWeaponAnimation()->AnimationState(0);
			this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
				GetWeaponAnimation()->DisableAnimation(1);
		}
		else if (Weapon->GetWeaponType() == WEAPONCLASS::WEPCLASS_MACHINEGUN
			&& Vars.Miscs.Weapon.Animation.MG) {
			//this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
			//GetWeaponAnimation()->AnimationState(0);
			this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
				GetWeaponAnimation()->DisableAnimation(1);
		}
		else if (Weapon->GetWeaponType() == WEAPONCLASS::WEPCLASS_GRENADE
			&& Vars.Miscs.Weapon.Animation.Grenade) {
			//this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
			//	GetWeaponAnimation()->AnimationState(0);
			//this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
			//	GetWeaponAnimation()->DisableAnimation(1);
			this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
				GetWeaponAnimation()->SetAnimRateFn(10.0f);
		}
		else if (Weapon->GetWeaponType() == WEAPONCLASS::WEPCLASS_C4
			&& Vars.Miscs.Weapon.Animation.C4) {
			this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
				GetWeaponAnimation()->AnimationState(0);
			this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
				GetWeaponAnimation()->DisableAnimation(1);
		}
		else {
			this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
				GetWeaponAnimation()->AnimationState(1);
			this->GetPlayerViewManager()->GetModelInstance()->GetAnimation()->
				GetWeaponAnimation()->DisableAnimation(0);
		}
	}*/
}

void		ICPlayerClntBase::RunWeaponFramesBackup()
{
	Vars.Miscs.Weapon.Animation.ResetAfterGame = true;

	if (!this) return;

	int WeaponID = this->GetPlayerViewManager()->GetWeaponID();

	if (WeaponID < 0 || WeaponID >= NetVar::DT_Weapon::m_MaxWeaponCount) return;

	if (WeaponID >= WeaponKeyFrames_DB.size()) return;

	if (!WeaponKeyFrames_DB[WeaponID].IsBackup)
	{
		if (!this->GetPlayerViewManager()) return;
		if (!this->GetPlayerViewManager()->GetModelInstance())  return;
		if (!this->GetPlayerViewManager()->GetModelInstance()->GetModel())  return;
		if (!this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()) return;

		int AnimCount = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimCount();
		int StatusAnimCount = 0;

		int Top = 50;

		WeaponKeyFrames_DB[WeaponID].ClearVectors();

		for (int i = 0; i < AnimCount; i++)
		{
			if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i))
			{
				DWORD BaseAddress = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetBaseAddress();
				
				WeaponKeyFrames_DB[WeaponID].BaseAddress = BaseAddress;
				
				/*D::Font->AddString(200, Top,
					Yellow, true, true, "%s: WeaponID[%d]:",
					ReClass::GetAddressInfo(BaseAddress).c_str(), WeaponID);
				Top += 15;*/

				//if (WeaponKeyFrames_DB[WeaponID]->IsBackupSuccess())
				//	StatusAnimCount += 1;

				CAnimKeyFrame* AnimKeyFrame = (CAnimKeyFrame*)BaseAddress;
				if (AnimKeyFrame == NULL || !U::CanReadPtr((DWORD)AnimKeyFrame))
					continue;

				/*D::Font->AddString(200, Top,
					Yellow, true, true, "Frames[%d]: %d", i, AnimKeyFrame->GetFramesCount());
				Top += 15;*/

				if (!U::CanReadPtr((DWORD)AnimKeyFrame->GetKeyFrame()))
					continue;

				CKeyFrame* KeyFrame = (CKeyFrame*)AnimKeyFrame->GetKeyFrame();
				if (KeyFrame == NULL || !U::CanReadPtr((DWORD)KeyFrame))
					continue;

				int Frames = AnimKeyFrame->GetFramesCount();

				WeaponKeyFrames_DB[WeaponID].FrameCount_DB.push_back(Frames);
				WeaponKeyFrames_DB[WeaponID].AnimName_DB.push_back(AnimKeyFrame->GetAnimName());
				WeaponKeyFrames_DB[WeaponID].AnimLegth_DB.push_back(KeyFrame->SetAnimLength(Frames));

				StatusAnimCount += 1;
			}
		}

		if (StatusAnimCount >= AnimCount)
			WeaponKeyFrames_DB[WeaponID].IsBackup = true;
	}
}

void		ICPlayerClntBase::Smoke()
{
	if (!this) return;
	if (!this->GetPlayerViewManager()) return;
	if (!this->GetPlayerViewManager()->GetModelInstance()) return;
	if (!this->GetPlayerViewManager()->GetModelInstance()->GetModel()) return;

	if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo())
	{
		// Select
		{
			__int32 prefire = 3;

			if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(prefire))
			{
				__int32 FrameCount = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(prefire)->GetFramesCount();

				if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(prefire)->GetKeyFrame())
				{
					if (G::GrenadeRemovePin_BaseAddress == NULL)
					{
						const char* FrameString = "";

						__int32 GrenadeRemovePinIndex = 5;

						if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(prefire)->GetKeyFrame()->GetFrame(GrenadeRemovePinIndex))
							FrameString = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(prefire)->GetKeyFrame()->GetFrame(GrenadeRemovePinIndex)->FrameString();

						if (strlen(FrameString) > 0)
							G::GrenadeRemovePin_BaseAddress = *(DWORD*)this->GetPlayerViewManager()->GetModelInstance()->
							GetModel()->GetAnimInfo()->GetAnimKeyFrame(prefire)->GetKeyFrame()->
							GetBaseAddressOfFrameString(GrenadeRemovePinIndex);
					}

					if (G::GrenadeRemovePin_BaseAddress != NULL)
					{
						__int32 select = 0; // Anim Index

						__int32 FrameID = 1; //2nd frame


						this->GetPlayerViewManager()->
							GetModelInstance()->GetModel()->GetAnimInfo()->
							GetAnimKeyFrame(select)->GetKeyFrame()->SetPointerFrameString(FrameID) =
							G::GrenadeRemovePin_BaseAddress;

						if (this->GetPlayerViewManager()->
							GetModelInstance()->GetModel()->GetAnimInfo()->
							GetAnimKeyFrame(select)->GetKeyFrame()->GetFrame(FrameID))
						{
							this->GetPlayerViewManager()->
								GetModelInstance()->GetModel()->GetAnimInfo()->
								GetAnimKeyFrame(select)->GetKeyFrame()->GetFrame(FrameID)->SetFrameString("ThrowingKnife");
						}

					}

				}
			}
		}
		// run
		{
			__int32 Run = 6;

			if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Run))
			{
				__int32 FrameCount = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Run)->GetFramesCount();

				if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Run)->GetKeyFrame())
				{
					if (G::GrenadeRemovePin_BaseAddress != NULL)
					{
						__int32 FrameID = 0; //1st frame

						this->GetPlayerViewManager()->GetModelInstance()->
							GetModel()->GetAnimInfo()->GetAnimKeyFrame(Run)->
							GetKeyFrame()->SetPointerFrameString(FrameID) =
							G::GrenadeRemovePin_BaseAddress;

						if (this->GetPlayerViewManager()->
							GetModelInstance()->GetModel()->GetAnimInfo()->
							GetAnimKeyFrame(Run)->GetKeyFrame()->GetFrame(FrameID))
						{
							this->GetPlayerViewManager()->
								GetModelInstance()->GetModel()->GetAnimInfo()->
								GetAnimKeyFrame(Run)->GetKeyFrame()->GetFrame(FrameID)->SetFrameString("ThrowingKnife");
						}

					}
				}
			}
		}

		if (G::GrenadeRemovePin_BaseAddress != NULL)
		{
			U::Logs::CreateLog("AOE-AnimFrameSmoke-MOD.log", ios::trunc);

			__int32 AnimCount = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimCount();

			for (int i = 0; i < AnimCount; i++)
			{
				if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i))
				{
					std::string AnimName = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetAnimName();

					std::string _idle_0 = "idle_0";
					std::string _run = "run";
					std::string _select = "select";

					if ((AnimName == _idle_0) || (AnimName == _run) || (AnimName == _select))
					{
						__int32 FrameCount = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetFramesCount();

						if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetKeyFrame())
						{
							if (AnimName == _idle_0)
								U::Logs::tWritelogKeys("//===============_idle_0     [%d]    ================//", i);
							if (AnimName == _run)
								U::Logs::tWritelogKeys("//===============_run     [%d]     ================//", i);
							if (AnimName == _select)
								U::Logs::tWritelogKeys("//===============_select     [%d]     ================//", i);

							U::Logs::tWritelogKeys("FrameCount: %d"), FrameCount;

							for (int x = 0; x < FrameCount; x++)
							{
								const char* FrameString = "";

								if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetKeyFrame()->GetFrame(x))
									FrameString = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetKeyFrame()->GetFrame(x)->FrameString();

								__int32 FrameTime = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetKeyFrame()->FrameTime(x);

								U::Logs::tWritelogKeys("FrameTime[%d]: %d => %s", x, FrameTime, FrameString);
							}

						}
					}
				}
			}

			U::Logs::tWritelogKeys("//===============================//");
			U::Logs::LogKeys.close();
		}

	}
}

void		ICPlayerClntBase::Claymore()
{
	if (!this) return;
	if (!this->GetPlayerViewManager()) return;
	if (!this->GetPlayerViewManager()->GetModelInstance()) return;

	if (this->GetPlayerViewManager()->GetModelInstance()->GetModel())
	{
		// Select
		{
			__int32 Select = 5;

			if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Select))
			{
				__int32 FrameCount = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Select)->GetFramesCount();

				if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Select)->GetKeyFrame())
				{
					if (G::WeaponReload_BaseAddress == NULL)
					{
						const char* FrameString = "";

						__int32 WeaponReloadIndex = 0;

						if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Select)->GetKeyFrame()->GetFrame(WeaponReloadIndex))
							FrameString = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Select)->GetKeyFrame()->GetFrame(WeaponReloadIndex)->FrameString();

						if (strlen(FrameString) > 0)
							G::WeaponReload_BaseAddress = *(DWORD*)this->GetPlayerViewManager()->GetModelInstance()->
							GetModel()->GetAnimInfo()->GetAnimKeyFrame(Select)->GetKeyFrame()->
							GetBaseAddressOfFrameString(WeaponReloadIndex);
					}

					if (G::CreateObject_BaseAddress != NULL)
					{
						for (int x = 1; x < FrameCount - 1; x++)
						{
							this->GetPlayerViewManager()->
								GetModelInstance()->GetModel()->GetAnimInfo()->
								GetAnimKeyFrame(Select)->GetKeyFrame()->SetPointerFrameString(x) =
								G::CreateObject_BaseAddress;
						}
					}

				}
			}
		}
		// run
		{
			__int32 Run = 4;

			if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Run))
			{
				__int32 FrameCount = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Run)->GetFramesCount();

				if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Run)->GetKeyFrame())
				{
					if (G::CreateObject_BaseAddress != NULL)
					{
						for (int x = 0; x < FrameCount - 1; x++)
						{
							this->GetPlayerViewManager()->GetModelInstance()->
								GetModel()->GetAnimInfo()->GetAnimKeyFrame(Run)->
								GetKeyFrame()->SetPointerFrameString(x) = G::CreateObject_BaseAddress;
						}
					}
				}
			}
		}
		//fire
		{
			__int32 Fire = 1;

			if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Fire))
			{
				__int32 FrameCount = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Fire)->GetFramesCount();

				if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Fire)->GetKeyFrame())
				{
					if (G::CreateObject_BaseAddress == NULL)
					{
						const char* FrameString = "";

						__int32 CreateObjectIndex = 14;

						if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Fire)->GetKeyFrame()->GetFrame(CreateObjectIndex))
							FrameString = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Fire)->GetKeyFrame()->GetFrame(CreateObjectIndex)->FrameString();

						if (strlen(FrameString) > 0)
							G::CreateObject_BaseAddress = *(DWORD*)this->GetPlayerViewManager()->GetModelInstance()->GetModel()->
							GetAnimInfo()->GetAnimKeyFrame(Fire)->GetKeyFrame()->
							GetBaseAddressOfFrameString(CreateObjectIndex);
					}

					if (G::CreateObject_BaseAddress != NULL && G::WeaponReload_BaseAddress != NULL)
					{
						for (int x = 0; x < FrameCount; x++)
						{
							if (x == 0)
							{
								this->GetPlayerViewManager()->
									GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Fire)->
									GetKeyFrame()->SetPointerFrameString(x) = G::WeaponReload_BaseAddress;
							}
							else
							{
								this->GetPlayerViewManager()->
									GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(Fire)->
									GetKeyFrame()->SetPointerFrameString(x) = G::CreateObject_BaseAddress;
							}

						}
					}

				}
			}
		}

		if (!G::ClaymoreLog)
		{
			if (G::WeaponReload_BaseAddress != NULL && G::CreateObject_BaseAddress != NULL)
			{
				U::Logs::CreateLog("AOE-AnimFrame-MOD.log", ios::trunc);

				__int32 AnimCount = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimCount();

				for (int i = 0; i < AnimCount; i++)
				{
					if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i))
					{
						std::string AnimName = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetAnimName();

						std::string _fire = "fire";
						std::string _run = "run";
						std::string _select = "select";

						if ((AnimName == _fire) || (AnimName == _run) || (AnimName == _select))
						{
							__int32 FrameCount = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetFramesCount();

							if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetKeyFrame())
							{
								if (AnimName == _fire)
									U::Logs::tWritelogKeys("//===============_fire     [%d]    ================//", i);
								if (AnimName == _run)
									U::Logs::tWritelogKeys("//===============_run     [%d]     ================//", i);
								if (AnimName == _select)
									U::Logs::tWritelogKeys("//===============_select     [%d]     ================//", i);

								U::Logs::tWritelogKeys("FrameCount: %d", FrameCount);

								for (int x = 0; x < FrameCount; x++)
								{
									const char* FrameString = "";

									if (this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetKeyFrame()->GetFrame(x))
										FrameString = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetKeyFrame()->GetFrame(x)->FrameString();

									__int32 FrameTime = this->GetPlayerViewManager()->GetModelInstance()->GetModel()->GetAnimInfo()->GetAnimKeyFrame(i)->GetKeyFrame()->FrameTime(x);

									U::Logs::tWritelogKeys("FrameTime[%d]: %d => %s", x, FrameTime, FrameString);
								}

							}
						}
					}
				}

				U::Logs::tWritelogKeys("//===============================//");
				U::Logs::LogKeys.close();
			}

			G::ClaymoreLog = true;
		}

	}
}

#ifdef USE_NEW_NO_RECOIL
void		ICPlayerClntBase::NewNoRecoil(bool Status)
{
	static bool DoOnce = true;

	if (Status && DoOnce)
	{
		for (int i = 0; i < 2; i++)
		{
			// [ NO RECOIL ]
			B::HACKS::P_Perturb_Min_Max[i]->RePatch();
			// [ NO SPREAD ]
			B::HACKS::P_Full_Shot_ReactPitch[i]->RePatch();
			B::HACKS::P_Full_Shot_ReactYaw[i]->RePatch();
			// [ CROSSHAIR FIX ]
			B::HACKS::P_DetailPerturbShot[i]->RePatch();
		}
		DoOnce = false;
	}
	else if (!Status && !DoOnce)
	{
		for (int i = 0; i < 2; i++)
		{
			// [ NO RECOIL ]
			B::HACKS::P_Perturb_Min_Max[i]->UnPatch();
			// [ NO SPREAD ]
			B::HACKS::P_Full_Shot_ReactPitch[i]->UnPatch();
			B::HACKS::P_Full_Shot_ReactYaw[i]->UnPatch();
			// [ CROSSHAIR FIX ]
			B::HACKS::P_DetailPerturbShot[i]->UnPatch();
		}
		DoOnce = true;
	}
}
#endif

void		ICPlayerClntBase::NoRecoil(bool DoReset)
{

#pragma region ANTI_SHAKE
	// [ ACTIVATE NO SHAKE SCREEN ] for Sniper
	if (!NetVar::DT_Hacks::m_NoShakeScreen)
		return;

	static float _def = *(float*)NetVar::DT_Hacks::m_NoShakeScreen;

	if (DoReset)
		*(float*)NetVar::DT_Hacks::m_NoShakeScreen = _def;
	else
		*(float*)NetVar::DT_Hacks::m_NoShakeScreen = 0.0f;
#pragma endregion

#ifdef CROSSHAIR_0
	if (!offsets.m_Recoil1 || !offsets.m_Recoil2 || !offsets.m_Recoil3)
		return;
	if (*(float*)offsets.m_Recoil1)
		U::FastWrite<float>(offsets.m_Recoil1, 2.400000095f); 
	if (*(float*)offsets.m_Recoil2)
		U::FastWrite<float>(offsets.m_Recoil2, 7.400000095f);
	//if (*(DWORD*)offsets.m_Recoil3)
	//*(DWORD*)(offsets.m_Recoil3) = 1; //sniper
#endif
	if (this->IsGameModeIsOld())
	{
		if (DoReset)
		{
			// [ 90% NO RECOIL ]
			*(DWORD*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_Recoil[0][0]) = 0;
			// [ NO RECOIL ]
			B::HACKS::P_Perturb_Min_Max[0]->UnPatch();
			// [ CROSSHAIR FIX ]
			B::HACKS::P_DetailPerturbShot[0]->UnPatch();
		}
		else
		{
			// [ 90% NO RECOIL ]
			*(DWORD*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_Recoil[0][0]) = -1;
			// [ NO RECOIL ]
			B::HACKS::P_Perturb_Min_Max[0]->RePatch();
			// [ CROSSHAIR FIX ]
			B::HACKS::P_DetailPerturbShot[0]->RePatch();
		}
	}
	else
	{
		if (DoReset)
		{
			// [ 90% NO RECOIL ]
			*(DWORD*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_Recoil[1][0]) = 0;
			// [ NO RECOIL ]
			B::HACKS::P_Perturb_Min_Max[1]->UnPatch();
			// [ CROSSHAIR FIX ]
			B::HACKS::P_DetailPerturbShot[1]->UnPatch();
		}
		else
		{
			// [ 90% NO RECOIL ]
			*(DWORD*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_Recoil[1][0]) = -1;
			// [ NO RECOIL ]
			B::HACKS::P_Perturb_Min_Max[1]->RePatch();
			// [ CROSSHAIR FIX ]
			B::HACKS::P_DetailPerturbShot[1]->RePatch();
		}
	}
}

void		ICPlayerClntBase::SetViewAngle(float x, float y)
{
#ifdef USE_SETVIEWANGLE_VT
	typedef void(__thiscall* SetViewAngleFn)(void*, float Yaw, float Pitch, float Roll);
	return reinterpret_cast<SetViewAngleFn>(NetVar::DT_CGamePlayer::m_SetViewAngle[this->GameMode()])(this, y, x, this->GetRoll());
#else
	this->GetPitch() = x;
	this->GetYaw() = y;
#endif
}

void		ICPlayerClntBase::ShiftSpeed(bool isActive, float fSpeed)
{
	if (!this) return;

	if (this->IsGameModeIsOld())
	{
		if (isActive)
			*(float*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_ShiftSpeed[0]) = fSpeed; // 1.8f;
		else
			*(float*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_ShiftSpeed[0]) = 1.0f;
	}
	else
	{
		if (isActive)
			*(float*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_ShiftSpeed[1]) = fSpeed; // 1.8f;
		else
			*(float*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_ShiftSpeed[1]) = 1.0f;
	}
}

void		ICPlayerClntBase::CrouchSpeed(bool isActive, float fSpeed)
{
	if (!this) return;

	if (this->IsGameModeIsOld())
	{
		if (isActive && Vars.Miscs.enabled)
			*(float*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_CrouchSpeed[0]) = fSpeed; // 1.75f;
		else
			*(float*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_CrouchSpeed[0]) = 1.0f;
	}
	else
	{
		if (isActive && Vars.Miscs.enabled)
			*(float*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_CrouchSpeed[1]) = fSpeed; // 1.75f;
		else
			*(float*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_CrouchSpeed[1]) = 1.0f;
	}
}

void		ICPlayerClntBase::WalkThroughWall()
{
	if (this->IsGameModeIsOld())
	{
		*(float*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_WalkThroughWall[0][0]) = -56.0f;
		//*(float*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_WalkThroughWall[0][1]) = 140.0f;
		*(float*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_WalkThroughWall[0][2]) = -56.0f;
	}
	else
	{
		*(float*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_WalkThroughWall[1][0]) = -56.0f;
		//*(float*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_WalkThroughWall[1][1]) = 140.0f;
		*(float*)((uintptr_t)this + NetVar::DT_CGamePlayer::m_WalkThroughWall[1][2]) = -56.0f;
	}
}

bool		ICPlayerClntBase::IsGun()
{
	if (this->WeaponSlot() == eCurrentWeaponSlot::CWS_PRIMARY ||
		this->WeaponSlot() == eCurrentWeaponSlot::CWS_SECONDARY)
		return true;
	return false;
}

bool		ICPlayerClntBase::IsGameModeIsOld()
{
	return (this->GameType() != MapType::NEW);
}

bool		ICPlayerClntBase::HasBullet()
{
	return (this->Clip() > 0);
}

bool		ICPlayerClntBase::IsReloading()
{
	return ((this->WeaponState() == eWeaponState::WS_RELOADING) ||
		(this->WeaponState() == eWeaponState::WS_RELOADING_SG) ||
		(this->WeaponState() == eWeaponState::WS_SLUG_RIGHTCLICK) ||
		(this->WeaponState() == eWeaponState::WS_SUBWEAPON_FPJ_FASTSHOOT));
}

bool		ICPlayerClntBase::IsSwitching()
{
	return (this->WeaponState() == eWeaponState::WS_SWITCHING);
}

bool		ICPlayerClntBase::IsFiring()
{
	return ((this->WeaponState() == eWeaponState::WS_FIRING) ||
		(this->WeaponState() == eWeaponState::WS_AFTERFIRING));
}

bool		ICPlayerClntBase::IsMoving()
{
	if (!this) return false;
	return this->PlayerState() == Movement::PS_MOVING;
}

bool		ICPlayerClntBase::IsJumping()
{
	if (!this) return false;
	return this->PlayerState() == Movement::PS_JUMP;
}

__int32		ICPlayerClntBase::GetPlayerState()
{
	return this->PlayerState();
}

bool		ICPlayerClntBase::IsMountedWeapon()
{
	__int32 MounteWeapons[] =
	{
		WN_GATLING_GUN,
		WN_FAL_CAMO_MOUNT,
		WN_MORTAR,
		WN_MOUNTED_WEAPON,
		WN_MOUNTED_WEAPON_MG_MODE_1,
		WN_MOUNTED_WEAPON_MG_MODE_2,
		WN_MOUNTED_WEAPON_MG_MODE_3
	};

	if (!Vars.Miscs.enabled) return false;
	if (!this) return false;
	if (!this->GetPlayerViewManager()) return false;

	__int32 WeaponID = this->GetPlayerViewManager()->GetWeaponID();

	if (WeaponID >= 0 && WeaponID < NetVar::DT_Weapon::m_MaxWeaponCount)
	{
		for (int i = 0; i < IM_ARRAYSIZE(MounteWeapons); i++)
			if (WeaponID == MounteWeapons[i])
				return true;
	}

	return false;
}

bool		ICPlayerClntBase::IsAIWeapon()
{
	if (!Vars.Miscs.enabled) return false;
	if (!this) return false;
	if (!this->GetPlayerViewManager()) return false;

	__int32 WeaponID = this->GetPlayerViewManager()->GetWeaponID();

	if (WeaponID >= 0 && WeaponID < NetVar::DT_Weapon::m_MaxWeaponCount)
	{
		ICWeaponMgr* Weapon = I::g_WeapInfo->GetWeaponById(WeaponID);
		if (Weapon != NULL && Weapon != nullptr)
		{
			if (Weapon->GetWeaponType() == WEAPONCLASS::WEPCLASS_AI3_WEAPON) 
				return true;
		}
	}

	return false;
}

class PlayerViewManager
{
public:
	void CreateAddressLog()
	{
		if (!this) return;
		U::CreateVMT(this, "AOE-PlayerViewManager-VT.log", false, 200);
	}

	ModelInstance* GetModelInstance() //access to weapon animation
	{
		if (!this) return NULL;
		return *(ModelInstance**)((uintptr_t)this + 0x0004);
	}

	PlayerViewModelManager* pPlayerViewModelManager()
	{
		if (!this) return NULL;
		return *(PlayerViewModelManager**)((uintptr_t)this + 0x003C);
	}

	ModelInstance* GetLocalPlayerObject()
	{
		if (!this) return NULL;
		//(*(int (__thiscall **)(int))(*(_DWORD *)CharacFX + 0x4C))(CharacFX);
		return *(ModelInstance**)((uintptr_t)this + NetVar::DT_PVM::m_LocalPlayerObject);
	}

	CObjectFX* GetCharacFX()
	{
		if (!this) return NULL;
		return *(CObjectFX**)((uintptr_t)this + NetVar::DT_PVM::m_CharacFX);
	}

	int _0x4C()
	{
		//*(char *)(CharacFX + 0xA8);
		return *(int*)((uintptr_t)this + 0x004C);
	}

	BYTE LocalPlayerIndex()
	{
		return *(BYTE*)((uintptr_t)this + NetVar::DT_PVM::m_LocalPlayerID);
	}

	int& CharacterID()
	{
		//(*(int (__thiscall **)(int))(*(_DWORD *)CharacFX + 0xB4))(CharacFX);
		return *(int*)((uintptr_t)this + NetVar::DT_PVM::m_CharacterTypeID);
	}

	int LocalTeamID()
	{
		//*(char *)(CharacFX + 0xEF39);
		return *(int*)((uintptr_t)this + 0x0054);
	}

	int GetWeaponID()
	{
		if (!this)
			return -1;
#ifdef USE_WEAPONID_VT
		typedef int(__thiscall* GetWeaponIDFn)(void*);
		return GetVTable<GetWeaponIDFn>(this, 29)(this);
#else
		//WeappnID = (*(int (__thiscall **)(int))(*(_DWORD *)CharacFX + 0xD4))(CharacFX);
		return *(int*)((uintptr_t)this + NetVar::DT_PVM::m_WeaponID);
#endif
	}

	bool IsCurrentWeaponSniper();

	//Zoom Status
	//50 54
	//50 0 1 2
	//54 2 0 1
	bool IsZoomed()
	{
		return this->WeaponZoomIndex() != 0;
	}

	int WeaponZoomIndex()
	{
		return *(int*)((uintptr_t)this + 0x0070);
	}

	int LastWeaponZoomIndex()
	{
		return *(int*)((uintptr_t)this + 0x0074);
	}

	//58 WeaponZoom default (1.571) 3 far 2 far 0.571 OK
	float& WeaponZoom()
	{
		return *(float*)((uintptr_t)this + 0x0078);
	}

	BYTE _0x88()
	{
		//*(_BYTE *)(CharacFX + 0x1247C);
		return *(BYTE*)((uintptr_t)this + 0x0088);
	}

	//eWeaponStateReload
	//8C
	//2 idle
	//1 switching
	//3 hold grenade
	//4 firing
	//7 after fire
	//5 reload
	//8 moving
	//12 combo 1
	//13 combo 2
	//16 knifebigshot
	int WeaponState()
	{
		return *(int*)((uintptr_t)this + 0x008C);
	}

	CBulletMgr* GetBulletMgr()
	{
		if (!this) return NULL;
		return *(CBulletMgr**)((uintptr_t)this + 0x009C);
	}

};

#include "../../SDK.h"

D3DXVECTOR3			ModelInstance::GetEyeLevel()
{
	D3DXVECTOR3 vPos, vDims;
	VEC_INIT(vPos);

	if (!this) return vPos;

	I::g_pPhysicsLT->GetObjectDims(this, &vDims);
	I::g_pLTClient->GetObjectPos(this, &vPos);

	vPos.y += vDims.y / 2.0f;
	//	vPos.y -= m_fEyeLevelOffset;
	vPos.y -= 1;

	return vPos;
}

bool				ModelInstance::IsVisible_CastRay()
{
	if (!this)
		return false;

	D3DXVECTOR3 vOurPos, vTheirPos;
	D3DXVECTOR3 vPos = E::Visuals->GetMyObject()->GetEyeLevel();

	// [ GET LOCAL WORLD POSITION ]
	I::g_pLTClient->GetObjectPos(E::Visuals->GetMyObject(), &vOurPos);
	// [ GET ENEMY WORLD POSITION ]
	I::g_pLTClient->GetObjectPos(this, &vTheirPos);

	D3DXVECTOR3 vDir;
	VEC_SUB(vDir, vTheirPos, vOurPos);

	IntersectQuery IQuery;
	IntersectInfo IInfo;

	memset(&IQuery, 0, sizeof(IQuery));
	memset(&IInfo, 0, sizeof(IInfo));

	//VEC_COPY(IQuery.m_From, vOurPos);
	VEC_COPY(IQuery.m_From, vPos);
	VEC_COPY(IQuery.m_Direction, vDir);

	IQuery.m_Flags = INTERSECT_OBJECTS;
	IQuery.m_FilterFn = NULL;

	if (I::g_pLTBase->CastRay(&IQuery, &IInfo))
	{
		// BUGBUG: If the object is partially occluded it might fail this test!
		if (IInfo.m_hObject == this)
		{
			return TRUE;
		}
	}

	return FALSE;
}

bool				ModelInstance::IsVisible()
{
	if (!this) 
		return false;

	D3DXVECTOR3 MyPos, EnemyPos;

	// [ GET LOCAL WORLD POSITION ]
	I::g_pLTClient->GetObjectPos(E::Visuals->GetMyObject(), &MyPos);
	// [ GET ENEMY WORLD POSITION ]
	I::g_pLTClient->GetObjectPos(this, &EnemyPos);

	IntersectQuery IQuery;
	IntersectInfo IInfo;

	memset(&IQuery, 0, sizeof(IQuery));
	memset(&IInfo, 0, sizeof(IInfo));

	VEC_COPY(IQuery.m_From, MyPos);
	VEC_COPY(IQuery.m_To, EnemyPos);

	//IQuery.m_Flags = INTERSECT_OBJECTS | IGNORE_NONSOLID;
	//IQuery.m_FilterFn = TransparentObjectFilterFn;

	bool bVisible = !((bool(__cdecl *)(IntersectQuery *, IntersectInfo *))
		NetVar::DT_CLTBase::DT_CLTBase_Address::m_IntersectSegment)(&IQuery, &IInfo);
	if ((!bVisible) &&
		(IInfo.m_hObject == this))
	{
		bVisible = true;
	}

	return bVisible;
}

LTRect				ModelInstance::GetBox()
{
	// https://www.*************.me/forum/counterstrike-global-offensive/124388-bounding-esp-boxes.html

	LTRect rect;
	rect.x = 0;
	rect.y = 0;
	rect.w = 0;
	rect.h = 0;

	// Get bounding box
	//D3DXVECTOR3 min = this->GetcObject()->GetOrigin();
	//D3DXVECTOR3 max = this->GetcObject()->GetBoxMax();

	//D3DXVECTOR3 min = this->GetCharacFX()->Object()->GetOrigin();
	//D3DXVECTOR3 max = this->GetCharacFX()->Object()->GetBoxMax();

	D3DXVECTOR3 min = D3DXVECTOR3(0, 0, 0);
	D3DXVECTOR3 max = D3DXVECTOR3(0, 0, 0);

	if (!this) return rect;

	if (I::g_pLTClient->GetObjectBoxMin(this, &min) != LT_OK)
		return rect;
	if (I::g_pLTClient->GetObjectBoxMax(this, &max) != LT_OK)
		return rect;

	// Points of a 3d bounding box
	D3DXVECTOR3 points[] =
	{
		D3DXVECTOR3(min.x, min.y, min.z),
		D3DXVECTOR3(min.x, max.y, min.z),
		D3DXVECTOR3(max.x, max.y, min.z),
		D3DXVECTOR3(max.x, min.y, min.z),
		D3DXVECTOR3(max.x, max.y, max.z),
		D3DXVECTOR3(min.x, max.y, max.z),
		D3DXVECTOR3(min.x, min.y, max.z),
		D3DXVECTOR3(max.x, min.y, max.z)
	};

	/*
	.6-------5					        blb = 0
	.' |       .' |					        brb = 1
	7---+--4'   |			0 = min			frb = 2
	|   |    |    |			4 = max			flb = 3
	y |  ,0---+---1					        frt = 4
	|.'       | .'  z					    brt = 5
	3------2						        blt = 6
	x						                flt = 7

	blt------brt		blt = back-left-top
	.' |        .'|			brt = back-right-top
	flt---+--frt  |			brb = back-right-bottom
	|   |     |   |			blb = back-left-bottom
	y |  blb---+--brb		flt = front-left-top
	|.'        | .'  z		frt = front-right-top
	flb------frb			frb = front-right-bottom
	x						flb = front-left-bottom
	*/

	// Variables
	D3DXVECTOR3 flb, brt, blb, frt, frb, brb, blt, flt;

	// Get screen positions
	if (D::WTS(points[3], &flb) &&
		D::WTS(points[5], &brt) &&
		D::WTS(points[0], &blb) &&
		D::WTS(points[4], &frt) &&
		D::WTS(points[2], &frb) &&
		D::WTS(points[1], &brb) &&
		D::WTS(points[6], &blt) &&
		D::WTS(points[7], &flt))
	{
		// Put them in an array (maybe start them off in one later for speed?)
		D3DXVECTOR3 arr[] = { flb, brt, blb, frt, frb, brb, blt, flt };

		// Init this shit
		float left = flb.x;
		float top = flb.y;
		float right = flb.x;
		float bottom = flb.y;

		// Find the bounding corners for our box
		for (int i = 1; i < 8; i++)
		{
			if (left > arr[i].x)
				left = arr[i].x;
			if (bottom < arr[i].y)
				bottom = arr[i].y;
			if (right < arr[i].x)
				right = arr[i].x;
			if (top > arr[i].y)
				top = arr[i].y;
		}

		// Width / height
		rect.x = left;
		rect.y = top;
		rect.w = right - left;
		rect.h = bottom - top;

		rect.centerX = rect.x + (rect.w / 2);
		rect.centerY = rect.y + (rect.h / 2);

		return rect;
	}

	return rect;
}

unsigned int		ModelInstance::UnknownFn()
{
	unsigned int result; // eax
	unsigned int BoneID; // [esp+Ch] [ebp-8h]
	unsigned int TotalBones; // [esp+10h] [ebp-4h]

	CModel* Model = (CModel*)this->GetModel();
	if (!Model) return result;

	TotalBones = Model->GetModelNodeCount();

	CBones_20A4* CBones = (CBones_20A4*)this->GetBones_20A4();
	if (!CBones) return result;

	for (BoneID = 0; ; ++BoneID)
	{
		result = BoneID;
		if (BoneID >= TotalBones)
			break;

		//*(BYTE *)(*(DWORD *)(CBones->GetBaseAddress() + 3 * BoneID + 1)) = 0;
		//*(BYTE *)(*(DWORD *)(CBones->GetBaseAddress() + 3 * BoneID + 2)) = 0;

		//*(BYTE *)(*(DWORD *)this->GetBones_20A4()->GetBaseAddress() + 3 * BoneID + 1) = 0;
		//*(BYTE *)(*(DWORD *)this->GetBones_20A4()->GetBaseAddress() + 3 * BoneID + 2) = 0;
	}
	return result;
}

void				ModelInstance::SetCurrAnim(unsigned __int8 TrackerID, unsigned int AnimID)
{
	if (!this) return;

	CAnimation* Animation = (CAnimation*)this->GetAnimation();
	if (!Animation) return;

	CModelAnimation* ModelAnimation = (CModelAnimation*)Animation->GetModelAnimation(TrackerID);
	if (!ModelAnimation) return;

	if (ModelAnimation->SetCurrAnimFn(AnimID, 1))
	{
		//this->UnknownFn();
		//ModelAnimation->off_0070() = 1;
	}
}

void				ModelInstance::SetAnimRate(unsigned __int8 TrackerID, float fRate)
{
	if (!this) return;

	CAnimation* Animation = (CAnimation*)this->GetAnimation();
	if (!Animation) return;

	CModelAnimation* ModelAnimation = (CModelAnimation*)Animation->GetModelAnimation(TrackerID);
	if (!ModelAnimation) return;

	ModelAnimation->SetAnimRateFn(fRate);
	ModelAnimation->off_0070() = 1;
}

float				ModelInstance::GetAnimRate(unsigned __int8 TrackerID)
{
	if (!this) return 0.0f;

	CAnimation* Animation = (CAnimation*)this->GetAnimation();
	if (!Animation) return 0.0f;

	CModelAnimation* ModelAnimation = (CModelAnimation*)Animation->GetModelAnimation(TrackerID);
	if (!ModelAnimation) return 0.0f;

	return ModelAnimation->GetAnimRateFn();
}

void				ModelInstance::SetPosition(D3DXVECTOR3 NewPosition)
{
	if (!this) return;

	//if (this->CheckForTeleport())
	{
		typedef float*(__thiscall* SetPositionFn)(float *, float *);
		reinterpret_cast<SetPositionFn>(NetVar::DT_Misc_Virtual::m_SetPositionFn)((float*)this, NewPosition);
		//this->CheckForTeleport() = 0;
	}
}

__int32				ModelInstance::GetNumNodes()
{
	unsigned int numnodes = 0;

	if (!this) return numnodes;

	I::g_pModelLT->GetNumNodes(this, numnodes);
	return numnodes;
}

void				ModelInstance::SetObjectFlags(const ObjFlagType flagType, uint32 dwFlags, uint32 dwMask)
{
	if (!this) return;

	I::Engine->GetICLTCommonClient()->GetLTCommon()->SetObjectFlags(this, flagType, dwFlags, dwMask);
}

void				ModelInstance::SetRespawnInvulnerability()
{
	if (!this) return;
}

void				ModelInstance::SetObjectEnableRefraction(char a2)
{
	if (!this) return;
	I::g_pCommonLT->SetObjectEnableRefraction(this, a2);
}
some reference [CFPH]
Code:
class ICPlayerClntBase : public CPlayerCInt
{
public:
	//V[45]: cshell.dll + 1098C430 LowerAnimRate WeaponMgr
	//V[55]: cshell.dll + 985FE0 FastKnife
	//V[555]: cshell.dll + 99EC60 STW
	//V[160]: cshell.dll + 9915B0 CameraYaw
	//V[67]: cshell.dll + 99AA00 CameraYaw
	//V[54]: cshell.dll + 9AC3C0 Fire ANim Multiplier
	//V[622]: cshell.dll + 98F690 RangeDamage
	//V[761]: cshell.dll + 4C9000 void __thiscall sub_104C9000(char *this, __int16 a2, int a3)
	//V[20]: cshell.dll + 980EF0 subweaponindex  return weaponmgrbase int __thiscall sub_10980EF0(int *this)
	//V[20]: cshell.dll + 980EF0 (linkweaponindex 0x1128) called by smoke  return weaponmgrbase int __thiscall sub_10980EF0(int *this)
	//V[838]: cshell.dll + 4E2360 Grenade Bound
	//V[826]: cshell.dll + 4E5AC0 Freeze Smoke and Flash     void __thiscall sub_104E5AC0(_BYTE *PlayerClient, float a2)
	//V[128]: cshell.dll + 55F4F0 check if rifle and subtype == 5 and 13
	//V[49]: cshell.dll + 970260 LeverAction WeaponMgr
	//V[459]: cshell.dll + 9B9620 GAMEPROTO_CS_PICKUPWEAPONREQ
	//V[457]: cshell.dll + 9B8B30 Return WeaponBaseMgr  void __thiscall sub_109B8B30(void *this)
	//V[453]: cshell.dll + 9B7F70 GAMEPROTO_CS_REQ_LINKWEAPON
	//V[698]: cshell.dll + 985880 JumpGravity
	//V[53]: cshell.dll + 988820 FastFireAnimRatio
	//V[469]: cshell.dll + 9735F0 ChangeModeAnimRatio
	//V[85]: cshell.dll + 971160 bag trigger
	//V[560]: cshell.dll + 9937A0 Knockback
	//V[685]: cshell.dll + 9857B0 Call SetKnockBack
	//V[600]: cshell.dll + 976620 MoveSpeedPenalty
	//V[695] : cshell.dll + 974060 ReloadAnimRatio
	//V[696] : cshell.dll + 974080 ChangeWeaponAnimRatio
	//V[110]: cshell.dll + 10884980 SetViewAngle
	//V[112] : cshell.dll + 878FD0 SetViewAngle
	//V[329]: cshell.dll + 96F920 AMMO PER MAGAZINE
	//V[396]: cshell.dll + 991C00 Crosshair
	//V[638]: cshell.dll + 97F3C0 WTW
	//V[546]: cshell.dll + 98A7D0 ThrowVelAngleGravityAirResTime
	//V[654]: cshell.dll + 970520 Weapon_Attributes Function
	//V[641]: cshell.dll + 96F7A0   738 CurrentAnim strcopy
	//V[642]: cshell.dll + 975AE0  ShotGun Reload0-1-2
	//V[643]: cshell.dll + 975850  Reload%s
	//V[644]: cshell.dll + 975CD0  GViewAnimNameSD
	//V[681]: cshell.dll + 979280 GAMEPROTO_CS_SET_RANDOM_KNIFE
};
Credits: Vaisefud, hkchen, geopulse
When did you log the VTable?
Quote Originally Posted by Ryuzaki2 View Post
When did you log the VTable?
i can't msg you back because its say your msg is full i think you need to delete some msg's to reply you
Quote Originally Posted by MemoryThePast View Post
i can't msg you back because its say your msg is full i think you need to delete some msg's to reply you
Cleared
if you are talking about in no recoil i use 4 memcpy to do it you can find it through offs of them
Posts 1–9 of 9 · Page 1 of 1
This thread is closed for replies.

Similar Threads

Tags for this Thread

None

Talk with us