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

📄 archiveeditunit.pas

📁 游戏克星江湖行游戏修改工具全部源码,功能很强的。
💻 PAS
📖 第 1 页 / 共 4 页
字号:
                 pchar(Format(String_FileTaskResult,[name,AttachedNum,(Time2-Time1)/1000])),
                 pchar(String_FileTaskResultTitle),
                 MB_OK);

end;

////////////////////////////第二三..次低阶扫描/////////////////////////////////////////
///if (scantype<>number_scan) and (scantype<>String_Scan)and (scantype<>InitialLowLevel_Scan) then
if VarType=LowLevel_value then
begin
Time1:=GetTickCount;
if ArchiveEditForm.checkAndgetfileSize(Filepathname)=0 then exit;
if ArchiveEditForm.checkAndgetfileSize(SaveFilename)=0 then exit;
     
    if (SearchTimes=2) then
    begin
     TempLength:=ArchiveEditForm.checkAndgetfileSize(Filepathname);
     TempSize:=TempLength;
    end else
    begin
     TempLength:=AddressMemStream.Size;
     TempSize:=TempLength shr 2;    ////Dword  Address Dword Size
    end;
     AttachedNum:=0;
     tempFileMemStreamNew:=TmemoryStream.Create;
     tempFileMemStreamNew.LoadFromFile(SaveFilename);

if SearchTimes=2 then
begin
   AddressMemStream.Clear;
   AddressMemStream.Seek(0,soFromBeginning);
   time1:=GetTickCount;
    For i:=0 to TempSize-1 do
     begin
     tempFileMemStream.Seek(i,sofrombeginning);
     try
     tempFileMemStream.ReadBuffer(FileReadByte,1);
     except
      continue;
     end;
     tempFileMemStreamNew.Seek(i,sofrombeginning);
     try
     tempFileMemStreamNew.ReadBuffer(FileReadByteNew,1);
     except
     continue;
     end;
       Application.ProcessMessages;
       //////_+++++//////////////////////////
       if scantype=Increased_Scan then
       begin
        if  FileReadByte>FileReadByteNew then
          begin
            TempAddress:=i;
            AddressMemStreamNew.WriteBuffer(TempAddress,Sizeof(TempAddress));
            inc(AttachedNum);
          end;
     inc(NowProcess);
     Continue;
      end;

      //////--------//////////////////////////
     if scantype=Decreased_Scan then
       begin
        if  FileReadByte<FileReadByteNEw then
          begin
            TempAddress:=i;
            AddressMemStreamNew.WriteBuffer(TempAddress,Sizeof(TempAddress));
            inc(AttachedNum);
          end;
     inc(NowProcess);
     Continue;
      end;
//////!!!!!!!!!!!!//////////////////////////
     if scantype=Changed_Scan then
       begin
        if  FileReadByte<>FileReadByteNew then
          begin
            TempAddress:=i;
            AddressMemStreamNew.WriteBuffer(TempAddress,Sizeof(TempAddress));
            inc(AttachedNum);
          end;
     inc(NowProcess);
     Continue;
      end;
 //////============//////////////////////////
     if scantype=UnChanged_Scan then
       begin
        if  FileReadByte=FileReadByteNew then
          begin
            TempAddress:=i;
            AddressMemStreamNew.WriteBuffer(TempAddress,Sizeof(TempAddress));
            inc(AttachedNum);
          end;
        inc(NowProcess);
        Continue;
        end;
        
     end;///for end
///
end else       ///searchtimes=2
begin
   AddressMemStream.Seek(0,soFromBeginning);
   time1:=GetTickCount;
    for i:=0 to TempSize-1 do
    begin
     Application.ProcessMessages;
     try
     AddressMemStream.ReadBuffer(TempAddress,Sizeof(TempAddress));
     except
     continue;
     end;
     tempFileMemStream.Seek(TempAddress,sofrombeginning);
     try
     tempFileMemStream.ReadBuffer(FileReadByte,1);
     except
      continue;
     end;
     tempFileMemStreamNew.Seek(TempAddress,sofrombeginning);
     try
     tempFileMemStreamNew.ReadBuffer(FileReadByteNew,1);
    except
      continue;
     end;
     //////_+++++//////////////////////////
       if scantype=Increased_Scan then
       begin
        if  FileReadByte>FileReadByteNew then
          begin
            TempAddress:=i;
            AddressMemStreamNEw.WriteBuffer(TempAddress,Sizeof(TempAddress));
            inc(AttachedNum);
          end;
     inc(NowProcess);
     Continue;
      end;

      //////--------//////////////////////////
     if scantype=Decreased_Scan then
       begin
        if  FileReadByte<FileReadByteNEw then
          begin
            TempAddress:=i;
            AddressMemStreamNEw.WriteBuffer(TempAddress,Sizeof(TempAddress));
            inc(AttachedNum);
          end;
     inc(NowProcess);
     Continue;
      end;
//////!!!!!!!!!!!!//////////////////////////
     if scantype=Changed_Scan then
       begin
        if  FileReadByte<>FileReadByteNew then
          begin
            TempAddress:=i;
            AddressMemStreamNEw.WriteBuffer(TempAddress,Sizeof(TempAddress));
            inc(AttachedNum);
          end;
     inc(NowProcess);
     Continue;
      end;
 //////============//////////////////////////
     if scantype=UnChanged_Scan then
       begin
        if  FileReadByte=FileReadByteNew then
          begin
            TempAddress:=i;
            AddressMemStreamNEw.WriteBuffer(TempAddress,Sizeof(TempAddress));
            inc(AttachedNum);
          end;      
     inc(NowProcess);
     Continue;
      end;
////////////////////////////////////////////////////////////
     end; ///for end

 end;///ebnd if else searchtime>2
  AddressMemStream.Clear;
  AddressMemStream.CopyFrom(AddressMemStreamNew,0);
  FreeAndNil(tempFileMemStreamNew);
 tempFileMemStream.SaveToFile(SaveFileName); /////覆盖
 NowProcess:=totalProcess;
 Time2:=getTickCount;
 CanUpdateFileTask:=messageBox(Application.handle,
                 pchar(Format(String_FileTaskResult,[name,AttachedNum,(Time2-Time1)/1000])),
                 pchar(String_FileTaskResultTitle),
                 MB_OK);

end; ////if VarType=LowLevel_value
   InSearchProcess:=False;
   FreeandNil(TempFileMemStream);
   FreeandNil(AddressMemStreamNew);

end;//with scan end;

end;  ///





procedure TArchiveEditForm.DisplayFileScanProcessTimer(Sender: TObject);
begin
if FiletaskNum=0 then exit;
with theFiletask[CurrentFileTaskIndex] do
begin
if (Scan_Gauge.MaxValue<>totalProcess) then   Scan_Gauge.MaxValue:=TotalProcess;
Scan_Gauge.Progress:=NowProcess;
///只有在扫描过程中更新
UpdateTaskInfo(CurrentFileTaskIndex);
   /////////////
if CanUpdateFileTask=IDOK then
 begin
  AddFoundToListView(CurrentFileTaskIndex);
   CanUpdateFileTask:=-999;
  end;
end;

end;

procedure TArchiveEditForm.InputHelp_SBClick(Sender: TObject);
begin
if not assigned(InputhelpForm)then  InputhelpForm:=TInputhelpForm.Create(self);
InputhelpForm.Showmodal;
InputhelpForm.Free;
InputhelpForm:=nil;

end;

procedure TArchiveEditForm.Value_EditKeyPress(Sender: TObject;
  var Key: Char);
begin
if key=#13 then Scan_bn.Click;

end;

procedure TArchiveEditForm.VarType_CBChange(Sender: TObject);
begin
if (FileTaskNUm=0) or (theFileTask[CurrentFileTaskIndex].InSearchProcess) then exit;
theFileTask[CurrentFileTaskIndex].VarType:=VarType_cb.ItemIndex;

end;

procedure TArchiveEditForm.ClearFileTask_menuClick(Sender: TObject);
var i,SelListIndex,theIndex:integer;
begin
if Filetasknum=0 then Exit;

for I:=1 to Filetasks_LV.Items.Count  do
begin
 SelListIndex:=i;
 theIndex:=ListToFileTaskIndex[SelListIndex];
 if theFileTask[theIndex].InSearchProcess  then
 begin
 MessageBox(Application.Handle,pchar(String_FileInScan),pchar(String_FileInScanTitle),
           MB_OK or MB_ICONINFORMATION);

  Exit;
 end;
end;

for I:=1 to Filetasks_LV.Items.Count  do
begin
 SelListIndex:=i;
 theIndex:=ListToFileTaskIndex[SelListIndex];
 theFileTask[theIndex].Applyed:=False;
 theFileTask[theIndex].AddressMemStream.Clear;
 DeleteFile(theFileTask[theIndex].SaveFileName);
end;

FiletaskNUm:=0;
FileTasks_lv.Items.Clear;
UpdateTaskInfo(theFileTask[theIndex].Index);

end;


procedure TArchiveEditForm.Found_LVDblClick(Sender: TObject);
begin
if Found_LV.Selected=nil then exit;
  FileRecordForm.Show;

end;

Function TArchiveEditForm.ReadFileData(theFileName:String;theAddress:Dword;valuetype:integer):string;
var AddressBuf:Dword;
    i:Integer;
    TempByte:Byte;
    TempWord:Word;
    TempDword:Dword;
    Tempint64:int64;
    TempSingle:Single;
    TempDouble:Double;
    TempStringBYTE:BYTE;
    Tempstring:string;
    tempFileStream:TmemoryStream;
begin
result:='Error!';

if checkAndGetFileSize(theFileName)=0  then exit;
tempFileStream:=TmemoryStream.Create;
 try
   tempFileStream.LoadFromFile(theFileName);
   tempFileStream.Seek(theAddress,soFrombeginning);
   
   try

     case ValueType of
         Byte_value: begin
                     tempFileStream.ReadBuffer(TempByte,1);
                     result:=IntTOStr(TempByte);
                     end;
         Word_value: begin
                     tempFileStream.ReadBuffer(TempWord,2);
                     result:=IntTOStr(TempWord);
                     end;
         Dword_value:begin
                     tempFileStream.ReadBuffer(TempDWord,4);
                     result:=IntTOStr(TempDword);
                     end;
         Int64_value:begin
                     tempFileStream.ReadBuffer(TempInt64,8);
                     result:=IntTOStr(Tempint64);
                     end;
         Single_value:begin
                      tempFileStream.ReadBuffer(TempSingle,4);
                      result:=FloatTOStr(TempSingle);
                     end;
         Double_value:begin
                      tempFileStream.ReadBuffer(TempDouble,8);
                      result:=FloatTOStr(TempDouble);
                     end;
         String_Value:begin
                      Tempstring:='';
                      for i:=1 to 16 do
                      begin
                      tempFileStream.ReadBuffer(TempStringBYTE,1);
                      Tempstring:=Tempstring+chr(TempstringBYTE);
                      end;
                      Result:=Tempstring;
                     end;
     end;//case end
   except
   end;

   finally
    FreeandNIl(tempFileStream);
   end;

end;

procedure TArchiveEditForm.Found_LVMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var tempAddress:Dword;
    Ecode:integer;
    TempByte:Byte;
    TempWord:Word;
    TempDword:Dword;
    Tempint64:int64;
    TempSingle:Single;
    TempDouble:Double;
    TempString:String[16];
begin
if Found_LV.Selected=nil then exit;

Val('$'+Found_lv.Selected.Caption,tempAddress,Ecode);
File_Data_Caption:='Money';
File_name:=theFileTask[CurrentFiletaskIndex].FilepathName;
EditFileName:=File_name;
File_Address:=tempAddress;
if (theFileTask[CurrentFiletaskIndex].ScanType<>Number_Scan) and
   (theFileTask[CurrentFiletaskIndex].ScanType<>String_Scan) then
File_ValueType:=Word_Value else
File_ValueType:=theFileTask[CurrentFiletaskIndex].VarType;
case File_ValueType of
Byte_value:  begin
            File_value:=ReadFileData(File_name,File_Address,Byte_value);
             end ;
Word_value:  begin
            File_value:=ReadFileData(File_name,File_Address,Word_value);
             end ;
Dword_value:  begin
            File_value:=ReadFileData(File_name,File_Address,DWord_value);
             end ;
Int64_value:  begin
            File_value:=ReadFileData(File_name,File_Address,Int64_value);
             end ;
Single_value:  begin
             File_value:=ReadFileData(File_name,File_Address,Single_value);
             end ;
Double_value:  begin
             File_value:=ReadFileData(File_name,File_Address,Double_value);
             end ;
String_value:  begin
             File_value:=ReadFileData(File_name,File_Address,String_value);
             end ;
end;
 File_Info:=0;
FileRecordForm.FormRefresh;
end;

procedure TArchiveEditForm.EditFile_SbClick(Sender: TObject);
begin
if Filetasknum=0 then Exit;
if FileEditForm.Visible then FileEditForm.Close;
  File_name:=theFileTask[CurrentFiletaskIndex].FilepathName;
  EditFileName:=File_name;
if checkandGetFileSize(EditFileName)=0 then exit;
  NowPos:=0; 
  FileEditForm.Show;
end;

procedure TArchiveEditForm.EditAddressClick(Sender: TObject);
var TempAddress:DWORD;
    ECode:integer;
begin
if Found_LV.Selected=nil then Exit;
if Filetasknum=0 then Exit;
if FileEditForm.Visible then FileEditForm.Close;
File_name:=theFiletask[CurrentFileTaskIndex].FilepathName;
EditFileName:=File_name;
if checkandGetFileSize(EditFileName)=0 then exit;
  Val('$'+Found_LV.Selected.Caption,TempAddress,Ecode);
    Nowpos:=TempAddress;
  FileEditForm.Show;
  
end;

procedure TArchiveEditForm.DeleteFileEditAddressClick(Sender: TObject);
begin
if Edit_lv.Selected<>nil then 
Edit_lv.Selected.Delete;

end;

procedure TArchiveEditForm.ClearAllAddressClick(Sender: TObject);
begin
Edit_lv.Clear;

end;

procedure TArchiveEditForm.ModifyFileEditClick(Sender: TObject);
var TempAddress:DWORD;
    ECode:integer;
begin
if Edit_lv.Selected=nil then exit;
  FileRecordForm.Show;
  
end;

procedure TArchiveEditForm.Edit_LVMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var tempAddress:Dword;
    Ecode:Integer;
begin
if Edit_lv.Selected=nil then exit;
    File_Data_Caption:=Edit_lv.Selected.Caption;
    //File_name:string;
    ///File_Address:Dword;
    ///File_value:String;
    ///File_ValueType:integer;
    File_Info:=2;
 File_name:=Edit_lv.Selected.SubItems[3];
 EditFilename:=File_name;
if checkandGetFileSize(File_name)=0 then exit;
  Val('$'+Edit_lv.Selected.subitems[0],TempAddress,Ecode);
    File_Address:=TempAddress;
  File_value:=Edit_lv.Selected.subitems[1];

    if Edit_lv.Selected.subitems[2]='Byte_Type' then File_ValueType:=Byte_value else
    if Edit_lv.Selected.subitems[2]='Word_Type' then File_ValueType:=Word_value  else
    if Edit_lv.Selected.subitems[2]='Dword_Type'then File_ValueType:=Dword_value else
    if Edit_lv.Selected.subitems[2]='Int64_Type' then File_ValueType:=Int64_value else
    if Edit_lv.Selected.subitems[2]='Single_Type' then File_ValueType:=Single_value else
    if Edit_lv.Selected.subitems[2]='Double_Type' then File_ValueType:=Double_value else
    if Edit_lv.Selected.subitems[2]='String_Type'then File_ValueType:=String_value;
FileRecordForm.FormRefresh;

end;

procedure TArchiveEditForm.EditFileAddressClick(Sender: TObject);
var TempAddress:DWORD;
    ECode:integer;
begin
if Edit_LV.Selected=nil then Exit;
if Filetasknum=0 then Exit;
if FileEditForm.Visible then FileEditForm.Close;
File_Name:=Edit_lv.Selected.subitems[3];
EditFileName:=File_Name;
if checkandGetFileSize(File_Name)=0 then exit;
  Val('$'+Edit_lv.Selected.subitems[0],TempAddress,Ecode);
    Nowpos:=TempAddress;
  FileEditForm.Show;
  
end;

end.

⌨️ 快捷键说明

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