[Source-Code] Chams

07/11/2011 21:25 Wolfhelper#1
Das ist doch ein möglicher Source code Für einen Chams Hack oder ?
Also ich frage das jetzt nur weil ich wissen möchte wie ein Chams Hack funktioniert
PHP Code:
#include "IVModelRender.h"

IMaterial* g_pTextureRed;
IMaterial* g_pTextureYellow; 
IMaterial* g_pTextureBlue;
IMaterial* g_pTextureGreen;
IMaterial* g_pTextureWhite;
IMaterial* g_pTextureWhite2;

CVMTHook gDrawModelExHook;
int    __stdcall new_DrawModelEx( ModelRenderInfo_t &pInfo )
{
    if(
g_pTextureRed == NULL)
        
g_pTextureRed = gCheat.m_pMaterialSystem->FindMaterial("models\\textures\\Red", TEXTURE_GROUP_MODEL);
    if(
g_pTextureYellow == NULL)
        
g_pTextureYellow = gCheat.m_pMaterialSystem->FindMaterial("models\\textures\\Yellow", TEXTURE_GROUP_MODEL);
    else
    {
        if(
g_pTextureYellow->GetMaterialVarFlag(MATERIAL_VAR_IGNOREZ) == FALSE)
            
g_pTextureYellow->SetMaterialVarFlag(MATERIAL_VAR_IGNOREZ, TRUE);
    }
    if(
g_pTextureBlue == NULL)
        
g_pTextureBlue = gCheat.m_pMaterialSystem->FindMaterial("models\\textures\\Blue", TEXTURE_GROUP_MODEL);
    if(
g_pTextureGreen == NULL)
        
g_pTextureGreen = gCheat.m_pMaterialSystem->FindMaterial("models\\textures\\Green", TEXTURE_GROUP_MODEL);
    else
    {
        if(
g_pTextureGreen->GetMaterialVarFlag(MATERIAL_VAR_IGNOREZ) == FALSE)
            
g_pTextureGreen->SetMaterialVarFlag(MATERIAL_VAR_IGNOREZ, TRUE);
    }
    if(
g_pTextureWhite == NULL)
        
g_pTextureWhite = gCheat.m_pMaterialSystem->FindMaterial("models\\textures\\White", TEXTURE_GROUP_MODEL);
    if(
g_pTextureWhite2 == NULL)
        
g_pTextureWhite2 = g_pTextureWhite;
    else
    {
        if(
g_pTextureWhite2->GetMaterialVarFlag(MATERIAL_VAR_IGNOREZ) == FALSE)
            
g_pTextureWhite2->SetMaterialVarFlag(MATERIAL_VAR_IGNOREZ, TRUE);
    }

    
gDrawModelExHook.UnHook();
    if( 
pInfo.pModel )
    {
        const 
char* pszModelName = gCheat.m_pModelinfo->GetModelName(pInfo.pModel);

        if(
strstr(pszModelName, "models/player"))
        {
            
IMaterial* pTexture = g_pTextureWhite;
            
IMaterial* pWallHackTexture = g_pTextureWhite2;

            
CBaseEntity* pModelEntity = (CBaseEntity*)gCheat.m_pEntList->GetClientEntity(pInfo.entity_index);
            if(
pModelEntity)
            {
                
player_info_t pinfo;
                
int iLifestate = *(int*)((DWORD)pModelEntity + 0x87);

                if( 
iLifestate == LIFE_ALIVE
                
&&  gCheat.m_pEngine->GetPlayerInfo(pInfo.entity_index, &pinfo))
                {
                    
int iTeam = *(int*)((DWORD)pModelEntity + 0x90);

                    if(
iTeam == 2)
                    {
                        
pTexture = g_pTextureRed;
                        
pWallHackTexture = g_pTextureYellow;
                    }
                    else if(
iTeam == 3)
                    {
                        
pTexture = g_pTextureBlue;
                        
pWallHackTexture = g_pTextureGreen;
                    }
                }
                else
                {
                    
pTexture = g_pTextureWhite;
                    
pWallHackTexture = g_pTextureWhite2;
                }
            }
            else
            {
                if(
strstr(pszModelName, "models/player/t_"))
                {
                    
pTexture = g_pTextureRed;
                    
pWallHackTexture = g_pTextureYellow;
                }
                if(
strstr(pszModelName, "models/player/ct_"))
                {
                    
pTexture = g_pTextureBlue;
                    
pWallHackTexture = g_pTextureGreen;
                }
            }
            
gCheat.m_pModelRender->ForcedMaterialOverride(pWallHackTexture);
            
gCheat.m_pModelRender->DrawModelEx(pInfo);
            
gCheat.m_pModelRender->ForcedMaterialOverride(pTexture);
        }
        else
        {
            
gCheat.m_pModelRender->ForcedMaterialOverride(NULL);
        }
    }
    
int iRet = gCheat.m_pModelRender->DrawModelEx(pInfo);
    
gCheat.m_pModelRender->ForcedMaterialOverride(NULL);
    
gDrawModelExHook.ReHook();

    return 
iRet; 
07/11/2011 21:28 yihaaa#2
Jetz stell dir mal vor es ist keiner...Keiner kann dir das sagen mit dem Ausschnitt. Google einfach mal nach D3D-Hook und du wirst was finden.

MfG

BTW: Lass den Hook scheiß wenn du noch nicht mal die Basics kannst.
07/12/2011 10:11 Bot_interesierter#3
Was du hier gepostet hast ist ein Fetzen eines EngineHook für die Source Engine und gehört wohl zu einem Wallhack das die Spieler je nach Team Rot bzw Blau einfärbt (es sind auch noch andere Texturfarben involviert).
Du kannst was du dort siehst nur auf Source Engine spiele übertragen, allerdings bezweifele ich dass Du das kannst.

Nun zu deiner Grundsätzlichen Frage, für einen Cham Cheat benötigt man eine Methode um für das jeweilige Spiel die Position (D3D/OpenGL Koordinaten) der Spieler und deren Team festzustellen sowie einen D3D Hook, bzw OpenGL Hook um dann die Chams zeichnen zu können. Mit der Position der Spieler werden dann die Koordinaten der Eckpunkte für die Chams berechnet, am besten werden diese an die jeweiligen Modells angepasst, mittels des D3D bzw OpenGL Hooks zeichnet man dann einfach die Linien für die Chams, in OpenGL erledigt man das meistens mit einer GL_LINE_LOOP, für Direct3D9 wird gerne die DrawIndexedPrimitive/DrawPrimitive Methode verwendet, oder man benützt einen EngineHook um seine Chams zu zeichnen, wie dass dann im einzelnen Funktioniert hängt vom Spiel ab.

Ohne rudimentäre Kenntnisse des jeweiligen Grafiksystems wirst du also nicht weit kommen, dazu benötigst du Reverseengineering Erfahrung und natürlich Programmierkenntnisse und Erfahrung mit Funktionsumleitungen(Hooks/Detours).
07/12/2011 20:44 Wolfhelper#4
Ja okay Danke das ihr mir geholfen habt ;)
...
Ich lerne und werde mir in den nächsten Jahren C++ und reverseengiering ind den Kopf Pressen ;)
ich benutze das Buch (C++ Von A bis Z)
und die LENA-Tut´s

ich glaube damit kommt man ganz gut weit ;)
07/13/2011 14:53 yihaaa#5
Dann wünsche ich dir noch viel Spaß! Oder weißte was c&p doch einfach, dass geht schneller und du brauchst nichts zu lernen, weil das in den Kopf pressen eh nichts wird.

MfG
07/13/2011 17:26 Wolfhelper#6
in den kopf pressen wird was ;) ich muss ja nur Französisch löschen
07/13/2011 17:37 yihaaa#7
Made my day!
07/13/2011 22:03 MrSm!th#8
Quote:
Originally Posted by Wolfhelper View Post
Ja okay Danke das ihr mir geholfen habt ;)
...
Ich lerne und werde mir in den nächsten Jahren C++ und reverseengiering ind den Kopf Pressen ;)
ich benutze das Buch (C++ Von A bis Z)
und die LENA-Tut´s

ich glaube damit kommt man ganz gut weit ;)
vergiss es gleich wieder.
07/14/2011 10:57 Wolfhelper#9
Quote:
Originally Posted by MrSm!th View Post
vergiss es gleich wieder.
Warum ? Ich möchte es ja lernen:)
07/15/2011 14:39 ~kau~#10
Naja ... Ein Buch :D (Das sagt schon fast alles)
@Topic wenn du schon Chams machen willst, solltest du dich mit D3D beschäftigen und kein c&p machen!!! Du must ja kein menu oder so etwas zaubern.. Nur probieren über DIP oder einer anderen art die Func zu hooken. Wenn du das geschaft hast, würde ich dir
M_Stride / SetTexture oder SetRenderState empfehlen udn nicht wie oben irgendwelche Moduels zu calln.
mfg Kau