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

📄 unit1.pas

📁 赤壁资源提取 源码 赤壁资源提取赤壁资源提取源码
💻 PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, Buttons;

type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    ListView1: TListView;
    Label1: TLabel;
    Edit1: TEdit;
    SpeedButton1: TSpeedButton;
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    ListView2: TListView;
    Label2: TLabel;
    Edit2: TEdit;
    SpeedButton2: TSpeedButton;
    Button2: TButton;
    OpenDialog2: TOpenDialog;
    OpenDialog3: TOpenDialog;
    ListView3: TListView;
    Label3: TLabel;
    Edit3: TEdit;
    SpeedButton3: TSpeedButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    procedure SpeedButton1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure SpeedButton3Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then Edit1.Text := OpenDialog1.FileName;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  fs: TFileStream;
  ObjectId: DWORD;
  ObjectName: string;
  ObjectDesc: string;
  Address: Integer;
  Data: array[0..99] of Byte;
begin
  ListView1.Items.Clear;
  fs := TFileStream.Create(Edit1.Text, fmOpenRead);
  Address := $00000008;
  while(Address < $00004448) do
  begin
    fs.Seek(Address, soFromBeginning);
    fs.Read(Data, 4);
    ObjectId := Data[3] shl 24 + Data[2] shl 16 + Data[1] shl 8 + Data[0];
    fs.Seek(Address + $00A0, soFromBeginning);
    fs.Read(Data, 100);
    ObjectDesc := Copy(WideCharToString(@(Data[0])),1, 100);
    fs.Seek(Address + $04A0, soFromBeginning);
    fs.Read(Data, 100);
    ObjectName := Copy(WideCharToString(@(Data[0])),1, 100);
    with ListView1.Items.Add do
    begin
      Caption := IntToHex(Address, 8);
      SubItems.Add(IntToHex(ObjectId, 8));
      SubItems.Add(ObjectName);
    end;
    Address := Address + $04E0
  end;
  fs.Free;
end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
  if OpenDialog2.Execute then Edit2.Text := OpenDialog2.FileName;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  fs: TFileStream;
  DataSize: DWORD;
  DataCount: DWORD;
  ObjectId: DWORD;
  ObjectName: string;
  i, j, n: Integer;
  Address: Integer;
  Data: array[0..10240] of Byte;
begin
  ListView2.Items.Clear;
  fs := TFileStream.Create(Edit2.Text, fmOpenRead);
  N := 0;
  Address := $00000008;
  while(N < 87) do
  begin
    fs.Seek(Address, soFromBeginning);
    fs.Read(Data, 4);
    Address := Address + 4;
    DataSize := Data[3] shl 24 + Data[2] shl 16 + Data[1] shl 8 + Data[0];
    fs.Read(Data, 4);
    Address := Address + 4;
    DataCount := Data[3] shl 24 + Data[2] shl 16 + Data[1] shl 8 + Data[0];
    for i := 0 to DataCount - 1 do
    begin
      fs.Seek(Address, soFromBeginning);
      fs.Read(Data, 4);
      ObjectId := Data[3] shl 24 + Data[2] shl 16 + Data[1] shl 8 + Data[0];
      fs.Read(Data, DataSize - 4);
      j := 0;
      case N of
        3, 7, 10, 40, 60: j := 8;
        19, 21, 36, 48: j := 4;
      end;
      ObjectName := Copy(WideCharToString(@(Data[j])),1, DataSize - 4 - j);
      with ListView2.Items.Add do
      begin
        Caption := IntToHex(Address, 8);
        SubItems.Add(IntToHex(ObjectId, 8));
        SubItems.Add(ObjectName);
      end;
      Address := Address + DataSize;
      if Address = $0025F4CC then  Address := Address + $69;
    end;
    Inc(N);
  end;
  fs.Free;
end;

procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
  if OpenDialog3.Execute then Edit3.Text := OpenDialog3.FileName;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  fs: TFileStream;
  TaskAddr: DWORD;
  TaskId: DWORD;
  TaskName: string;
  Address: Integer;
  Data: array[0..29] of Byte;
begin
  ListView3.Items.Clear;
  fs := TFileStream.Create(Edit3.Text, fmOpenRead);
  Address := $00000010;
  while(Address < $00001584) do
  begin
    fs.Seek(Address, soFromBeginning);
    fs.Read(Data, 4);
    TaskAddr := Data[3] shl 24 + Data[2] shl 16 + Data[1] shl 8 + Data[0];
    fs.Seek(TaskAddr, soFromBeginning);
    fs.Read(Data, 4);
    TaskId := Data[3] shl 24 + Data[2] shl 16 + Data[1] shl 8 + Data[0];
    fs.Seek(TaskAddr + 4, soFromBeginning);
    fs.Read(Data, 30);
    TaskName := Copy(WideCharToString(@(Data[0])),1, 30);
    with ListView3.Items.Add do
    begin
      Caption := IntToHex(TaskAddr, 8);
      SubItems.Add(IntToHex(TaskId, 8));
      SubItems.Add(TaskName);
    end;
    Address := Address + $04
  end;
  fs.Free;
end;

procedure TForm1.Button4Click(Sender: TObject);
var
  i: Integer;
  f: TStrings;
begin
  f := TStringList.Create;
  for i:= 0 to ListView2.Items.Count - 1 do
    f.Add(ListView2.Items[i].Caption + '      ' + ListView2.Items[i].SubItems.Strings[0] + '      ' + ListView2.Items[i].SubItems.Strings[1]);
  f.SaveToFile(ExtractFilePath(Edit2.Text) + '\elements.txt');
  f.Free;
end;

procedure TForm1.Button5Click(Sender: TObject);
var
  i: Integer;
  f: TStrings;
begin
  f := TStringList.Create;
  for i:= 0 to ListView3.Items.Count - 1 do
    f.Add(ListView3.Items[i].Caption + '      ' + ListView3.Items[i].SubItems.Strings[0] + '      ' + ListView3.Items[i].SubItems.Strings[1]);
  f.SaveToFile(ExtractFilePath(Edit3.Text) + '\tasks.txt');
  f.Free;
end;

procedure TForm1.Button6Click(Sender: TObject);
var
  i: Integer;
  f: TStrings;
begin
  f := TStringList.Create;
  for i:= 0 to ListView1.Items.Count - 1 do
    f.Add(ListView1.Items[i].Caption + '      ' + ListView1.Items[i].SubItems.Strings[0] + '      ' + ListView1.Items[i].SubItems.Strings[1]);
  f.SaveToFile(ExtractFilePath(Edit1.Text) + '\gshop.txt');
  f.Free;
end;

end.

⌨️ 快捷键说明

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