Results 1 to 9 of 9
  1. #1
    peshkayt's Avatar
    Join Date
    Aug 2016
    Gender
    male
    Posts
    11
    Reputation
    10
    Thanks
    10

    ********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
    Last edited by peshkayt; 08-22-2019 at 10:29 AM.

  2. #2
    CaET's Avatar
    Join Date
    Sep 2013
    Gender
    male
    Posts
    71
    Reputation
    10
    Thanks
    697
    Try to restore their default values if not in game

  3. #3
    peshkayt's Avatar
    Join Date
    Aug 2016
    Gender
    male
    Posts
    11
    Reputation
    10
    Thanks
    10

    That's what I'm currently doing. It gives me the same result. Game gui is breaking.
    enable = Settings.bNoRecoil && IsInGame

  4. #4
    jayjay153's Avatar
    Join Date
    Jan 2018
    Gender
    female
    Posts
    294
    Reputation
    10
    Thanks
    113
    .. 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
    Last edited by jayjay153; 08-23-2019 at 10:21 AM.

  5. #5
    MemoryThePast's Avatar
    Join Date
    Sep 2018
    Gender
    male
    Posts
    148
    Reputation
    10
    Thanks
    35
    My Mood
    Stressed
    if you are talking about in no recoil i use 4 memcpy to do it you can find it through offs of them

  6. #6
    IrineuMito's Avatar
    Join Date
    Sep 2017
    Gender
    male
    Posts
    68
    Reputation
    10
    Thanks
    9
    My Mood
    Doh
    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....

  7. #7
    Ryuzaki™'s Avatar
    Join Date
    Apr 2011
    Gender
    male
    Location
    At my headquarter, catching KIRA
    Posts
    1,671
    Reputation
    41
    Thanks
    6,252
    My Mood
    Lurking
    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?



  8. #8
    MemoryThePast's Avatar
    Join Date
    Sep 2018
    Gender
    male
    Posts
    148
    Reputation
    10
    Thanks
    35
    My Mood
    Stressed
    Quote Originally Posted by Ryuzaki™ 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

  9. #9
    Ryuzaki™'s Avatar
    Join Date
    Apr 2011
    Gender
    male
    Location
    At my headquarter, catching KIRA
    Posts
    1,671
    Reputation
    41
    Thanks
    6,252
    My Mood
    Lurking
    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



Similar Threads

  1. Burger king kicks Mcdonalds ass
    By AN1MAL in forum General
    Replies: 13
    Last Post: 12-30-2006, 08:35 AM
  2. The Real Drift King
    By arunforce in forum General
    Replies: 2
    Last Post: 11-22-2006, 10:49 AM
  3. Best Pic ever! KING ZIZOU!
    By gunot in forum General
    Replies: 7
    Last Post: 07-11-2006, 06:03 AM