I been working on color charms for Gellin`s base I almost got them to work but they crashes ca after 1 minute. here the DIP source I been working on.

Code:
IDirect3DVertexBuffer9  * pStreamData;
int StreamNumber= 0;
int Stride = 0;
int OffsetInBytes = 0;

typedef HRESULT(WINAPI* tSetStreamSource)(LPDIRECT3DDEVICE9 pDevice, UINT StreamNumber, IDirect3DVertexBuffer9 * pStreamData, UINT OffsetInBytes, UINT Stride);
tSetStreamSource oSetStreamSource;
HRESULT WINAPI nSetStreamSource(LPDIRECT3DDEVICE9 pDevice, UINT StreamNumber,  IDirect3DVertexBuffer9  * pStreamData, UINT OffsetInBytes, UINT Stride)
{
	HRESULT hRet = oSetStreamSource(pDevice, StreamNumber, pStreamData, OffsetInBytes, Stride);
	return hRet;
}
	typedef HRESULT (WINAPI* oDIP)(LPDIRECT3DDEVICE9 pDevice,D3DPRIMITIVETYPE,int,UINT,UINT,UINT,UINT); 
	oDIP pDIP;
HRESULT __stdcall DIP(LPDIRECT3DDEVICE9 pDevice,D3DPRIMITIVETYPE Type,int BaseVertexIndex,UINT MinIndex,UINT NumVertices,UINT StartIndex,UINT PrimCount)
{
	if(pDevice->SetStreamSource(StreamNumber, pStreamData, OffsetInBytes, Stride) == D3D_OK)

	if(Stride == 20 || Stride == 32 ||Stride == 36 || Stride == 44 || (Stride == 40 && NumVertices == 436))
	{
		pDevice->SetRenderState(D3DRS_ZENABLE,false);
		switch( Menu.mOpt[1].nopt )
		{
		case 1:
			//Ghost Chams
			pDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,true);////
			pDevice->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVDESTCOLOR);////
			pDevice->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_INVSRCCOLOR);////
			pDevice->SetRenderState(D3DRS_ZENABLE,false);
		
			pDIP;

			pDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,true);////
			pDevice->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVDESTCOLOR);////
			pDevice->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_INVSRCCOLOR);////
			pDevice->SetRenderState(D3DRS_ZENABLE,true);
		case 2:
			//Phantom Chams
			pDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,true);
			pDevice->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVDESTCOLOR);
			pDevice->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_INVSRCALPHA);
			pDevice->SetRenderState(D3DRS_ZENABLE,false);

			pDIP;

			pDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,true);
			pDevice->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVDESTCOLOR);
			pDevice->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_INVSRCALPHA);
			pDevice->SetRenderState(D3DRS_ZENABLE,true);
		case 3:
			//Wallhack
		    pDevice->SetRenderState(D3DRS_AMBIENT, D3DCOLOR_ARGB(255,0,255,0));
	        pDevice->SetRenderState(D3DRS_ZENABLE,false);
	        pDevice->SetRenderState(D3DRS_AMBIENT, D3DCOLOR_ARGB(255,0,0,255));
	        pDevice->SetRenderState(D3DRS_LIGHTING, true);

            pDIP;

            pDevice->SetRenderState(D3DRS_AMBIENT, D3DCOLOR_ARGB(255,0,255,0));
	        pDevice->SetRenderState(D3DRS_ZENABLE,false);
	        pDevice->SetRenderState(D3DRS_AMBIENT, D3DCOLOR_ARGB(255,0,0,255));
  	        pDevice->SetRenderState(D3DRS_LIGHTING, true);
		case 4:
			pDevice->SetRenderState(D3DRS_ZENABLE,false);
		case 5:
            pDevice->SetRenderState(D3DRS_AMBIENT, D3DCOLOR_ARGB(0,0,0,0));
		}
		Sleep(iRenderSpeed);
	}
			
	return pDIP(pDevice, Type, BaseVertexIndex, MinIndex, NumVertices, StartIndex, PrimCount);
}
and what is this I find this in Gellin`s base that I search on google:

Code:
void UnlinkModule(HINSTANCE hModule)
{
	DWORD dwPEB_LDR_DATA = 0;
	_asm
	{
		pushad;
		pushfd;
		mov eax, fs:[30h]                   // PEB
		mov eax, [eax+0Ch]               // PEB->ProcessModuleInfo
		mov dwPEB_LDR_DATA, eax	 // Save ProcessModuleInfo

InLoadOrderModuleList:
		mov esi, [eax+0Ch]	       // ProcessModuleInfo->InLoadOrderModuleList[FORWARD]
		mov edx, [eax+10h]	      //  ProcessModuleInfo->InLoadOrderModuleList[BACKWARD]

		LoopInLoadOrderModuleList: 
		    lodsd		             //  Load First Module
			mov esi, eax	    //  ESI points to Next Module
			mov ecx, [eax+18h]  //  LDR_MODULE->BaseAddress
			cmp ecx, hModule	   //  Is it Our Module ?
			jne SkipA		   //  If Not, Next Please (@f jumps to nearest Unamed Lable @@:)
		    	mov ebx, [eax]	  //  [FORWARD] Module 
		    	mov ecx, [eax+4]   //  [BACKWARD] Module
		    	mov [ecx], ebx     //  Previous Module's [FORWARD] Notation, Points to us, Replace it with, Module++
		    	mov [ebx+4], ecx	  //  Next Modules, [BACKWARD] Notation, Points to us, Replace it with, Module--
			jmp InMemoryOrderModuleList  //  Hidden, so Move onto Next Set
		SkipA:
			cmp edx, esi       //  Reached End of Modules ?
			jne LoopInLoadOrderModuleList  //  If Not, Re Loop

InMemoryOrderModuleList:
		mov eax, dwPEB_LDR_DATA	//  PEB->ProcessModuleInfo
		mov esi, [eax+14h]   // ProcessModuleInfo->InMemoryOrderModuleList[START]
		mov edx, [eax+18h]  //  ProcessModuleInfo->InMemoryOrderModuleList[FINISH]

		LoopInMemoryOrderModuleList: 
			lodsd
			mov esi, eax
			mov ecx, [eax+10h]
			cmp ecx, hModule
			jne SkipB
				mov ebx, [eax] 
				mov ecx, [eax+4]
				mov [ecx], ebx
				mov [ebx+4], ecx
				jmp InInitializationOrderModuleList
		SkipB:
			cmp edx, esi
			jne LoopInMemoryOrderModuleList

InInitializationOrderModuleList:
		mov eax, dwPEB_LDR_DATA  
		mov esi, [eax+1Ch]	      
		mov edx, [eax+20h]	    

		LoopInInitializationOrderModuleList: 
			lodsd
			mov esi, eax		
			mov ecx, [eax+08h]
			cmp ecx, hModule		
			jne SkipC
				mov ebx, [eax] 
				mov ecx, [eax+4]
				mov [ecx], ebx
				mov [ebx+4], ecx
				jmp Finished
		SkipC:
			cmp edx, esi
			jne LoopInInitializationOrderModuleList

		Finished:
			popfd;
			popad;
	}
}