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

📄 frmmain.pas

📁 传奇3 setup!.txt文件配置工具 可根据设置生成新的setup!.txt文件
💻 PAS
📖 第 1 页 / 共 2 页
字号:
    Path631,Path696:String[$64];//$631
    ClothMan,//$6FB
    ClothWoMan,//$72E
    Weapon,  //$761
    Light,  //$794
    BasicDrug, //$7C7
    GoldStone, //$7FA
    SilverStone, //$82D
    SteelStone, //$860
    CopperStone,//$893
    BlackStone, //$8C6
    Zuma1,    //$8F9
    Zuma2,   //$92C
    Zuma3,   //$95F
    Zuma4,   //$992
    Bee,      //$9C5
    SActorer, //$9F8
    WomaHorn:String[$32];  //$A2B
    ZumaPiece : string[$32];  //$A5E
    ByteA91:array[0..6] of byte; //$A91
end;
type
  TEICSetupFile = class
    tmp:THandle;
    Info:TEICSetupInfo;
end;
var
  Form1: TForm1;
  CSetupFile:TEICSetupFile;

implementation

{$R *.dfm}
function _GetStrByShortStr(Source: ShortString): String;
var
  len : Integer;
begin
  Result := '';
  len := PByte(@Source)^;
  if len > 0 then begin
      SetLength(Result,len);
      CopyMemory(Pointer(Result),Pointer(Integer(@Source) + 1),len);
  end
end;
procedure XorBuf(Dest:PByte;XorBuf:Byte;Len:Integer);
var I:Integer;
begin
  for I:= 0 to Len -1 do begin
    PByte(Integer(Dest)+I)^ := PByte(Integer(Dest)+I)^ xor XorBuf;
  end;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var Stream:TMemoryStream;
begin
  With OpenDialog1 do begin
    InitialDir := 'D:\Mud3\Setup';
    if Execute then begin
      Edit1.Text := FileName;
      Stream := TMemoryStream.Create;
      try
        Stream.LoadFromFile(Edit1.Text);
        Stream.Position := 0;
        XorBuf(Stream.Memory,4,SizeOf(TEICSetupInfo));
        Stream.ReadBuffer(CSetupFile.Info,SizeOf(TEICSetupInfo));
        GetValues;
      finally Stream.Free end;
    end;
  end;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
var Stream:TMemoryStream;S:String;
begin
  Stream := TMemoryStream.Create;
  try
    Stream.Position := 0;
    if (Edit1.Text <> '') And (FileExists(Edit1.Text)) then begin
      S := Edit1.Text;
    end else begin
      S := '!Setup.txt';
    end;
    SetValues;
    Stream.WriteBuffer(CSetupFile.Info,SizeOF(TEICSetupInfo));
    XorBuf(Stream.Memory,4,SizeOf(TEICSetupInfo));
    Stream.SaveToFile(S);
  finally Stream.Free end;
end;

procedure TForm1.GetValues;
begin
  With CSetupFile do begin
    Edit2.Text := IntToStr(Info.MakeItemIndexBase);
    Edit3.Text := BoolToStr(Info.BoServiceMode,TRUE);
    Edit4.Text := BoolToStr(Info.ViewAdmissionFailureMsg,TRUE);
    Edit5.Text := IntToStr(Info.TestLevel);
    Edit6.Text := IntToStr(Info.TestUsers);
    Edit7.Text := Info.ServerName;
    Edit8.Text := BoolToStr(Info.View1100X_Msg,TRUE);
    Edit9.Text := BoolToStr(Info.BoTestServer,TRUE);
    Edit10.Text := IntToStr(Info.TestMoney);
    Edit11.Text := Info.IP1.IP;
    Edit12.Text := IntToStr(Info.IP1.Port);
    Edit13.Text := Info.IP2.IP;
    Edit14.Text := IntToStr(Info.IP2.Port);
    Edit15.Text := Info.IP3.IP;
    Edit16.Text := IntToStr(Info.IP3.Port);
    Edit17.Text := Info.IP4.IP;
    Edit18.Text := IntToStr(Info.IP4.Port);
    Edit19.Text := IntToStr(Info.HumLimitTime);
    Edit20.Text := IntToStr(Info.MonLimitTime);
    Edit21.Text := IntToStr(Info.ZenLimitTime);
    Edit22.Text := IntToStr(Info.NpcLimitTime);
    Edit23.Text := IntToStr(Info.SocLimitTime);
    Edit24.Text := IntToStr(Info.DecLimitTime);
    Edit25.Text := IntToStr(Info.tbLimit[0]);
    Edit26.Text := IntToStr(Info.tbLimit[1]);
    Edit27.Text := IntToStr(Info.tbLimit[2]);
    Edit28.Text := IntToStr(Info.tbLimit[3]);
    Edit29.Text := IntToStr(Info.tbLimit[4]);
    Edit30.Text := IntToStr(Info.tbLimit[5]);
    Edit31.Text := IntToStr(Info.tbLimit[6]);
    Edit32.Text := IntToStr(Info.tbLimit[7]);
    Edit33.Text := Info.DSN1.IP;
    Edit34.Text := Info.DSN1.SA;
    Edit35.Text := Info.DSN1.Pass;
    Edit36.Text := Info.DSN1.DSN;
    Edit37.Text := Info.DSN2.IP;
    Edit38.Text := Info.DSN2.SA;
    Edit39.Text := Info.DSN2.Pass;
    Edit40.Text := Info.DSN2.DSN;
    Edit41.Text := FloatToStr(Info.ExtraExpRate);
    Edit42.Text := FloatToStr(Info.ExtraMoneyRate);
    Edit43.Text := FloatToStr(Info.ExtraItemRate);
    Edit44.Text := FloatToStr(Info.ExtraMonGenRate);
    Edit45.Text := IntToStr(Info.FeedLevel);
    Edit46.Text := BoolToStr(Info.BoApplyEventOption,TRUE);
    Edit89.Text := IntToStr(Info.MakeItemIndex);
    Edit59.Text := Info.PathShare;
    Edit60.Text := Info.PathGuilds;
    Edit61.Text := Info.PathGuildList;
    Edit62.Text := Info.PathShareV;
    Edit63.Text := Info.PathConLog;
    Edit64.Text := Info.PathRoot;
    Edit65.Text := Info.PathEnvir;
    Edit66.Text := Info.PathMap;
    Edit67.Text := Info.PathLogB;
    Edit68.Text := Info.PathMir3Exe;
    Edit69.Text := Info.Path631;
    Edit70.Text := Info.Path696;
    Edit71.Text := Info.ClothMan;
    Edit72.Text := Info.ClothWoMan;
    Edit73.Text := Info.Weapon;
    Edit74.Text := Info.Light;
    Edit75.Text := Info.BasicDrug;
    Edit76.Text := Info.GoldStone;
    Edit77.Text := Info.SilverStone;
    Edit78.Text := Info.SteelStone;
    Edit79.Text := Info.CopperStone;
    Edit80.Text := Info.BlackStone;
    Edit81.Text := Info.Zuma1;
    Edit82.Text := Info.Zuma2;
    Edit83.Text := Info.Zuma3;
    Edit84.Text := Info.Zuma4;
    Edit85.Text := Info.Bee;
    Edit86.Text := Info.SActorer;
    Edit87.Text := Info.WomaHorn;
    Edit88.Text := Info.ZumaPiece;
    Edit47.Text := Info.EmergencyMapName;
    Edit48.Text := IntToStr(Info.EmergencyMapX);
    Edit49.Text := IntToStr(Info.EmergencyMapY);
    Edit50.Text := Info.Warr.Map;
    Edit51.Text := IntToStr(Info.Warr.X);
    Edit52.Text := IntToStr(Info.Warr.Y);
    Edit53.Text := Info.Wizard.Map;
    Edit54.Text := IntToStr(Info.Wizard.X);
    Edit55.Text := IntToStr(Info.Wizard.Y);
    Edit56.Text := Info.Taos.Map;
    Edit57.Text := IntToStr(Info.Taos.X);
    Edit58.Text := IntToStr(Info.Taos.Y);
  end;
end;

procedure TForm1.SetValues;
begin
  With CSetupFile do begin
    Info.MakeItemIndexBase := StrToIntDef(Edit2.Text,Info.MakeItemIndexBase);
    Info.BoServiceMode := StrToBoolDef(Edit3.Text,Info.BoServiceMode);
    Info.ViewAdmissionFailureMsg := StrToBoolDef(Edit4.Text,Info.ViewAdmissionFailureMsg);
    Info.TestLevel := StrToIntDef(Edit5.Text,Info.TestLevel);
    Info.TestUsers := StrToIntDef(Edit6.Text,Info.TestUsers);
    Info.ServerName := Edit7.Text;
    Info.View1100X_Msg := StrToBoolDef(Edit8.Text,Info.View1100X_Msg);
    Info.BoTestServer := StrToBoolDef(Edit9.Text,Info.BoTestServer);
    Info.TestMoney := StrToIntDef(Edit10.Text,info.TestMoney);
    Info.IP1.IP := Edit11.Text;
    Info.IP1.Port := StrToIntDef(Edit12.Text,Info.IP1.Port);
    Info.IP2.IP := Edit13.Text;
    Info.IP2.Port := StrToIntDef(Edit14.Text,Info.IP2.Port);
    Info.IP3.IP := Edit15.Text;
    Info.IP3.Port := StrToIntDef(Edit16.Text,Info.IP3.Port);
    Info.IP4.IP := Edit17.Text;
    Info.IP4.Port := StrToIntDef(Edit18.Text,Info.IP4.Port);
    Info.HumLimitTime := StrToIntDef(Edit19.Text,Info.HumLimitTime);
    Info.MonLimitTime := StrToIntDef(Edit20.Text,Info.MonLimitTime);
    Info.ZenLimitTime := StrToIntDef(Edit21.Text,Info.ZenLimitTime);
    Info.NpcLimitTime := StrToIntDef(Edit22.Text,Info.NpcLimitTime);
    Info.SocLimitTime := StrToIntDef(Edit23.Text,Info.SocLimitTime);
    Info.DecLimitTime := StrToIntDef(Edit24.Text,Info.DecLimitTime);
    Info.tbLimit[0] := StrToIntDef(Edit25.Text,Info.tbLimit[0]);
    Info.tbLimit[1] := StrToIntDef(Edit26.Text,Info.tbLimit[1]);
    Info.tbLimit[2] := StrToIntDef(Edit27.Text,Info.tbLimit[2]);
    Info.tbLimit[3] := StrToIntDef(Edit28.Text,Info.tbLimit[3]);
    Info.tbLimit[4] := StrToIntDef(Edit29.Text,Info.tbLimit[4]);
    Info.tbLimit[5] := StrToIntDef(Edit30.Text,Info.tbLimit[5]);
    Info.tbLimit[6] := StrToIntDef(Edit31.Text,Info.tbLimit[6]);
    Info.tbLimit[7] := StrToIntDef(Edit32.Text,Info.tbLimit[7]);
    Info.DSN1.IP := Edit33.Text;
    Info.DSN1.SA := Edit34.Text;
    Info.DSN1.Pass := Edit35.Text;
    Info.DSN1.DSN := Edit36.Text;
    Info.DSN2.IP := Edit37.Text;
    Info.DSN2.SA := Edit38.Text;
    Info.DSN2.Pass := Edit39.Text;
    Info.DSN2.DSN := Edit40.Text;
    Info.ExtraExpRate := StrToFloatDef(Edit41.Text,Info.ExtraExpRate);
    Info.ExtraMoneyRate := StrToFloatDef(Edit42.Text,Info.ExtraMoneyRate);
    Info.ExtraItemRate := StrToFloatDef(Edit43.Text,Info.ExtraItemRate);
    Info.ExtraMonGenRate := StrToFloatDef(Edit44.Text,Info.ExtraMonGenRate);
    info.FeedLevel := StrToIntDef(Edit45.Text,Info.FeedLevel);
    Info.BoApplyEventOption := StrToBoolDef(Edit46.Text,Info.BoApplyEventOption);
    Info.MakeItemIndex := StrToIntDef(Edit89.Text,Info.MakeItemIndex);
    Info.PathShare := Edit59.Text;
    Info.PathGuilds := Edit60.Text;
    Info.PathGuildList := Edit61.Text;
    Info.PathShareV := Edit62.Text;
    Info.PathConLog := Edit63.Text;
    Info.PathRoot := Edit64.Text;
    Info.PathEnvir := Edit65.Text;
    Info.PathMap := Edit66.Text;
    Info.PathLogB := Edit67.Text;
    Info.PathMir3Exe := Edit68.Text;
    Info.Path631 := Edit69.Text;
    Info.Path696 := Edit70.Text;
    Info.ClothMan := Edit71.Text;
    Info.ClothWoMan := Edit72.Text;
    Info.Weapon := Edit73.Text;
    Info.Light := Edit74.Text;
    Info.BasicDrug := Edit75.Text;
    Info.GoldStone := Edit76.Text;
    Info.SilverStone := Edit77.Text;
    Info.SteelStone := Edit78.Text;
    Info.CopperStone := Edit79.Text;
    Info.BlackStone := Edit80.Text;
    Info.Zuma1 := Edit81.Text;
    Info.Zuma2 := Edit82.Text;
    Info.Zuma3 := Edit83.Text;
    Info.Zuma4 := Edit84.Text;
    Info.Bee := Edit85.Text;
    Info.SActorer := Edit86.Text;
    Info.WomaHorn := Edit87.Text;
    Info.ZumaPiece := Edit88.Text;
    Info.EmergencyMapName := Edit47.Text;
    Info.EmergencyMapX := StrToIntDef(Edit48.Text,Info.EmergencyMapX);
    Info.EmergencyMapY := StrToIntDef(Edit49.Text,Info.EmergencyMapY);
    Info.Warr.Map := Edit50.Text;
    Info.Warr.X := StrToIntDef(Edit51.Text,Info.Warr.X);
    Info.Warr.Y := StrToIntDef(Edit52.Text,Info.Warr.Y);
    Info.Wizard.Map := Edit53.Text;
    Info.Wizard.X := StrToIntDef(Edit54.Text,Info.Wizard.X);
    Info.Wizard.Y := StrToIntDef(Edit55.Text,Info.Wizard.Y);
    Info.Taos.Map := Edit56.Text;
    Info.Taos.X := StrToIntDef(Edit57.Text,Info.Taos.X);
    Info.Taos.Y := StrToIntDef(Edit58.Text,Info.Taos.Y);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  CSetupFile := TEICSetupFile.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  CSetupFile.Free;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
  if FileExists(Edit1.Text) then BitBtn2.Caption := '保存'
  else BitBtn2.Caption := '生成新 !Setup.txt 到当前目录';
end;

end.

⌨️ 快捷键说明

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