I am more familiar with Robotics formatting in windows consoles and am new to game hacking.

I have tried to make a template to use for a simple ESP in Warface.

Does this look right? Can any of you experts or golden balls programmers see if this is correct please?

Code:
template <class T>
T virtualindex(PVOID pVoid, __int64 i64Index) { return (*(T**)pVoid)[i64Index / 8]; }
 
class SSystemGlobalEnvironment {
public:
	IGame* GetGame() {
		return *(IGame**)((__int64)this + 200);
	}
 
	IEntitySystem* GetIEntitySystem() {
		return *(IEntitySystem**)((__int64)this + 216);
	}
 
	static SSystemGlobalEnvironment* Singleton() {
		return *(SSystemGlobalEnvironment**)0x141D142C0;
	} //0x141D132C0 - EU; 0x141D142C0 - RU
};
 
class IGame {
public:
	IGameFramework* GetGameFramework() {
		return virtualindex <IGameFramework*(__thiscall*)(PVOID)>(this, 112)(this);
	}
};
 
class IGameFramework {
public:
	IActorSystem* GetIActorSystem() {
		return virtualindex <IActorSystem*(__thiscall*)(PVOID)>(this, 200)(this);
	}
 
	bool GetClientActor(IActor** bValue) {
		return virtualindex <bool(__thiscall*)(PVOID, IActor**)>(this, 1136)(this, bValue);
	}
};
 
class IActorSystem {
public:
	IActor* GetActor(int iValue) {
		return  virtualindex <IActor*(__thiscall*)(PVOID, int)>(this, 120)(this, iValue);
	}
};
 
class IActor {
public:
	int GetTeamId() {
		return *(int*)((__int64)this + 992);
	}
};
 
class IEntitySystem {
public:
	IEntityIterator* GetEntityIterator() {
		return virtualindex <IEntityIterator*(__thiscall*)(PVOID)>(this, 168)(this);
	}
};
 
class IEntityIterator {
public:
	IEntity* GetNext() {
		return virtualindex <IEntity*(__thiscall*)(PVOID)>(this, 48)(this);
	}
};
 
class IEntity {
public:
	__int64 GetID() {
		return virtualindex <__int64(__thiscall*)(PVOID)>(this, 8)(this);
	}
	//or
	//__int64 GetEntityId() {
		//return *(__int64*)((__int64)this + 24);
	//}
 
	IEntityProxy* GetProxy(EEntityProxyFlags epParam) {
		return virtualindex <IEntityProxy*(__thiscall*)(PVOID, EEntityProxyFlags)>
			(this, 472)(this, epParam);
	}
};
 
class IEntityProxy {
public:
	IRenderNode* GetRenderNode() {
		return virtualindex <IRenderNode*(__thiscall*)(PVOID)>(this, 160)(this);
	}
 
	void SetHUDSilhouettesParams(float fAlpha, float fRed, float fGreen, float fBlue) {
		return virtualindex <void(__thiscall*)(PVOID, float, float, float, float)>
			(this, 352)(this, fAlpha, fRed, fGreen, fBlue);
	}
};
 
class IRenderNode {
public:
	void SetRndFlags(__int64 iValue) {
		*(__int64*)((__int64)this + 28) = iValue;
	}
};
 
enum EEntityProxyFlags : __int64 {
	ENTITY_PROXY_RENDER = 0,
	ENTITY_PROXY_PHYSICS = 1,
	ENTITY_PROXY_SCRIPT = 2,
	ENTITY_PROXY_SOUND = 3,
	ENTITY_PROXY_AI = 4,
	ENTITY_PROXY_AREA = 5,
	ENTITY_PROXY_BOIDS = 6,
	ENTITY_PROXY_BOID_OBJECT = 7,
	ENTITY_PROXY_CAMERA = 8,
	ENTITY_PROXY_FLOW_GRAPH = 9,
	ENTITY_PROXY_SUBSTITUTION = 10,
	ENTITY_PROXY_TRIGGER = 11,
	ENTITY_PROXY_ROPE = 12,
	ENTITY_PROXY_ENTITY_NODE = 13,
	ENTITY_PROXY_USER = 14,
	ENTITY_PROXY_LAST = 15,
};
 
enum EHUDRenderFlags : __int64 {
	eAllMap = 16,
	eLimitDistance = 4294967279,
};
I am not sure on: }; void SetRndFlags(__int64 iValue) {
*(__int64*)((__int64)this + 28) = iValue;

I'm learning how to use CheatEngine so are there any good tutorials i can use?

Thanks if you are looking and can help !