⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 directxhook.pas

📁 冒险岛吸怪源码UCE的制作材料 用于冒险岛游戏的外挂
💻 PAS
📖 第 1 页 / 共 5 页
字号:
unit DirectxHook;

interface
//directx8 hook

uses controls,classes,windows,messages,forms,dialogs,sysutils,directxGraphics,math,graphics,keylistener,d3dx81mo;

type CEVertex=record
  position: TD3DVector;
  RHW: single;
//  color: Dword;
  tu,tv: single;
end;
const D3DFVF_CEVertex=(D3DFVF_XYZRHW or {D3DFVF_DIFFUSE or} D3DFVF_TEX1);

type TTextureInfo = record
  //creation parameters
  Width, Height, Levels : Cardinal;
  Usage : LongWord;
  Format : TD3DFormat;
  Pool : TD3DPool;

  locked: boolean;
//  checked: boolean;
  texturehandle: IDirect3DTexture8;
  xdelta,ydelta,zdelta: single;
end;

type PIDirect3D8=^IDirect3D8;
type TDirect3DCreate8=function(SDKVersion: DWORD): PIDirect3D8; stdcall;

type TIDirect3D_CreateDevice_Original=function(const self:IDirect3D8;const Adapter : Cardinal; const DeviceType : TD3DDevType; hFocusWindow : HWND; BehaviorFlags : LongWord; var pPresentationParameters : TD3DPresent_Parameters; out ppReturnedDeviceInterface : IDirect3DDevice8) : HResult; stdcall;


type TIDirect3DDevice8_Reset_Original=function(const self:IDirect3DDevice8; var pPresentationParameters : TD3DPresent_Parameters) : HResult; stdcall;
type TIDirect3DDevice8_CreateTexture_Original=function(const self:IDirect3DDevice8;const Width, Height, Levels : Cardinal; const Usage : LongWord; const Format : TD3DFormat; const Pool : TD3DPool; out ppTexture : IDirect3DTexture8) : HResult; stdcall;
type TIDirect3DDevice8_CreateVertexBuffer_Original=function(const self:IDirect3DDevice8;const Length : Cardinal; const Usage, FVF : LongWord; const Pool : TD3DPool; out ppVertexBuffer : IDirect3DVertexBuffer8) : HResult; stdcall;
type TIDirect3DDevice8_UpdateTexture_Original=function(const self: IDirect3DDevice8; const pSourceTexture, pDestinationTexture : IDirect3DBaseTexture8) : HResult; stdcall;
type TIDirect3DDevice8_BeginScene_Original=function(const self:IDirect3DDevice8): HResult; stdcall;
type TIDirect3DDevice8_EndScene_Original=function(const self:IDirect3DDevice8): HResult; stdcall;
type TIDirect3DDevice8_SetTransform_Original=function(const self: IDirect3DDevice8; const State : TD3DTransformStateType; const pMatrix : TD3DMatrix) : HResult; stdcall;
type TIDirect3DDevice8_GetTransform_Original=function(const self:IDirect3DDevice8;const State : TD3DTransformStateType; out pMatrix : TD3DMatrix) : HResult; stdcall;
type TIDirect3DDevice8_SetRenderState_Original=function(const self:IDirect3DDevice8;const State : TD3DRenderStateType; const Value : LongWord) : HResult; stdcall;
type TIDirect3DDevice8_SetTexture_Original=function(const self:IDirect3DDevice8;const Stage : LongWord; const pTexture : IDirect3DBaseTexture8) : HResult; stdcall;
type TIDirect3DDevice8_DrawPrimitive_Original=function(const self:IDirect3DDevice8;const PrimitiveType : TD3DPrimitiveType; const StartVertex, PrimitiveCount : Cardinal) : HResult; stdcall;
type TIDirect3DDevice8_DrawIndexedPrimitive_Original=function(const self: IDirect3DDevice8;const _Type : TD3DPrimitiveType; const minIndex, NumVertices, startIndex, primCount : Cardinal) : HResult; stdcall;
type TIDirect3DDevice8_DrawPrimitiveUP_Original=function(const self:IDirect3DDevice8;const PrimitiveType : TD3DPrimitiveType; const PrimitiveCount : Cardinal; pVertexStreamZeroData : Pointer; const VertexStreamZeroStride : Cardinal) : HResult; stdcall;
type TIDirect3DDevice8_DrawIndexedPrimitiveUP_Original=function(const self:IDirect3DDevice8;const PrimitiveType : TD3DPrimitiveType; const MinVertexIndex, NumVertexIndices, PrimitiveCount : Cardinal; pIndexData : Pointer; IndexDataFormat : TD3DFormat; pVertexStreamZeroData : Pointer; const VertexStreamZeroStride : Cardinal) : HResult; stdcall;
type TIDirect3DDevice8_SetVertexShader_Original=function(const self:IDirect3DDevice8;const Handle : LongWord) : HResult; stdcall;

type TIDirect3DTexture8_AddRef_Original=function(const self:IDirect3DTexture8) : integer; stdcall;
type TIDirect3DTexture8_Release_Original=function(const self:IDirect3DTexture8) : integer; stdcall;
type TIDirect3DTexture8_GetSurfaceLevel_Original=function(const self:IDirect3DTexture8; const Level : Cardinal; out ppSurfaceLevel : IDirect3DSurface8) : HResult; stdcall;
type TIDirect3DTexture8_UnlockRect_Original=function(const self:IDirect3DTexture8; const Level : Cardinal) : HResult; stdcall;

type TIDirect3DVertexBuffer8_Lock_Original=function(const self:IDirect3DVertexBuffer8; const OffsetToLock, SizeToLock : Cardinal; var ppbData : PByte; const Flags : LongWord) : HResult; stdcall;
type TIDirect3DVertexBuffer8_Unlock_Original=function(const self:IDirect3DVertexBuffer8) : HResult; stdcall;




var Direct3DCreate8:TDirect3DCreate8;
    Direct3DCreate8Info: TAPIInfo;

var IDirect3D_CreateDevice: TAPIInfo;

var IDirect3DDevice8_Reset: TAPIInfo;
    IDirect3dDevice8_CreateTexture: TApiInfo;
    IDirect3DDevice8_CreateVertexBuffer: TAPIInfo;
    IDirect3DDevice8_UpdateTexture:TAPIInfo;
    IDirect3DDevice8_BeginScene: TAPIInfo;
    IDirect3DDevice8_EndScene: TAPIInfo;
    IDirect3DDevice8_SetTransform: TAPIInfo;
    IDirect3DDevice8_GetTransform: TAPIInfo;
    IDirect3DDevice8_SetRenderState: TAPIInfo;
    IDirect3DDevice8_SetTexture: TAPIInfo;
    IDirect3DDevice8_DrawPrimitive: TAPIInfo;
    IDirect3DDevice8_DrawIndexedPrimitive: TAPIInfo;
    IDirect3DDevice8_DrawPrimitiveUP: TAPIInfo;
    IDirect3DDevice8_DrawIndexedPrimitiveUP: TAPIInfo;
    IDirect3DDevice8_SetVertexShader: TAPIInfo;

var IDirect3DVertexBuffer8_Lock: TAPIInfo;
    IDirect3DVertexBuffer8_UnLock: TAPIInfo;

var IDirect3DTexture8_AddRef: TAPIInfo;
    IDirect3DTexture8_Release: TAPIInfo;
    IDirect3DTexture8_GetSurfaceLevel: TAPIInfo;
    IDirect3DTexture8_UnlockRect: TAPIInfo;


procedure SaveAllTextures8;
procedure SaveLockedTextureInfo8(aimconfigfile: string);
procedure LoadLockedTextureInfo8(aimconfigfile:string);
procedure handlekeypresses;


function MultiplyMatrix(const A: TD3dMatrix; const B: TD3dMatrix): TD3dMatrix;

function Direct3DCreate8Hook(SDKVersion: DWORD): PIDirect3D8; stdcall;
function IDirect3D_CreateDevice_Hook(const self:IDirect3D8;const Adapter : Cardinal; const DeviceType : TD3DDevType; hFocusWindow : HWND; BehaviorFlags : LongWord; var pPresentationParameters : TD3DPresent_Parameters; out ppReturnedDeviceInterface : IDirect3DDevice8) : HResult; stdcall;

function IDirect3DDevice8_Reset_Hook(const self:IDirect3DDevice8; var pPresentationParameters : TD3DPresent_Parameters) : HResult; stdcall;
function IDirect3DDevice8_CreateTexture_Hook(const self:IDirect3DDevice8;const Width, Height, Levels : Cardinal; const Usage : LongWord; const Format : TD3DFormat; const Pool : TD3DPool; out ppTexture : IDirect3DTexture8) : HResult; stdcall;
function IDirect3DDevice8_CreateVertexBuffer_Hook(const self:IDirect3DDevice8;const Length : Cardinal; const Usage, FVF : LongWord; const Pool : TD3DPool; out ppVertexBuffer : IDirect3DVertexBuffer8) : HResult; stdcall;
function IDirect3DDevice8_UpdateTexture_hook(const self: IDirect3DDevice8; const pSourceTexture, pDestinationTexture : IDirect3DBaseTexture8) : HResult; stdcall;
function IDirect3DDevice8_BeginScene_Hook(const self:IDirect3DDevice8): HResult; stdcall;
function IDirect3DDevice8_EndScene_Hook(const self:IDirect3DDevice8): HResult; stdcall;
function IDirect3DDevice8_SetTransform_Hook(const self: IDirect3DDevice8; const State : TD3DTransformStateType; const pMatrix : TD3DMatrix) : HResult; stdcall;
function IDirect3DDevice8_GetTransform_Hook(const self:IDirect3DDevice8;const State : TD3DTransformStateType; out pMatrix : TD3DMatrix) : HResult; stdcall;
function IDirect3DDevice8_SetRenderState_Hook(const self:IDirect3DDevice8;const State : TD3DRenderStateType; const Value : LongWord) : HResult; stdcall;
function IDirect3DDevice8_SetTexture_Hook(const self:IDirect3DDevice8;const Stage : LongWord; const pTexture : IDirect3DBaseTexture8) : HResult; stdcall;
function IDirect3DDevice8_DrawPrimitive_Hook(const self:IDirect3DDevice8;const PrimitiveType : TD3DPrimitiveType; const StartVertex, PrimitiveCount : Cardinal) : HResult; stdcall;
function IDirect3DDevice8_DrawIndexedPrimitive_Hook(const self: IDirect3DDevice8;const _Type : TD3DPrimitiveType; const minIndex, NumVertices, startIndex, primCount : Cardinal) : HResult; stdcall;
function IDirect3DDevice8_DrawPrimitiveUP_Hook(const self:IDirect3DDevice8;const PrimitiveType : TD3DPrimitiveType; const PrimitiveCount : Cardinal; pVertexStreamZeroData : Pointer; const VertexStreamZeroStride : Cardinal) : HResult; stdcall;
function IDirect3DDevice8_DrawIndexedPrimitiveUP_Hook(const self:IDirect3DDevice8;const PrimitiveType : TD3DPrimitiveType; const MinVertexIndex, NumVertexIndices, PrimitiveCount : Cardinal; pIndexData : Pointer; IndexDataFormat : TD3DFormat; pVertexStreamZeroData : Pointer; const VertexStreamZeroStride : Cardinal) : HResult; stdcall;
function IDirect3DDevice8_SetVertexShader_Hook(const self:IDirect3DDevice8;const Handle : LongWord) : HResult; stdcall;

function IDirect3DTexture8_AddRef_Hook(const self:IDirect3DTexture8) : integer; stdcall;
function IDirect3DTexture8_Release_Hook(const self:IDirect3DTexture8) : integer; stdcall;
function IDirect3DTexture8_GetSurfaceLevel_Hook(const self:IDirect3DTexture8; const Level : Cardinal; out ppSurfaceLevel : IDirect3DSurface8) : HResult; stdcall;
function IDirect3DTexture8_UnlockRect_Hook(const self:IDirect3DTexture8; const Level : Cardinal) : HResult; stdcall;

function IDirect3DVertexBuffer8_Lock_Hook(const self:IDirect3DVertexBuffer8; const OffsetToLock, SizeToLock : Cardinal; var ppbData : PByte; const Flags : LongWord) : HResult; stdcall;
function IDirect3DVertexBuffer8_Unlock_Hook (const self:IDirect3DVertexBuffer8) : HResult; stdcall;


var d3d8dll: THandle;
    HookedDirect3D: Boolean;

    toggleon: boolean;

    tempf1: single;
    tempf2: single;
    tempf3: single;
    tempf4,tempf5: single;



    XRotation: single;
    YRotation: single;
    ZRotation: single;



    //ce userinterface
    ceimage: TBitmap;
    cetexture: IDirect3DBaseTexture8; //;IDirect3DTexture8;
    texturestringtexture: IDirect3DTexture8;
    Lockedstringtexture: IDirect3DTexture8;
    UnLockedstringtexture: IDirect3DTexture8;

    cevertices: array of CEVertex;

    vertexshaderset: boolean;
    dontsetlastvertexshader: boolean;
    lastvertexshader: thandle;

    lastworldmatrix: TD3dmatrix;
    dontsetlastworldmatrix: boolean;
    worldmatrixset: boolean;

    lastprojectionmatrix,lastprojectionmatrix2: TD3dmatrix;
    dontsetlastprojectionmatrix: boolean;
    projectionmatrixset: boolean;

    lastviewmatrix: TD3dmatrix;
    dontsetlastviewmatrix: boolean;
    viewmatrixset: boolean;

    lockedtexturelist: array of TTextureInfo;
    texturelist: array of TTextureInfo;


    cefont: ID3dXFont;
    mysprite: ID3DXSprite;
    myspritetexture: IDirect3DTexture8;

    targettexture: IDirect3DTexture8;
    locktexture: IDirect3DTexture8;
    movementtexture: IDirect3DTexture8;
    blackTexture: IDirect3DTexture8;

    watchfornextdraw: boolean;
    nextdrawstage: dword;
    currenttexture: integer;
    xylist: array of td3dxvector3;
    xylist2: array of td3dxvector3;
    oldpos: td3dxvector3;

    screencenter: td3dxvector2;

    resetdevice: boolean;


implementation

procedure SaveAllTextures8;
var i: integer;
begin
  texturelistCS.Enter;
  try
    for i:=0 to length(texturelist)-1 do
      D3DXSaveTextureToFile(pchar('CETEX'+IntToStr(i)+'.bmp'),D3DXIFF_BMP,texturelist[i].texturehandle,nil);
  finally
    texturelistcs.Leave;
  end;
end;


procedure Removetexture(j: integer);
var i: integer;
begin
  if texturepointer>j then dec(texturepointer);

  texturelistcs.Enter;
  try
    try
      for i:=j to length(texturelist)-2 do
      begin
        texturelist[i].Width:=texturelist[i+1].Width;
        texturelist[i].Height:=texturelist[i+1].Height;
        texturelist[i].Levels:=texturelist[i+1].Levels;
        texturelist[i].Usage:=texturelist[i+1].Usage;
        texturelist[i].Format:=texturelist[i+1].Format;
        texturelist[i].Pool:=texturelist[i+1].Pool;
        texturelist[i].locked:=texturelist[i+1].locked;
        texturelist[i].xdelta:=texturelist[i+1].xdelta;
        texturelist[i].ydelta:=texturelist[i+1].ydelta;
        texturelist[i].zdelta:=texturelist[i+1].zdelta;
        copymemory(@texturelist[i].texturehandle,@texturelist[i+1].texturehandle,4);
      end;
    except
      outputdebugstring('error in removing texture (1)');
    end;

    try
      fillmemory(@texturelist[length(texturelist)-1].texturehandle,4,0);
    except
      outputdebugstring('error in removing texture (2)');
    end;

    try
      setlength(texturelist,length(texturelist)-1);
    except
      outputdebugstring('error in removing texture (2)');
    end;

    if texturepointer>=length(texturelist) then texturepointeR:=length(texturelist)-1;

  finally
    texturelistcs.Leave;
  end;

end;

procedure handlekeypresses;
var found: boolean;
    i,j: integer;
begin
  if keys.callibrationmode then
  begin

    if checkkeycombo(keys.previoustexture) then if (texturepointer-1)<0 then texturepointer:=length(texturelist)-1 else dec(texturepointer);
    if checkkeycombo(keys.nexttexture) then if (texturepointer+1)>=length(texturelist) then texturepointer:=0 else inc(texturepointer);
    if checkkeycombo(keys.locktexture) then  //(un)lock
    begin
      locking:=true;
      texturelistcs.Enter;

      try
        found:=false;
        for i:=0 to length(lockedtexturelist)-1 do
        begin
          if dword(lockedtexturelist[i].texturehandle)=dword(texturelist[texturepointer].texturehandle) then
          begin
            j:=i;
            found:=true;
            break;
          end;
        end;

        if found then
        begin
          imreleasing:=true;
          lockedtexturelist[j].texturehandle._Release;
          imreleasing:=false;

          fillmemory(@lockedtexturelist[j].texturehandle,4,0);

          for i:=j to length(lockedtexturelist)-2 do
          begin
            lockedtexturelist[i].Width:=lockedtexturelist[i+1].Width;
            lockedtexturelist[i].Height:=lockedtexturelist[i+1].Height;
            lockedtexturelist[i].Levels:=lockedtexturelist[i+1].Levels;
            lockedtexturelist[i].Usage:=lockedtexturelist[i+1].Usage;
            lockedtexturelist[i].Format:=lockedtexturelist[i+1].Format;
            lockedtexturelist[i].Pool:=lockedtexturelist[i+1].Pool;
            lockedtexturelist[i].locked:=lockedtexturelist[i+1].locked;
            lockedtexturelist[i].xdelta:=lockedtexturelist[i+1].xdelta;
            lockedtexturelist[i].ydelta:=lockedtexturelist[i+1].ydelta;
            lockedtexturelist[i].zdelta:=lockedtexturelist[i+1].zdelta;
            copymemory(@lockedtexturelist[i].texturehandle,@lockedtexturelist[i+1].texturehandle,4);
          end;
          setlength(lockedtexturelist,length(lockedtexturelist)-1);


          texturelist[texturepointer].locked:=false;

        end
        else
        begin
          i:=length(lockedtexturelist);
          setlength(lockedtexturelist,i+1);

          lockedtexturelist[i].Width:=texturelist[texturepointer].Width;
          lockedtexturelist[i].Height:=texturelist[texturepointer].Height;
          lockedtexturelist[i].Levels:=texturelist[texturepointer].Levels;
          lockedtexturelist[i].Usage:=texturelist[texturepointer].Usage;
          lockedtexturelist[i].Format:=texturelist[texturepointer].Format;
          lockedtexturelist[i].Pool:=texturelist[texturepointer].Pool;
          lockedtexturelist[i].locked:=texturelist[texturepointer].locked;
          lockedtexturelist[i].xdelta:=texturelist[texturepointer].xdelta;
          lockedtexturelist[i].ydelta:=texturelist[texturepointer].ydelta;
          lockedtexturelist[i].zdelta:=texturelist[texturepointer].zdelta;
          copymemory(@lockedtexturelist[i].texturehandle,@texturelist[texturepointer].texturehandle,4);

          lockedtexturelist[i].texturehandle._AddRef;

          lockedtexturelist[i].locked:=true;
          texturelist[texturepointer].locked:=true;

        end;
      finally

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -