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

📄 memorytrainerunit.pas.svn-base

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

            for k:=0 to length(userdefinedform.cheat)-1 do
               if (userdefinedform.cheat[k].cheatnr=i) then
                 userdefinedform.cheat[k].activated:=true;
          end
          else clist.Items[i].activated:=true;
        end;
      end;
  end else if autolaunch then btnlaunch.Click;
end;

procedure TfrmMemoryTrainer.Timer1Timer(Sender: TObject);
begin
  CheckForProcess;
  timer1.Enabled:=false;
  timer1.interval:=15000;
  timer1.enabled:=true;
end;

procedure TfrmMemoryTrainer.btnLaunchClick(Sender: TObject);
begin
  if fileexists(filename) then
  begin
    shellexecute(0,'open',pchar(filename),'','',sw_show);
    btnlaunch.Enabled:=false;
    timer1.Enabled:=false;
    timer1.interval:=10000;
    timer1.enabled:=true;
  end
  else
  if fileexists(extractfilename(filename)) then
  begin
    shellexecute(0,'open',pchar(extractfilename(filename)),'','',sw_show);
    btnlaunch.Enabled:=false;
    timer1.Enabled:=false;
    timer1.interval:=10000;
    timer1.enabled:=true;
  end
  else
  begin
    opendialog1.FileName:=extractfilename(filename);
    if opendialog1.Execute then
    begin
      btnlaunch.Enabled:=false;
      timer1.Enabled:=false;
      timer1.interval:=10000;
      timer1.enabled:=true;
      filename:=opendialog1.filename;
      shellexecute(0,'open',pchar(filename),'','',sw_show);
    end;
  end;
end;

procedure TfrmMemoryTrainer.FreezerTimer(Sender: TObject);
var i,j,k,l,m: integer;
    newvalue1: byte;
    newvalue2: word;
    newvalue3: dword;
    newvalue4: single;
    newvalue5: double;
    newvalue6: int64;

    oldvalue1: byte;
    oldvalue2: word;
    oldvalue3: dword;
    oldvalue4: single;
    oldvalue5: double;
    oldvalue6: int64;


    bl: integer;
    newbytes: array of byte;
    bytes: dword;
    realaddress,realaddress2,count:dword;
    original:dword;
begin
  for i:=0 to length(trainerdata)-1 do
  begin
    if trainerdata[i].active then
    begin
      for j:=0 to length(trainerdata[i].addressentrys)-1 do
      begin
        if trainerdata[i].addressentrys[j].frozen then
        begin
          if trainerdata[i].addressentrys[j].IsPointer then
          begin
            //find the real address
            realaddress2:=trainerdata[i].addressentrys[j].pointers[length(trainerdata[i].addressentrys[j].pointers)-1].Address;
            for k:=length(trainerdata[i].addressentrys[j].pointers)-1 downto 0 do
            begin
              readprocessmemory(processhandle,pointer(realaddress2),@realaddress,4,count);
              if count=4 then
                realaddress2:=realaddress+trainerdata[i].addressentrys[j].pointers[k].offset
              else
              begin
                realaddress2:=0;
                break;
              end;
            end;
            if realaddress2=0 then continue;
            realaddress:=realaddress2;
          end else realaddress:=trainerdata[i].addressentrys[j].Address;


          VirtualProtectEx(processhandle,  pointer(realaddress),1,PAGE_EXECUTE_READWRITE,original);
          //set value
          case trainerdata[i].addressentrys[j].memtyp of
           0  : begin   //byte
                  if trainerdata[i].addressentrys[j].frozendirection=0 then
                  begin
                    newvalue1:=byte(trainerdata[i].addressentrys[j].valuei);
                    WriteProcessMemory(processhandle,pointer(realaddress),@newvalue1,1,bytes);
                  end
                  else
                  begin
                    readprocessmemory(processhandle,pointer(realaddress),@newvalue1,1,bytes);
                    if trainerdata[i].addressentrys[j].Frozendirection=1 then
                    begin
                      //allow decreased values
                      if newvalue1<byte(trainerdata[i].addressentrys[j].valuei) then trainerdata[i].addressentrys[j].valuei:=newvalue1
                      else
                      begin
                        newvalue1:=byte(trainerdata[i].addressentrys[j].valuei);
                        WriteProcessMemory(processhandle,pointer(realaddress),@newvalue1,1,bytes);
                      end;
                    end
                    else
                    begin
                      //allow increased values
                      if newvalue1>byte(trainerdata[i].addressentrys[j].valuei) then trainerdata[i].addressentrys[j].valuei:=newvalue1
                      else
                      begin
                        newvalue1:=byte(trainerdata[i].addressentrys[j].valuei);
                        WriteProcessMemory(processhandle,pointer(realaddress),@newvalue1,1,bytes);
                      end;
                    end;
                  end;
                end;

           1  : begin //word
                  newvalue2:=word(trainerdata[i].addressentrys[j].valuei);
                  if trainerdata[i].addressentrys[j].frozendirection=0 then WriteProcessMemory(processhandle,pointer(realaddress),@newvalue2,2,bytes)
                  else
                  begin
                    ReadProcessMemory(processhandle,pointer(realaddress),@oldvalue2,2,bytes);
                    if trainerdata[i].addressentrys[j].frozendirection=1 then
                    begin
                      //allow decrease
                      if oldvalue2<newvalue2 then
                        trainerdata[i].addressentrys[j].valuei:=oldvalue2
                      else
                        WriteProcessMemory(processhandle,pointer(realaddress),@newvalue2,2,bytes);

                    end
                    else
                    begin
                      //allow inc
                      if oldvalue2>newvalue2 then
                        trainerdata[i].addressentrys[j].valuei:=oldvalue2
                      else
                        WriteProcessMemory(processhandle,pointer(realaddress),@newvalue2,2,bytes);
                    end;


                  end;
                end;

           2  : begin  //dword
                  newvalue3:=dword(trainerdata[i].addressentrys[j].valuei);
                  if trainerdata[i].addressentrys[j].frozendirection=0 then WriteProcessMemory(processhandle,pointer(realaddress),@newvalue3,4,bytes)
                  else
                  begin
                    ReadProcessMemory(processhandle,pointer(realaddress),@oldvalue3,4,bytes);
                    if trainerdata[i].addressentrys[j].frozendirection=1 then
                    begin
                      //allow decrease
                      if oldvalue3<newvalue3 then
                        trainerdata[i].addressentrys[j].valuei:=oldvalue3
                      else
                        WriteProcessMemory(processhandle,pointer(realaddress),@newvalue3,4,bytes)
                    end
                    else
                    begin
                      if oldvalue3>newvalue3 then
                        trainerdata[i].addressentrys[j].valuei:=oldvalue3
                      else
                        WriteProcessMemory(processhandle,pointer(realaddress),@newvalue3,4,bytes)

                    end;

                  end;
                end;

           3  : begin //single
                  newvalue4:=trainerdata[i].addressentrys[j].valuef;
                  if trainerdata[i].addressentrys[j].frozendirection=0 then WriteProcessMemory(processhandle,pointer(realaddress),@newvalue4,4,bytes)
                  else
                  begin
                    ReadProcessMemory(processhandle,pointer(realaddress),@oldvalue4,4,bytes);
                    if (not isnan(oldvalue4)) and (not isinfinite(oldvalue4)) then
                    begin
                      if trainerdata[i].addressentrys[j].frozendirection=1 then
                      begin
                        //allow decrease
                        if oldvalue4<newvalue4 then
                          trainerdata[i].addressentrys[j].valuef:=oldvalue4
                        else
                          WriteProcessMemory(processhandle,pointer(realaddress),@newvalue4,4,bytes)
                      end
                      else
                      begin
                        if oldvalue4>newvalue4 then
                          trainerdata[i].addressentrys[j].valuef:=oldvalue4
                        else
                          WriteProcessMemory(processhandle,pointer(realaddress),@newvalue4,4,bytes);

                      end;
                    end else WriteProcessMemory(processhandle,pointer(realaddress),@newvalue4,4,bytes);
                  end;
                end;

           4  : begin //double
                  newvalue5:=double(trainerdata[i].addressentrys[j].valuef);
                  if trainerdata[i].addressentrys[j].frozendirection=0 then WriteProcessMemory(processhandle,pointer(realaddress),@newvalue5,8,bytes)
                  else
                  begin
                    ReadProcessMemory(processhandle,pointer(realaddress),@oldvalue5,8,bytes);
                    if (not isnan(oldvalue5)) and (not isinfinite(oldvalue5)) then
                    begin
                      if trainerdata[i].addressentrys[j].frozendirection=1 then
                      begin
                        //allow decrease
                        if oldvalue5<newvalue5 then
                          trainerdata[i].addressentrys[j].valuef:=oldvalue5
                        else
                          WriteProcessMemory(processhandle,pointer(realaddress),@newvalue5,8,bytes)
                      end
                      else
                      begin
                        if oldvalue5>newvalue5 then
                          trainerdata[i].addressentrys[j].valuef:=oldvalue5
                        else
                          WriteProcessMemory(processhandle,pointer(realaddress),@newvalue5,8,bytes)

                      end;
                    end else WriteProcessMemory(processhandle,pointer(realaddress),@newvalue5,8,bytes)
                  end;

                end;

           5  : begin  //binary
                  bl:=1+((length(trainerdata[i].addressentrys[j].value)-1) div 8);
                  setlength(newbytes,bl);
                  ReadProcessMemory(processhandle,pointer(realaddress),@newbytes[0],bl,bytes);


                  l:=trainerdata[i].addressentrys[j].bit;
                  k:=0;
                  for m:=length(trainerdata[i].addressentrys[j].value) downto 1 do
                  begin
                    case trainerdata[i].addressentrys[j].value[m] of
                      '0' : setbit(l,newbytes[k],0);
                      '1' : setbit(l,newbytes[k],1);
                      '*','?','x': ;
                    end;

                    inc(l);
                    if l>=8 then
                    begin
                      inc(k);
                      l:=0;
                    end;
                  end;

                  writeprocessmemory(processhandle,pointer(realaddress),@newbytes[0],bl,bytes);
                  setlength(newbytes,0);
                end;

           6  : begin  //int64
                  newvalue6:=dword(trainerdata[i].addressentrys[j].valuei);
                  if trainerdata[i].addressentrys[j].frozendirection=0 then WriteProcessMemory(processhandle,pointer(realaddress),@newvalue6,8,bytes)
                  else
                  begin
                    ReadProcessMemory(processhandle,pointer(realaddress),@oldvalue6,8,bytes);
                    if trainerdata[i].addressentrys[j].frozendirection=1 then
                    begin
                      //allow decrease
                      if oldvalue6<newvalue6 then
                        trainerdata[i].addressentrys[j].valuei:=oldvalue6
                      else
                        WriteProcessMemory(processhandle,pointer(realaddress),@newvalue6,8,bytes)
                    end
                    else
                    begin
                      if oldvalue6>newvalue6 then
                        trainerdata[i].addressentrys[j].valuei:=oldvalue6
                      else
                        WriteProcessMemory(processhandle,pointer(realaddress),@newvalue6,8,bytes)

                    end;

                  end;
                end;

          7,8:  begin  //array of bytes , or array of char
                  writeprocessmemory(processhandle,pointer(realaddress),@trainerdata[i].addressentrys[j].valuea[0],trainerdata[i].addressentrys[j].valuelength,bytes);
                end;
           end;
          VirtualProtectEx(processhandle,  pointer(realaddress),1,original,original);

        end;
      end;
    end;
  end;
end;

procedure TfrmMemoryTrainer.Button1Click(Sender: TObject);
begin
  close;
end;

procedure TfrmMemoryTrainer.Button2Click(Sender: TObject);
begin
  showmessage(aboutboxtext);
end;

procedure TfrmMemoryTrainer.Button3Click(Sender: TObject);
begin
  if (sender is Tlabel2) then shellexecute(0,'open',pchar(tlabel2(sender).command),'','',sw_show);
  if (sender is TImage2) then shellexecute(0,'open',pchar(timage2(sender).command),'','',sw_show);
  if (sender is TButton2) then shellexecute(0,'open',pchar(tbutton2(sender).command),'','',sw_show);
end;

procedure TfrmMemoryTrainer.Timer2Timer(Sender: TObject);
begin
  if reinitializedesired and (processhandle<>0) then
  begin
    //last time not all addresses got loaded successfull
    reinterpretaddresses;

    if reinitializedesired and symhandler.isloaded then symhandler.reinitialize;
  end;
end;

procedure TfrmMemoryTrainer.Timer3Timer(Sender: TObject);
begin
  //every 30 seconds reinterpret anyhow. (not really needed since dlls usually dont change address, but lets do it anyhow) 
  reinterpretaddresses;
end;

procedure TfrmMemoryTrainer.CheatClick(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var t: tcheat;
    m: twmhotkey;
begin
  //sender is of type tcheat
  t:=tcheat(sender);

  //fake a hotkeypress
  m.hotkey:=t.cheatnr;

  hotkeyhandler(m);
end;

procedure TfrmMemoryTrainer.executecheat(sender: tobject);
var cheatnr: integer;
    m: twmhotkey;
begin
  if (sender is tbutton) then
    cheatnr:=tbutton(sender).Tag;

  if (sender is tlabel) then
    cheatnr:=tlabel(sender).tag;

  if (sender is timage) then
    cheatnr:=tlabel(sender).tag;

  cheatnr:=cheatnr-5;
  m.HotKey:=cheatnr;
  hotkeyhandler(m);
end; //onclick event

end.

⌨️ 快捷键说明

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