Code:
UGameEngine* Eng = NULL;
#define CONST_DegToUnrRot 182.0444
#define CONST_RadToUnrRot 10430.3783504704527
#define CONST_UnrRotToRad 0.00009587379924285
#define CONST_DegToRad 0.017453292519943296
FColor MakeColor(int R, int G, int B, int A)
{
FColor ReturnedColor;
ReturnedColor.R = R;
ReturnedColor.G = G;
ReturnedColor.B = B;
ReturnedColor.A = A;
return ReturnedColor;
}
FColor Green = MakeColor(0,255,0,255);
FColor Yellow = MakeColor(255,255,0,255);
FColor Red = MakeColor(255,0,0,255);
FColor Blue = MakeColor(0,0,255,255);
FColor LightGreen = MakeColor(100,255,150,120);
FColor DarkGreen = MakeColor(100,190,60,120);
FColor White = MakeColor(255,255,255,255);
FColor MenuWhite = MakeColor(255,255,255,20);
FColor Black = MakeColor(0,0,0,170);
FColor Pink = MakeColor(200,0,200,255);
FColor MenuBlack = MakeColor(0,0,0,120);
FColor MenuBlue = MakeColor(59,209,237,150);
FColor Orange = MakeColor(255,128,0,255);
void DrawString( UCanvas* pCanvas, float X, float Y, FString String, FColor DesiredColor )
{
float OldCurX = pCanvas->CurX;
float OldCurY = pCanvas->CurY;
FColor OldColor = pCanvas->DrawColor;
pCanvas->CurX = X;
pCanvas->CurY = Y;
pCanvas->DrawColor = DesiredColor;
pCanvas->DrawTextA( String, false );
pCanvas->CurX = OldCurX;
pCanvas->CurY = OldCurY;
pCanvas->DrawColor = OldColor;
}
UObject* GetInstanceOf ( UClass* Class )//uNrEaL
{
static UObject* ObjectInstance;
ObjectInstance = NULL;
for ( int i = 0; i < UObject::GObjObjects()->Count; ++i )
{
UObject* CheckObject = ( *UObject::GObjObjects() )( i );
if ( CheckObject && CheckObject->IsA( Class ) )
{
if ( !strstr( CheckObject->GetFullName(), "Default" ) )
ObjectInstance = CheckObject;
}
}
return ObjectInstance;
};
void PostRender ( UCanvas* pCanvas )
{
if(pCanvas)
{
if( !Eng->GamePlayers.Data[0]->Actor )
return;
pPC = Eng->GamePlayers.Data[0]->Actor;
DrawCossHair(pCanvas);
DrawString(pCanvas, 250, 250, L"IF YOU SEE ME THEN OMG YOU GOT IT WORKING", Red );
if( pPC != NULL )
{
if(pPC->IsA(AavaPlayerController::StaticClass()))
{
if(GetAsyncKeyState(VK_HOME) &0x8000)
{
((AavaPlayerController*)pPC)->TestServerEndRound();
}
}
}
}
}
void __declspec(naked) hkProcessEvent ()
{
__asm mov pCallObject, ecx;
__asm
{
push eax
mov eax, dword ptr [esp + 0x8]
mov pUFunc, eax
mov eax, dword ptr [esp + 0xC]
mov pParms, eax
mov eax, dword ptr [esp + 0x10]
mov pResult, eax
pop eax
}
_asm pushad
if ( pUFunc )
{
if(!strcmp(pUFunc->GetFullName(), "Function avaGame.avaGameViewportClient.PostRender"))
{
UavaGameViewportClient_eventPostRender_Parms* parameters = (UavaGameViewportClient_eventPostRender_Parms*)pParms; //get the parameters
if(parameters)
{
PostRender(parameters->Canvas);
}
}
}
__asm popad
__asm
{
push pResult
push pParms
push pUFunc
call pProcessEvent
retn 0xC
}
}
void hookUObject(UObject* obj)
{
toolkit::VMTHook* hook = new toolkit::VMTHook(obj);
pProcessEvent = hook->GetMethod<tProcessEvent>(59);
hook->HookMethod(&hkProcessEvent,59);
}
void WINAPI OnAttach (HMODULE hModule)
{
while(1)
if( GetAsyncKeyState( VK_INSERT ) &0x8000 )break;
{
if( Eng == NULL )
{
Eng = (UGameEngine*)GetInstanceOf(UGameEngine::StaticClass());
}
if( Eng->GameViewport != NULL )
{
hookUObject(Eng->GameViewport);
}
}
}
BOOL WINAPI DllMain ( HMODULE hModule, DWORD dwReason, LPVOID lpReserved )
{
if ( dwReason == DLL_PROCESS_ATTACH )
{
CreateThread ( NULL, 0, ( LPTHREAD_START_ROUTINE ) OnAttach, hModule, 0, NULL );
}
return TRUE;
}
Here is the way of hacking that ccman uses .. at least I made another way of hooking than the way ccman uses as I know.