[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"

IMaterialg_pTextureRed;
IMaterialg_pTextureYellow
IMaterialg_pTextureBlue;
IMaterialg_pTextureGreen;
IMaterialg_pTextureWhite;
IMaterialg_pTextureWhite2;

CVMTHook gDrawModelExHook;
int    __stdcall new_DrawModelExModelRenderInfo_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_IGNOREZTRUE);
    }
    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_IGNOREZTRUE);
    }
    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_IGNOREZTRUE);
    }

    
gDrawModelExHook.UnHook();
    if( 
pInfo.pModel )
    {
        const 
charpszModelName gCheat.m_pModelinfo->GetModelName(pInfo.pModel);

        if(
strstr(pszModelName"models/player"))
        {
            
IMaterialpTexture g_pTextureWhite;
            
IMaterialpWallHackTexture g_pTextureWhite2;

            
CBaseEntitypModelEntity = (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