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

📄 directxhook.pas.svn-base

📁 这是一段游戏修改工具的源代码.ring3功能由dephi开发,驱动是C开发.希望对大家有帮助
💻 SVN-BASE
📖 第 1 页 / 共 5 页
字号:
  //draw the strings in the box  cefont._Begin;  r.Left:=vp.Width-requiredkeylistwidth+1;  r.Top:=0;  r.Bottom:=r.left+16;  r.Right:=vp.Width;  for i:=0 to keylist.Count-1 do  begin    r.Top:=i*16;    r.Bottom:=i*16+(r.left+16);    cefont.DrawTextA(pchar(keylist[i]),length(keylist[i]),r,0,D3DCOLOR_ARGB(240,255,255,255));  end;  cefont._End;end;function IDirect3DDevice8_EndScene_Hook(const self:IDirect3DDevice8): HResult; stdcall;var tm:TD3DMatrix;    vp:Td3dViewport8;    x: idirect3dvertexbuffer8;    s: dword;    t: idirect3dbasetexture8;    bla,bla5: pd3dxvector2;    bla2,bla6,position,scale: td3dxvector2;    bla3: prect;    bla4: trect;    pdesc: TD3DSurface_Desc;    i:integer;    closest: integer;    closestsqr1: single;    closestsqr2: single;    xd,yd: single;    xd2,yd2: integer;    newtick: int64;    tickssincelastdraw: dword;    mssincelastdraw: double;    r: trect;    ts: string;    tempsingle: single;   // xdelta,ydelta: single;   start,stop: integer;   rot,rot2,rot3: td3dxmatrix;   v1,v2,v3: TD3dvector;begin  s:=gettickcount;  try    imdrawing:=true;    try      dontsetlastvertexshader:=true;      dontsetlastworldmatrix:=true;      dontsetlastprojectionmatrix:=true;      dontsetlastviewmatrix:=true;      self.GetViewport(vp);      mysprite._Begin;      if callibrationmode then      begin        //draw texture string        position.x:=0;        position.y:=0;        mysprite.Draw(texturestringtexture,nil,nil,nil,0,@position,D3DCOLOR_ARGB(127,255,255,255));        if texturepointer>=0 then        begin          texturelistcs.Enter;          lockedtexturelistcs.Enter;          try            position.y:=16;            if texturelist[texturepointer].texturehandle.GetLevelDesc(0,pdesc)=0 then            begin              scale.x:=100 / pdesc.Width;              scale.y:=100 / pdesc.Height;            end            else            begin              scale.x:=1;              scale.y:=1;            end;            mysprite.Draw(texturelist[texturepointer].texturehandle,nil,@scale,nil,0,@position,D3DCOLOR_ARGB(127,255,255,255));            position.y:=116;            if texturelist[texturepointer].locked then            begin              mysprite.Draw(lockedstringtexture,nil,nil,nil,0,@position,D3DCOLOR_ARGB(127,255,255,255));              cefont._Begin;              ts:=format('x=%.1f y=%.1f z=%.1f',[texturelist[texturepointer].xdelta, texturelist[texturepointer].ydelta, texturelist[texturepointer].zdelta]);              r.left:=trunc(position.x)+10;              r.Top:=trunc(position.y)+16;              r.Right:=trunc(position.x)+10+800;              r.Bottom:=trunc(position.y)+16+16;              cefont.DrawTextA(pchar(ts),length(ts),r,0,D3DCOLOR_ARGB(255,0,255,0));              cefont._End;            end            else            begin              mysprite.Draw(unlockedstringtexture,nil,nil,nil,0,@position,D3DCOLOR_ARGB(127,255,255,255));            end;          finally            texturelistcs.Leave;            lockedtexturelistcs.leave;          end;        end;      end;      closest:=0;      closestsqr2:=-1;      if length(xylist)>0 then        closestsqr2:=(abs((vp.Width/2)-(xylist[0].x)))*(abs((vp.height/2)-(xylist[0].y)));      for i:=0 to length(xylist2)-1 do      begin        position.x:=xylist2[i].x-8; //I thought it would be -4....        position.y:=xylist2[i].y-8;        mysprite.Draw(targettexture,nil,nil,nil,0,@position,D3DCOLOR_ARGB(255,255,255,255));{        ts:=format('(%.3f,%.3f,%.3f)',[xylist2[i].x,xylist2[i].y,xylist2[i].z]);                  ,        //'Position:('+FloatToStr(xylist2[i].x)+','+FloatToStr(xylist2[i].y)+','+FloatToStr(xylist2[i].z)+')';        cefont._Begin;        r.left:=trunc(position.x)+10;        r.Top:=trunc(position.y);        r.Right:=trunc(position.x)+10+800;        r.Bottom:=trunc(position.y)+16;        cefont.DrawTextA(pchar(ts),length(ts),r,0,D3DCOLOR_ARGB(255,0,255,0));        cefont._End; }        closestsqr1:=(abs((vp.Width/2)-(xylist2[i].x)))*(abs((vp.height/2)-(xylist2[i].y)));        if closestsqr2>closestsqr1 then        begin          closestsqr2:=closestsqr1;          closest:=i;        end;      end;      if length(xylist)>0 then      begin        //put in xd and yd the distance between the closest object and the screencenter        xd:=xylist[closest].x-(vp.Width/2);        yd:=xylist[closest].y-(vp.height/2);        //-----------------------------------------------------        //extrapolate the speed of the player when there is lag between pressing fire and actually shooting        //Doesn't handle acceleration or decceleration, just if it is using a constant speed (standing still is also a constant speed...)        inc(bbb);        if (bbb mod 4)=0 then //frame 0:get position        begin          oldpos:=xylist[closest]; //store current position          QueryPerformanceCounter(lasttick); //store current time          bbb:=4; //I hate overflows        end;        if (bbb mod 4)=2 then //calculate the new speed(assuming the player is moving with a constant speed)        begin          //frame 2: get new position and new time and use that to calulate the speed          //calculate new speed          QueryPerformanceCounter(newtick);          tickssincelastdraw:=newtick-lasttick;          mssincelastdraw:=tickssincelastdraw*onetick;          xdelta:=xylist[closest].x-oldpos.x;          ydelta:=xylist[closest].y-oldpos.y;          //delta now contains the location differences since 3 frames ago          //delta devided by the time since the oldpos and the newpos is the position change per milisecond          //positionchange per milisecond multiplied by the ammount of milliseconds you want to be in fron          if usefpslag then          begin            fpslag:=mssincelastdraw/2; //there where 2 draws since the start of the measurement            xdelta:=(xdelta/mssincelastdraw)*(lag+lagfrommemory+fpslag);            ydelta:=(ydelta/mssincelastdraw)*(lag+lagfrommemory+fpslag);          end          else          begin            xdelta:=(xdelta/mssincelastdraw)*(lag+lagfrommemory);            ydelta:=(ydelta/mssincelastdraw)*(lag+lagfrommemory);          end;        end;        if zoom=1 then        begin          position.x:=xylist[closest].x-8+xdelta2;          position.y:=xylist[closest].y-8+ydelta2;          mysprite.draw(movementtexture,nil,nil,nil,0,@position,D3DCOLOR_ARGB(255,255,255,255));        end;        if (bbb mod 4)>=2 then  //move the mouse, after recalculating the speed or when it's doing nothing        begin          //modify xd and yd with the predicted location (so move the mouse to the predicted location instead of the current location)          xd:=xd+xdelta;          yd:=yd+ydelta;          //--------------------------------------------------------------          if autoaim then          begin            xd2:=0;            yd2:=0;            if abs(xd)>mousespeedx[40] then            begin              //calculate the size of the movement              //(xd-mousespeedx[40]) = pixels needed to be moved (after a 40)              //(mousespeedx[40]-mousespeedx[35] / 5)=pixels moved for every step              xd2:=40+trunc((abs(xd)-mousespeedx[40])/((mousespeedx[40]-mousespeedx[35]) / 5));              if xd<0 then xd2:=-xd2;            end else            begin              //find the closest in the list              i:=20;              start:=1;              stop:=40;              while (i<stop) and not ((mousespeedx[i]<abs(xd)) and (mousespeedx[i+1]>xd)) do              begin                if mousespeedx[i]<abs(xd) then start:=i else stop:=i;                i:=start+(stop-start) div 2;              end;              if (i=1) and (mousespeedx[i]<xd) then i:=0;              if xd<0 then xd2:=-i else xd2:=i;            end;            //y            if abs(yd)>mousespeedy[40] then            begin              //calculate the size of the movement              //(yd-mousespeedy[40]) = pixels needed to be moved (after a 40)              //(mousespeedy[40]-mousespeedy[35] / 5)=pixels moved for every step              yd2:=40+trunc((abs(yd)-mousespeedy[40])/((mousespeedy[40]-mousespeedy[35]) / 5));              if yd<0 then yd2:=-yd2;            end else            begin              //find the closest in the list              i:=20;              start:=1;              stop:=40;              while (i<stop) and not ((mousespeedy[i]<abs(yd)) and (mousespeedy[i+1]>yd)) do              begin                if mousespeedy[i]<abs(yd) then start:=i else stop:=i;                i:=start+(stop-start) div 2;              end;              if (i=1) and (mousespeedy[i]<yd) then i:=0;              if yd<0 then yd2:=-i else yd2:=i;            end;            cefont._Begin;            r.left:=trunc(vp.Width/2)-20;            r.Top:=trunc(vp.Height/2)+100;            r.Right:=r.left+800;            r.Bottom:=r.top+16;            ts:=format('xd=%.2f xd2=%d',[xd,xd2]);            cefont.DrawTextA(pchar(ts),length(ts),r,0,D3DCOLOR_ARGB(255,255,255,255));            cefont._End;            mouse_event(MOUSEEVENTF_MOVE,xd2,yd2,0,0);            if ((bbb mod 4)=2) and autoshoot then            begin              if not shot then              begin                //if s>=(lastshot+intervalbetweenshots) then                begin                  mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); //fire                  shot:=true;                  lastshot:=s;                end;              end;              {if shot and (s>=(lastshot+clicktime)) then              begin                shot:=false;                mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); //stop fire              end;}            end;          end;        end;        position.x:=xylist2[closest].x-8;        position.y:=xylist2[closest].y-8;        mysprite.Draw(locktexture,nil,nil,nil,0,@position,D3DCOLOR_ARGB(255,255,255,255));        if mousecallibrationactive then        begin          case mousecallibrationmode of            //-----------------------------------------------            //1            //-----------------------------------------------            1:            begin              // move the mouse 1 point on the x axis              mousecallibrationpreviouspos:=position;              mouse_event(MOUSEEVENTF_MOVE	,1,0,0,0);              inc(mousecallibrationmode);            end;            2:            begin              //the mouse has been moved and this is a updated scene              //newpos-oldpos = change              mousecallibrationhorizontal1point:=position.x-mousecallibrationpreviouspos.x;

⌨️ 快捷键说明

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