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

📄 unit_main.pas

📁 传奇3封外挂客户端+登陆器+配置器源码............................
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit Unit_Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, SUISkinForm, ExtCtrls, SUIForm, StdCtrls, Mask, SUIEdit,
  SUIButton, SUIURLLabel, jpeg, SUIImagePanel, SUIDlg, ExtDlgs,
  SUISideChannel, SUIPageControl, SUITabControl, SUITitleBar,
  SUIComboBox, SUIListBox,SUIThemes,Unit_RcFile, ImgList, ComCtrls,
  SUIListView;

type
  TExeInfo=packed record
    ip:String[15];
    Port:integer;
    Caption:String[40];
    Web:String[40];
    ExeName:String[20];
  end;
  TFrmMain = class(TForm)
    suiForm1: TsuiForm;
    OpenPictureDialog: TOpenPictureDialog;
    suiMessageDialog1: TsuiMessageDialog;
    suiImagePanel1: TsuiImagePanel;
    suiButton1: TsuiButton;
    suiButton2: TsuiButton;
    suiButton3: TsuiButton;
    suiPageControl1: TsuiPageControl;
    suiTabSheet1: TsuiTabSheet;
    suiTabSheet2: TsuiTabSheet;
    suiImagePanel2: TsuiImagePanel;
    Label3: TLabel;
    Label8: TLabel;
    Label4: TLabel;
    Label6: TLabel;
    Label1: TLabel;
    Label11: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Edit_ServerName: TsuiEdit;
    Edit_ServerPort: TsuiEdit;
    Edit_RegSvrPort: TsuiEdit;
    Edit_ServerCaption: TsuiEdit;
    Edit_ServerIp: TsuiMaskEdit;
    Edit_RegSvrIp: TsuiMaskEdit;
    Edit_ServerAddres: TsuiEdit;
    suiPanel1: TsuiPanel;
    List_Server: TsuiListBox;
    Bt_Add: TsuiButton;
    Bt_Del: TsuiButton;
    Bt_Edit: TsuiButton;
    Bt_Up: TsuiButton;
    Bt_Down: TsuiButton;
    Panel1: TPanel;
    Image_exe: TImage;
    suiButton4: TsuiButton;
    suiButton5: TsuiButton;
    Label5: TLabel;
    Edit_ExeTitle: TsuiEdit;
    Combo_ExeType: TsuiComboBox;
    Label12: TLabel;
    suiTabSheet3: TsuiTabSheet;
    suiPanel2: TsuiPanel;
    List_UpdateServer: TsuiListBox;
    suiImagePanel3: TsuiImagePanel;
    suiImagePanel4: TsuiImagePanel;
    Label13: TLabel;
    Edit_ExeVer: TsuiEdit;
    suiPanel3: TsuiPanel;
    Label14: TLabel;
    Edit_UpdateServerName: TsuiEdit;
    Label15: TLabel;
    Edit_UpdateServerUrl: TsuiEdit;
    Bt_AddUpdate: TsuiButton;
    Bt_DelUpdate: TsuiButton;
    Bt_EditUpdate: TsuiButton;
    suiTitleBar_DEMO: TsuiTitleBar;
    Image_Default: TImage;
    suiTabSheet4: TsuiTabSheet;
    suiPanel4: TsuiPanel;
    Edit_notice: TsuiEdit;
    List_Notice: TsuiListBox;
    suiButton6: TsuiButton;
    Label16: TLabel;
    Label17: TLabel;
    Panel2: TPanel;
    Radio1: TRadioButton;
    Radio2: TRadioButton;
    Radio3: TRadioButton;
    Radio4: TRadioButton;
    Radio5: TRadioButton;
    Radio6: TRadioButton;
    Radio7: TRadioButton;
    suiButton7: TsuiButton;
    suiButton8: TsuiButton;
    Edit_ChekVer: TsuiEdit;
    Label18: TLabel;
    Edit_ExeName: TsuiEdit;
    Label2: TLabel;
    Check_Exit: TsuiCheckBox;
    Edit_Mir3ExitUrl: TsuiEdit;
    ImageList1: TImageList;
    List_CMList: TListBox;
    procedure suiButton1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    Function AddtoFile(NewFile:String):Boolean;
    procedure suiButton3Click(Sender: TObject);
    procedure ReadExe(DestMemo:TMemoryStream);
    procedure Edit_ServerIpExit(Sender: TObject);
    procedure Edit_RegSvrIpExit(Sender: TObject);
    procedure Bt_AddClick(Sender: TObject);
    procedure Bt_DelClick(Sender: TObject);
    procedure Bt_EditClick(Sender: TObject);
    procedure Bt_UpClick(Sender: TObject);
    procedure Bt_DownClick(Sender: TObject);
    procedure Combo_ExeTypeChange(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure List_ServerClick(Sender: TObject);
    procedure List_ServerKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure suiButton5Click(Sender: TObject);
    procedure suiButton4Click(Sender: TObject);
    procedure Bt_AddUpdateClick(Sender: TObject);
    procedure Bt_DelUpdateClick(Sender: TObject);
    procedure Bt_EditUpdateClick(Sender: TObject);
    procedure List_UpdateServerClick(Sender: TObject);
    procedure List_UpdateServerKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure List_NoticeDrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    procedure suiButton6Click(Sender: TObject);
    procedure suiButton7Click(Sender: TObject);
    procedure suiButton8Click(Sender: TObject);
    procedure List_NoticeClick(Sender: TObject);
    procedure Check_ExitClick(Sender: TObject);
  private
    { Private declarations }
  public
    procedure Show_Message(text:String;Icon:TsuiIconType);
    { Public declarations }
  end;

var
  FrmMain: TFrmMain;
  ExeStream:TMemoryStream;
  Server_Info,Update_Info:TList;
  AppPath:String;
implementation


{$R *.dfm}
procedure encodetxttoMemo(sourceMemo:TMemoryStream;key0,key1,key2,key3,keycrc:integer;var DestMemo:TMemoryStream);
type
  top_key=record
    case integer of
      0:(i:integer);
      1:(b:array[0..3] of byte);
  end;
var
  topkey:top_key;
  j,k,i:integer;
  bufs:array[0..3] of byte;
  buf,dbuf:byte;
begin
  topkey.i:=sourceMemo.Size;
  k:=0;
  destmemo.SetSize(topkey.i+8);
  bufs[0]:=topkey.b[3] xor key0;
  bufs[1]:=topkey.b[2] xor key1;
  bufs[2]:=topkey.b[1] xor key2;
  bufs[3]:=topkey.b[0] xor key3;
  destmemo.Position:=0;
  destmemo.Write(bufs,4);
  destmemo.Write(k,4);
  sourceMemo.Position:=0;
  for i:=0 to sourceMemo.Size-1 do
  begin
    sourceMemo.Read(buf,1);
    dbuf:=buf xor (bufs[0]+i) xor (bufs[1]+i) xor (bufs[2]+i) xor (bufs[3]+i);
    destmemo.Write(dbuf,1);
    k:=k+(dbuf+1)*i;
  end;
  k:=k xor keycrc;
  destmemo.Position:=4;
  destmemo.Write(k,4);
  DestMemo.Position:=0;
end;


procedure TFrmMain.suiButton1Click(Sender: TObject);
var
  Rc:TRcFile;
  SourceFileName,NewFileName:String;
  ServerIp,RegSvrIp:String;
  NoticeMemo,CMlistMemo:TMemoryStream;
  i:integer;
begin
  for i:=0 to List_CMList.Items.Count-1 do
  begin
    if copy(List_CMList.Items[i],1,5)='#1412' then List_CMList.Items[i]:='#1412 '+Edit_ChekVer.Text;
    if Check_Exit.Checked then  if copy(List_CMList.Items[i],1,5)='#1077' then List_CMList.Items[i]:='#1077 '+Edit_Mir3ExitUrl.Text;
  end;
  NoticeMemo:=TMemoryStream.create;
  CMlistMemo:=TMemoryStream.create;
  List_Notice.Items.SaveToStream(NoticeMemo);
  List_CMList.Items.SaveToStream(CMlistMemo);
  ServerIp:=StrToIp(Edit_ServerIp.Text);
  RegSvrIp:=StrToIp(Edit_RegSvrIp.Text);
  NewFileName:=ExtractFilePath(Application.ExeName)+Edit_ExeName.Text+'.exe';
  Rc:=TRcFile.Create;
  Rc.FileName:=AppPath+'LoginManger.Rc';
  Rc.CreateRc(Edit_ExeTitle.Text,Edit_ExeVer.Text,Combo_ExeType.ItemIndex,Server_Info,Update_Info,Image_exe.Picture,NoticeMemo,CMlistMemo);
  Rc.Free;
  NoticeMemo.Free;
  CMlistMemo.Free;
  AddtoFile(NewFileName);
  suiMessageDialog1.Caption:='系统信息';
  suiMessageDialog1.Text:='生成完毕,请发布给玩家使用!';
  suiMessageDialog1.IconType:=suiInformation;
  suiMessageDialog1.ShowModal;
end;

procedure TFrmMain.FormCreate(Sender: TObject);
var
  Rc:TRcFile;
  Exe_Title,Exe_Ver:string;
  Exe_type:word;
  i:integer;
  Pic_Memo:TMemoryStream;
  NoticeMemo,CMlistMemo:TMemoryStream;
begin
  Pic_Memo:=TMemoryStream.Create;
  NoticeMemo:=TMemoryStream.create;
  CMlistMemo:=TMemoryStream.create;
  Combo_ExeType.ItemIndex:=0;
  Server_Info:=TList.Create;
  Update_Info:=TList.Create;
  AppPath:=ExtractFilePath(Application.ExeName);
  Rc:=TRcFile.Create;
  Rc.FileName:=AppPath+'LoginManger.Rc';
  if Rc.ReadRc(Exe_Title,Exe_Ver,Exe_type,Server_Info,Update_Info,Pic_Memo,NoticeMemo,CMlistMemo) then
  begin
    Edit_ExeTitle.Text:=Exe_Title;
    Edit_ExeVer.Text:=Exe_Ver;
    Combo_ExeType.ItemIndex:=Exe_type;
    case Combo_ExeType.ItemIndex of
      0:suiTitleBar_DEMO.UIStyle:=MacOS;
      1:suiTitleBar_DEMO.UIStyle:=WinXP;
      2:suiTitleBar_DEMO.UIStyle:=Protein;
      3:suiTitleBar_DEMO.UIStyle:=FromThemeFile;
      4:suiTitleBar_DEMO.UIStyle:=BlueGlass;
    end;
    suiTitleBar_DEMO.Buttons.Items[0].ButtonType:=suiClose;
    suiTitleBar_DEMO.Buttons.Items[0].ButtonType:=suiCustom;
    Pic_Memo.Position:=0;
    Image_exe.Picture.Graphic.LoadFromStream(Pic_Memo);
    NoticeMemo.Position:=0;
    List_Notice.Items.LoadFromStream(NoticeMemo);
  end;
  Pic_Memo.Free;
  NoticeMemo.Free;
  CMlistMemo.Free;
  for i:=0 to Server_Info.Count-1 do
  begin
    List_Server.Items.Add(PServerInfo(Server_Info[i]).ServerName);
  end;
  for i:=0 to Update_Info.Count-1 do
  begin
    List_UpdateServer.Items.Add(PUpdateInfo(Update_Info[i]).ServerName);
  end;
  suiPageControl1.ActivePageIndex:=0;
end;

Function TFrmMain.AddtoFile(NewFile:String):Boolean;
var
  Source_Memo,Rc_Memo,New_Memo:TMemoryStream;
  SourceSize,RcSize,NewFileSize:integer;
  Rc:TRcFile;
  NoticeMemo,CMlistMemo:TMemoryStream;
  E_NoticeMemo,E_CMlistMemo:TMemoryStream;
begin
  NoticeMemo:=TMemoryStream.create;
  CMlistMemo:=TMemoryStream.create;
  E_NoticeMemo:=TMemoryStream.create;
  E_CMlistMemo:=TMemoryStream.create;
  List_Notice.Items.SaveToStream(NoticeMemo);
  List_CMList.Items.SaveToStream(CMlistMemo);
  encodetxttoMemo(NoticeMemo,$F0,$39,$AB,$8E,$9FDE1A93,E_NoticeMemo);
  encodetxttoMemo(CMlistMemo,$F0,$39,$AB,$8E,$9FDE1A93,E_CMlistMemo);
  NoticeMemo.Free;
  CMlistMemo.Free;
  try
    Rc_Memo:=TMemoryStream.create;
    New_Memo:=TMemoryStream.create;
    Rc:=TRcFile.Create;
    Rc.FileName:=AppPath+'LoginManger.Rc';
    Source_Memo:=TMemoryStream.create;
    Rc.EncodetoMem(Edit_ExeTitle.Text,Edit_ExeVer.Text,Combo_ExeType.ItemIndex,Server_Info,Update_Info,Image_exe.Picture,E_NoticeMemo,E_CMlistMemo,Rc_Memo);
    Rc.Free;
    ReadExe(Source_Memo);
    SourceSize:=Source_Memo.Size;
    RcSize:=Rc_Memo.Size;
    NewFileSize:=SourceSize+RcSize;//计算资源大小,并写入辅程尾部
    Source_Memo.Position:=0;
    Rc_Memo.Position:=0;
    New_Memo.SetSize(NewFileSize);
    New_Memo.Position:=0;
    New_Memo.CopyFrom(Source_Memo,SourceSize);
    New_Memo.Seek(sourceSize,soFromBeginning);
    New_Memo.CopyFrom(Rc_Memo,RcSize);
    New_Memo.SaveToFile(NewFile);
    Source_Memo.Free;
    Rc_Memo.Free;
    New_Memo.Free;
    E_NoticeMemo.Free;
    E_CMlistMemo.Free;
  except
    Result:=False;
    Exit;
  end;
  Result:=True;
end;


procedure TFrmMain.suiButton3Click(Sender: TObject);
begin
  Close;
end;

procedure TFrmMain.ReadExe(DestMemo:TMemoryStream);
var
  Source:TMemoryStream;
  SourceSize,exeSize:integer;
begin

⌨️ 快捷键说明

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