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

📄 cehook.dpr.svn-base

📁 这是一段游戏修改工具的源代码.ring3功能由dephi开发,驱动是C开发.希望对大家有帮助
💻 SVN-BASE
📖 第 1 页 / 共 5 页
字号:

  if scantype=valueBetween then
  begin
    if vartype=0 then
    begin
      if extra then val('$'+scanvalue2,bytevalue2,i)
               else val(scanvalue2,bytevalue2,i);
      if i>0 then raise Exception.Create(scanvalue2+' is not a valid byte notation');
    end;

    if vartype=1 then
    begin
      if extra then val('$'+scanvalue2,wordvalue2,i)
               else val(scanvalue2,wordvalue2,i);
      if i>0 then raise Exception.Create(scanvalue2+' is not an valid 2-byte notation');
    end;

    if vartype=2 then
    begin
      if extra then val('$'+scanvalue2,dwordvalue2,i)
               else val(scanvalue2,dwordvalue2,i);
      if i>0 then raise Exception.Create(scanvalue2+' is not an valid 4-byte notation');
    end;

    if vartype=3 then //doesnt have the hexadecimal option
    begin
      val(scanvalue2,singlevalue2,i);
      if i>0 then
        if scanvalue2[i]=',' then scanvalue2[i]:='.';

      val(scanvalue2,singlevalue2,i);
      if i>0 then raise Exception.Create(scanvalue2+' is not a valid floating point notation');
    end;

    if vartype=4 then //same as 3
    begin
      val(scanvalue2,doublevalue2,i);
      if i>0 then
        if scanvalue2[i]=',' then scanvalue2[i]:='.';
      val(scanvalue2,singlevalue2,i);

      if i>0 then raise Exception.create(scanvalue2+' is not a valid floating point notation');
    end;


    if vartype=6 then
    begin
      if extra then
        val('$'+scanvalue2,int64value2,i)
      else
        val(scanvalue2,Int64value2,i);
      if i>0 then raise Exception.Create(scanvalue2+' is not an valid 8-byte notation');
    end;
  end;


  helpword:=wordvalue xor 1+random(65534);
  helpdword:=dwordvalue xor helpword;

  //find the digits
  decim:=0;

  val(scanvalue,decimhelp,i);

  //i:=pos('.',scanvalue);
  if i>0 then decim:=length(scanvalue)-i;

  datatype:='NORMAL';

  assignfile(memoryfile,scansettings^.CheatEngineDir+'Memory.TMP');
  rewrite(memoryfile,1);

  assignfile(Addressfile,scansettings^.CheatEngineDir+'Addresses.TMP');
  rewrite(Addressfile,1);
  blockwrite(Addressfile,datatype,sizeof(datatype));

  number:=buffersize;
  setlength(foundaddress,number);

  if vartype=0 then //byte
  begin
    //no need to bother with fastscan routines
    setlength(foundvalue1,number);
    if scantype=exact_value then
    begin
      for i:=0 to memoryregions do
      begin
        if not scansettings^.scanning then break;

        inc(position,memoryregion[i].MemorySize);
        bytep:=pointer(memoryregion[i].BaseAddress);

        try
//          ScanByte(bytevalue,memoryregion[i].BaseAddress,memoryregion[i].MemorySize);
          for j:=0 to memoryregion[i].MemorySize-1 do
          begin
            if bytep^=bytevalue then
            begin
              foundaddress[found]:=Memoryregion[i].BaseAddress+j;
              inc(found);

              if found=number then
              begin
                if not FoundIsFilled then
                begin
                  for k:=0 to number-1 do foundvalue1[k]:=bytevalue;
                  FoundIsFilled:=true;
                end;

                blockwrite(Addressfile,pointer(foundaddress)^,4*number,actualwrite);
                blockwrite(Memoryfile,pointer(foundvalue1)^,number,actualwrite);
                found:=0;
              end;
            end;
            inc(bytep);

          end;
        except

        end;

        postmessage(scansettings^.formscanningHandle,ESSetProgressbarPos,position,0);
      end;

      if not foundisfilled then
        for i:=0 to found-1 do foundvalue1[i]:=bytevalue;

      blockwrite(Addressfile,pointer(foundaddress)^,4*found,actualwrite);
      blockwrite(Memoryfile,pointer(foundvalue1)^,found,actualwrite);
      result:=filesize(Memoryfile);
    end;

    if scantype=BiggerThan then
    begin
      for i:=0 to memoryregions do
      begin
        if not scansettings^.scanning then break;

        inc(position,memoryregion[i].MemorySize);
        bytep:=pointer(memoryregion[i].BaseAddress);

        try
          for j:=0 to memoryregion[i].MemorySize-1 do
          begin
            if bytep^>bytevalue then
            begin
              foundaddress[found]:=Memoryregion[i].BaseAddress+j;
              foundvalue1[found]:=bytep^;
              inc(found);

              if found=number then
              begin
                blockwrite(Addressfile,pointer(foundaddress)^,4*number,actualwrite);
                blockwrite(Memoryfile,pointer(foundvalue1)^,number,actualwrite);
                found:=0;
              end;
            end;
            inc(bytep);
          end;
        except

        end;

        postmessage(scansettings^.formscanningHandle,ESSetProgressbarPos,position,0);
      end;
      blockwrite(Addressfile,pointer(foundaddress)^,4*found,actualwrite);
      blockwrite(Memoryfile,pointer(foundvalue1)^,found,actualwrite);
      result:=filesize(Memoryfile);
    end;

    if scantype=SmallerThan then
    begin
      for i:=0 to memoryregions do
      begin
        if not scansettings^.scanning then break;

        inc(position,memoryregion[i].MemorySize);
        bytep:=pointer(memoryregion[i].BaseAddress);

        try
          for j:=0 to memoryregion[i].MemorySize-1 do
          begin
            if bytep^<bytevalue then
            begin
              foundaddress[found]:=dword(bytep);
              foundvalue1[found]:=bytep^;
              inc(found);

              if found=number then
              begin
                blockwrite(Addressfile,pointer(foundaddress)^,4*number,actualwrite);
                blockwrite(Memoryfile,pointer(foundvalue1)^,number,actualwrite);
                found:=0;
              end;
            end;
            inc(bytep);
          end;
        except

        end;

        postmessage(scansettings^.formscanningHandle,ESSetProgressbarPos,position,0);
      end;
      blockwrite(Addressfile,pointer(foundaddress)^,4*found,actualwrite);
      blockwrite(Memoryfile,pointer(foundvalue1)^,found,actualwrite);
      result:=filesize(Memoryfile);
    end;

    if scantype=ValueBetween then
    begin
      for i:=0 to memoryregions do
      begin
        if not scansettings^.scanning then break;

        inc(position,memoryregion[i].MemorySize);
        bytep:=pointer(memoryregion[i].BaseAddress);

        try
          for j:=0 to memoryregion[i].MemorySize-1 do
          begin
            if (bytep^>=bytevalue) and (bytep^<=bytevalue2) then
            begin
              foundaddress[found]:=dword(bytep);
              foundvalue1[found]:=bytep^;
              inc(found);

              if found=number then
              begin
                blockwrite(Addressfile,pointer(foundaddress)^,4*number,actualwrite);
                blockwrite(Memoryfile,pointer(foundvalue1)^,number,actualwrite);
                found:=0;
              end;
            end;
            inc(bytep);
          end;
        except

        end;

        postmessage(scansettings^.formscanningHandle,ESSetProgressbarPos,position,0);
      end;
      blockwrite(Addressfile,pointer(foundaddress)^,4*found,actualwrite);
      blockwrite(Memoryfile,pointer(foundvalue1)^,found,actualwrite);
      result:=filesize(Memoryfile);
    end;

  end
  else
  if vartype=1 then //word
  begin
    //no need to bother with fastscan routines
    setlength(foundvalue2,number);
    if scantype=exact_value then
    begin
      for i:=0 to memoryregions do
      begin
        if not scansettings^.scanning then break;

        inc(position,memoryregion[i].MemorySize);
        wordp:=pointer(memoryregion[i].BaseAddress);

        try
          if scansettings^.FastScan then
          begin
            for j:=0 to (memoryregion[i].MemorySize div 2)-1 do
            begin
              if wordp^=wordvalue then
              begin
                foundaddress[found]:=dword(wordp);
                inc(found);

                if found=number then
                begin
                  if not FoundIsFilled then
                  begin
                    for k:=0 to number-1 do foundvalue2[k]:=wordvalue;
                    FoundIsFilled:=true;
                  end;

                  blockwrite(Addressfile,pointer(foundaddress)^,4*number,actualwrite);
                  blockwrite(Memoryfile,pointer(foundvalue2)^,number*2,actualwrite);
                  found:=0;
                end;
              end;
              inc(wordp);
            end;
          end
          else
          begin
            for j:=0 to memoryregion[i].MemorySize-2 do
            begin
              if wordp^=wordvalue then
              begin
                foundaddress[found]:=dword(wordp);
                inc(found);

                if found=number then
                begin
                  if not FoundIsFilled then
                  begin
                    for k:=0 to number-1 do foundvalue2[k]:=wordvalue;
                    FoundIsFilled:=true;
                  end;

                  blockwrite(Addressfile,pointer(foundaddress)^,4*number,actualwrite);
                  blockwrite(Memoryfile,pointer(foundvalue2)^,number*2,actualwrite);
                  found:=0;
                end;
              end;
              asm
                inc wordp;
              end;
            end;
          end;
        except

        end;

        postmessage(scansettings^.formscanningHandle,ESSetProgressbarPos,position,0);
      end;

      if not foundisfilled then
        for i:=0 to found-1 do foundvalue2[i]:=wordvalue;
        
      blockwrite(Addressfile,pointer(foundaddress)^,4*found,actualwrite);
      blockwrite(Memoryfile,pointer(foundvalue2)^,found*2,actualwrite);
      result:=filesize(Memoryfile) div 2;
    end;

    if scantype=BiggerThan then
    begin
      for i:=0 to memoryregions do
      begin
        if not scansettings^.scanning then break;

        inc(position,memoryregion[i].MemorySize);
        wordp:=pointer(memoryregion[i].BaseAddress);

        try
          if scansettings^.FastScan then
          begin
            for j:=0 to (memoryregion[i].MemorySize div 2)-1 do
            begin
              if wordp^>wordvalue then
              begin
                foundaddress[found]:=dword(wordp);
                foundvalue2[found]:=wordp^;
                inc(found);

                if found=number then
                begin
                  blockwrite(Addressfile,pointer(foundaddress)^,4*number,actualwrite);
                  blockwrite(Memoryfile,pointer(foundvalue2)^,number*2,actualwrite);
                  found:=0;
                end;
              end;
              inc(wordp);
            end;
          end
          else
          begin
            for j:=0 to memoryregion[i].MemorySize-2 do
            begin
              if wordp^>wordvalue then
              begin
                foundaddress[found]:=dword(wordp);
                foundvalue2[found]:=wordp^;
                inc(found);

                if found=number then
                begin
                  blockwrite(Addressfile,pointer(foundaddress)^,4*number,actualwrite);
                  blockwrite(Memoryfile,pointer(foundvalue2)^,number*2,actualwrite);
                  found:=0;
                end;
              end;
              asm
                inc wordp;
              end;
            end;
          end;
        except

        end;

        postmessage(scansettings^.formscanningHandle,ESSetProgressbarPos,position,0);
      end;

      blockwrite(Addressfile,pointer(foundaddress)^,4*found,actualwrite);
      blockwrite(Memoryfile,pointer(foundvalue2)^,found*2,actualwrite);
      result:=filesize(Memoryfile) div 2;
    end;

    if scantype=SmallerThan then
    begin
      for i:=0 to memoryregions do
      begin
        if not scansettings^.scanning then break;

        inc(position,memoryregion[i].MemorySize);
        wordp:=pointer(memoryregion[i].BaseAddress);

        try
          if scansettings^.FastScan then
          begin
            for j:=0 to (memoryregion[i].MemorySize div 2)-1 do
            begin
              if wordp^<wordvalue then
              begin
                foundaddress[found]:=dword(wordp);
                foundvalue2[found]:=wordp^;
                inc(found);

                if found=number then
                begin
                  blockwrite(Addressfile,pointer(foundaddress)^,4*number,actualwrite);
                  blockwrite(Memoryfile,pointer(foundvalue2)^,number*2,actualwrite);
                  found:=0;
                end;
              end;
              inc(wordp);
            end;
          end
          else
          begin
            for j:=0 to memoryregion[i].MemorySize-2 do
            begin
              if wordp^<wordvalue then
              begin
                foundaddress[found]:=dword(wordp);
                foundvalue2[found]:=wordp^;

⌨️ 快捷键说明

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