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]