www.pudn.com > llllew.zip > FDBexpl.pas
unit FDBexpl;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Buttons,Grobal2;
type
TFrmFDBExplore=class(TForm)
ListBox1: TListBox;
EdFind: TEdit;
Label1: TLabel;
BtnAdd: TButton;
BtnDel: TButton;
ListBox2: TListBox;
BtnRebuild: TButton;
BtnBlankCount: TButton;
GroupBox1: TGroupBox;
BtnAutoClean: TButton;
Timer1: TTimer;
BtnCopyRcd: TButton;
BtnCopyNew: TButton;
CkLv1: TCheckBox;
CkLv7: TCheckBox;
CkLv14: TCheckBox;
procedure ListBox1Click(Sender : TObject);
procedure BtnDelClick(Sender : TObject);
procedure BtnRebuildClick(Sender : TObject);
procedure BtnBlankCountClick(Sender : TObject);
procedure BtnAddClick(Sender : TObject);
procedure BtnAddFromFileClick(Sender : TObject);
procedure FormCreate(Sender : TObject);
procedure BtnAutoCleanClick(Sender : TObject);
procedure Timer1Timer(Sender : TObject);
procedure BtnCopyRcdClick(Sender : TObject);
procedure BtnCopyNewClick(Sender : TObject);
procedure EdFindKeyPress(Sender: TObject; var Key: Char);
procedure FormDestroy(Sender: TObject);
private
// nClearIndex:Integer; //0x324
// nClearCount:Integer;//0x328
SList_320:TStringList;
function ClearHumanItem(var ChrRecord: THumDataInfo):Boolean;
{ Private declarations }
public
{ Public declarations }
end ;
var
FrmFDBExplore: TFrmFDBExplore;
{This file is generated by DeDe Ver 3.50.02 Copyright (c) 1999-2002 DaFixer}
implementation
uses HumDB, newchr, UsrSoc, frmcpyrcd, DBSMain, DBShare;
{$R *.DFM}
procedure TFrmFDBExplore.EdFindKeyPress(Sender: TObject; var Key: Char);
//0x004A55F4
var
I: Integer;
sChrName:String;
begin
if Key <> #13 then exit;
sChrName:=Trim(EdFind.Text);
if sChrName = '' then exit;
ListBox1.Clear;
ListBox2.Clear;
try
if HumDataDB.OpenEx then begin
HumDataDB.Find(sChrName,ListBox1.Items);
for I := 0 to ListBox1.Items.Count - 1 do begin
ListBox2.Items.Add(IntToStr(Integer(ListBox1.Items.Objects[i])));
end;
end;
finally
HumDataDB.Close;
end;
end;
procedure TFrmFDBExplore.ListBox1Click(Sender : TObject);
//0x004A5790
begin
ListBox2.ItemIndex:=ListBox1.ItemIndex;
(*
***** TRY
|
004A57BB 64FF30 push dword ptr fs:[eax]
004A57BE 648920 mov fs:[eax], esp
* Reference to FrmFDBExplore
|
004A57C1 8B45FC mov eax, [ebp-$04]
* Reference to control TFrmFDBExplore.ListBox1 : TListBox
|
004A57C4 8B80D0020000 mov eax, [eax+$02D0]
* Reference to: stdctrls.TCustomListBox.GetItemIndex(TCustomListBox):Integer;
|
004A57CA E87966F8FF call 0042BE48
004A57CF 8BD0 mov edx, eax
* Reference to FrmFDBExplore
|
004A57D1 8B45FC mov eax, [ebp-$04]
* Reference to control TFrmFDBExplore.ListBox2 : TListBox
|
004A57D4 8B80E8020000 mov eax, [eax+$02E8]
* Reference to: stdctrls.TCustomListBox.SetItemIndex(TCustomListBox;Integer);
|
004A57DA E8A566F8FF call 0042BE84
004A57DF C745F8FFFFFFFF mov dword ptr [ebp-$08], $FFFFFFFF
* Reference to pointer to GlobalVar_004ADBD4
|
004A57E6 A1F8C24A00 mov eax, dword ptr [$004AC2F8]
004A57EB 8B00 mov eax, [eax]
* Reference to: Unit_0048A084.Proc_0048A304
|
004A57ED E8124BFEFF call 0048A304
004A57F2 84C0 test al, al
004A57F4 0F848A000000 jz 004A5884
* Reference to FrmFDBExplore
|
004A57FA 8B45FC mov eax, [ebp-$04]
* Reference to control TFrmFDBExplore.ListBox1 : TListBox
|
004A57FD 8B80D0020000 mov eax, [eax+$02D0]
* Reference to: stdctrls.TCustomListBox.GetItemIndex(TCustomListBox):Integer;
|
004A5803 E84066F8FF call 0042BE48
004A5808 8BD0 mov edx, eax
004A580A 8D8D90F3FFFF lea ecx, [ebp+$FFFFF390]
* Reference to FrmFDBExplore
|
004A5810 8B45FC mov eax, [ebp-$04]
* Reference to control TFrmFDBExplore.ListBox1 : TListBox
|
004A5813 8B80D0020000 mov eax, [eax+$02D0]
* Reference to field TListBox.Items : TStrings
|
004A5819 8B80F0010000 mov eax, [eax+$01F0]
004A581F 8B18 mov ebx, [eax]
* Reference to method TStrings.Strings [ Index()
|
004A5821 FF530C call dword ptr [ebx+$0C]
004A5824 8B9590F3FFFF mov edx, [ebp+$FFFFF390]
* Reference to pointer to GlobalVar_004ADBD4
|
004A582A A1F8C24A00 mov eax, dword ptr [$004AC2F8]
004A582F 8B00 mov eax, [eax]
* Reference to: Unit_0048A084.Proc_0048B534
|
004A5831 E8FE5CFEFF call 0048B534
004A5836 8945F8 mov [ebp-$08], eax
004A5839 837DF800 cmp dword ptr [ebp-$08], +$00
004A583D 7C39 jl 004A5878
004A583F 8D8D94F3FFFF lea ecx, [ebp+$FFFFF394]
* Reference to pointer to GlobalVar_004ADBD4
|
004A5845 A1F8C24A00 mov eax, dword ptr [$004AC2F8]
004A584A 8B00 mov eax, [eax]
004A584C 8B55F8 mov edx, [ebp-$08]
* Reference to: Unit_0048A084.Proc_0048B320
|
004A584F E8CC5AFEFF call 0048B320
* Reference to FrmFDBExplore
|
004A5854 8B45FC mov eax, [ebp-$04]
004A5857 8DB5B0F3FFFF lea esi, [ebp+$FFFFF3B0]
* Reference to field TFrmFDBExplore.OFFS_032C
|
004A585D 8DB82C030000 lea edi, [eax+$032C]
004A5863 B910030000 mov ecx, $00000310
004A5868 F3 rep
004A5869 A5 movsd
004A586A 8D45F4 lea eax, [ebp-$0C]
004A586D 8D95A0F3FFFF lea edx, [ebp+$FFFFF3A0]
* Reference to: system.@LStrFromString(String;String;ShortString;ShortString);
| or: system.@WStrFromString(WideString;WideString;ShortString;ShortString);
|
004A5873 E8ACE5F5FF call 00403E24
* Reference to pointer to GlobalVar_004ADBD4
|
004A5878 A1F8C24A00 mov eax, dword ptr [$004AC2F8]
004A587D 8B00 mov eax, [eax]
* Reference to: Unit_0048A084.Proc_0048A400
|
004A587F E87C4BFEFF call 0048A400
* Reference to TFrmFDBViewer instance
|
004A5884 A1ECBF4A00 mov eax, dword ptr [$004ABFEC]
004A5889 8B00 mov eax, [eax]
* Reference to field TFrmFDBViewer.Visible : Boolean
|
004A588B 80784700 cmp byte ptr [eax+$47], $00
004A588F 747D jz 004A590E
004A5891 837DF800 cmp dword ptr [ebp-$08], +$00
004A5895 7C77 jl 004A590E
* Reference to TFrmFDBViewer instance
|
004A5897 A1ECBF4A00 mov eax, dword ptr [$004ABFEC]
004A589C 8B00 mov eax, [eax]
004A589E 8B55F8 mov edx, [ebp-$08]
* Reference to field TFrmFDBViewer.OFFS_02F8
|
004A58A1 8990F8020000 mov [eax+$02F8], edx
* Reference to FrmFDBExplore
|
004A58A7 8B45FC mov eax, [ebp-$04]
* Reference to control TFrmFDBExplore.ListBox1 : TListBox
|
004A58AA 8B80D0020000 mov eax, [eax+$02D0]
* Reference to: stdctrls.TCustomListBox.GetItemIndex(TCustomListBox):Integer;
|
004A58B0 E89365F8FF call 0042BE48
004A58B5 8BD0 mov edx, eax
004A58B7 8D8D8CF3FFFF lea ecx, [ebp+$FFFFF38C]
* Reference to FrmFDBExplore
|
004A58BD 8B45FC mov eax, [ebp-$04]
* Reference to control TFrmFDBExplore.ListBox1 : TListBox
|
004A58C0 8B80D0020000 mov eax, [eax+$02D0]
* Reference to field TListBox.Items : TStrings
|
004A58C6 8B80F0010000 mov eax, [eax+$01F0]
004A58CC 8B18 mov ebx, [eax]
* Reference to method TStrings.Strings [ Index()
|
004A58CE FF530C call dword ptr [ebx+$0C]
004A58D1 8B958CF3FFFF mov edx, [ebp+$FFFFF38C]
* Reference to TFrmFDBViewer instance
|
004A58D7 A1ECBF4A00 mov eax, dword ptr [$004ABFEC]
004A58DC 8B00 mov eax, [eax]
004A58DE 05FC020000 add eax, +$000002FC
* Reference to: system.@LStrAsg;
|
004A58E3 E86CE3F5FF call 00403C54
* Reference to TFrmFDBViewer instance
|
004A58E8 A1ECBF4A00 mov eax, dword ptr [$004ABFEC]
004A58ED 8B00 mov eax, [eax]
* Reference to field TFrmFDBViewer.OFFS_0300
|
004A58EF 8DB800030000 lea edi, [eax+$0300]
004A58F5 8DB594F3FFFF lea esi, [ebp+$FFFFF394]
004A58FB B917030000 mov ecx, $00000317
004A5900 F3 rep
004A5901 A5 movsd
* Reference to TFrmFDBViewer instance
|
004A5902 A1ECBF4A00 mov eax, dword ptr [$004ABFEC]
004A5907 8B00 mov eax, [eax]
* Reference to : TFrmFDBViewer._PROC_0049A054()
|
004A5909 E84647FFFF call 0049A054
004A590E 33C0 xor eax, eax
004A5910 5A pop edx
004A5911 59 pop ecx
004A5912 59 pop ecx
004A5913 648910 mov fs:[eax], edx
****** FINALLY
|
* Possible String Reference to: '_^[]ËUĜVWEJ'
|
004A5916 683B594A00 push $004A593B
004A591B 8D858CF3FFFF lea eax, [ebp+$FFFFF38C]
004A5921 BA02000000 mov edx, $00000002
* Reference to: system.@LStrArrayClr;
|
004A5926 E8F9E2F5FF call 00403C24
004A592B 8D45F4 lea eax, [ebp-$0C]
* Reference to: system.@LStrClr(String;String);
|
004A592E E8CDE2F5FF call 00403C00
004A5933 C3 ret
* Reference to: system.@HandleFinally;
|
004A5934 E9DBDCF5FF jmp 00403614
004A5939 EBE0 jmp 004A591B
****** END
|
004A593B 5F pop edi
004A593C 5E pop esi
004A593D 5B pop ebx
004A593E 8BE5 mov esp, ebp
004A5940 5D pop ebp
004A5941 C3 ret
*)
end;
procedure TFrmFDBExplore.BtnDelClick(Sender : TObject);
//0x004A5A44
var
nIndex:Integer;
begin
if ListBox1.ItemIndex <= -1 then exit;
nIndex:= Integer(ListBox1.Items.Objects[ListBox1.ItemIndex]);
if MessageDlg('Ƿȷɾ ' + IntToStr(nIndex) + ' ',mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin
try
if HumDataDB.Open then begin
HumDataDB.Delete(nIndex);
end;
finally
HumChrDB.Close;
end;
end;
end;
procedure TFrmFDBExplore.BtnRebuildClick(Sender : TObject);//0x004A5B64
begin
if MessageDlg('ؽݿУݿֹͣǷȷϼ',mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin
boAutoClearDB:=False;
HumDataDB.Rebuild();
MessageDlg('ݿؽɣ',mtInformation, [mbOK], 0);
end;
end;
procedure TFrmFDBExplore.BtnBlankCountClick(Sender : TObject);
//0x004A5C40
begin
ListBox1.Clear;
ListBox2.Clear;
end;
procedure TFrmFDBExplore.BtnAddClick(Sender : TObject);
var
sChrName:String;
begin
FrmNewChr.sub_49BD60(sChrName);
FrmUserSoc.NewChrData(sChrName,0,0,0);
end;
procedure TFrmFDBExplore.BtnAddFromFileClick(Sender : TObject);
begin
(*
004A5D30 55 push ebp
004A5D31 8BEC mov ebp, esp
004A5D33 83C4F8 add esp, -$08
004A5D36 8955F8 mov [ebp-$08], edx
004A5D39 8945FC mov [ebp-$04], eax
004A5D3C 59 pop ecx
004A5D3D 59 pop ecx
004A5D3E 5D pop ebp
004A5D3F C3 ret
*)
end;
procedure TFrmFDBExplore.FormCreate(Sender : TObject);
//0x004A55B8
begin
Timer1.Interval:=dwInterval;
Timer1.Enabled:=True;
SList_320:=TStringList.Create;
g_nClearIndex:=0;
g_nClearCount:=0;
g_nClearItemIndexCount:=0;
end;
procedure TFrmFDBExplore.BtnAutoCleanClick(Sender : TObject);
//0x004A5D40
begin
boAutoClearDB:=not boAutoClearDB;
if boAutoClearDB then BtnAutoClean.Caption:='Զ'
else BtnAutoClean.Caption:='ֹͣ';
end;
procedure TFrmFDBExplore.Timer1Timer(Sender : TObject);
//0x004A5EDC
function GetDateTime(wM,wD:Word):TDateTime;
var
Year, Month, Day: Word;
i:integer;
begin
DecodeDate(Now,Year, Month, Day);
for I := 0 to wM - 1 do begin
if Month > 1 then Dec(Month)
else begin
Month:=12;
Dec(Year);
end;
end;
for I := 0 to wD - 1 do begin
if Day > 1 then Dec(Day)
else begin
Day:=28;
if Month > 1 then Dec(Month)
else begin
Month:=12;
Dec(Year);
end;
end;
end;
Result:=EncodeDate(Year,Month,Day);
end;
var
w32,wDayCount1,wLevel1,w38,wDayCount7,wLevel7,w3E,wDayCount14,wLevel14:Word;
dt20,dt28,dt30:TDateTime;
n8,n10:Integer;
sHumName:String;
ChrRecord:THumDataInfo;
begin
if not boAutoClearDB then exit;
w32:=0;
w38:=0;
w3E:=0;
wDayCount1:=0;
wDayCount7:=0;
wDayCount14:=0;
wLevel1:=0;
wLevel7:=0;
wLevel14:=0;
if CkLv1.Checked then begin
w32:=nMonth1;
wDayCount1:=nDay1;
wLevel1:=nLevel1;
end;
if CkLv7.Checked then begin
w38:=nMonth2;
wDayCount7:=nDay2;
wLevel7:=nLevel2;
end;
if CkLv14.Checked then begin
w3E:=nMonth3;
wDayCount14:=nDay3;
wLevel14:=nLevel3;
end;
dt20:=GetDateTime(w32,wDayCount1);
dt28:=GetDateTime(w38,wDayCount7);
dt30:=GetDateTime(w3E,wDayCount14);
g_nClearRecordCount:=0;
sHumName:='';
try
if HumDataDB.Open then begin
g_nClearRecordCount:= HumDataDB.Count;
if g_nClearIndex < g_nClearRecordCount then begin
n8:=HumDataDB.Get(g_nClearIndex,ChrRecord);
if n8 >= 0 then begin
if ((ChrRecord.Header.dCreateDate < dt20) and (ChrRecord.Data.Abil.Level <= wLevel1)) or
((ChrRecord.Header.dCreateDate < dt28) and (ChrRecord.Data.Abil.Level <= wLevel7)) or
((ChrRecord.Header.dCreateDate < dt30) and (ChrRecord.Data.Abil.Level <= wLevel14)) then begin
n10:=n8;
sHumName:=ChrRecord.Header.sName;
HumDataDB.Delete(n10);
Inc(g_nClearCount);
end else begin
if ClearHumanItem(ChrRecord) then begin
HumDataDB.Update(g_nClearIndex,ChrRecord);
end;
end;
Inc(g_nClearIndex);
end;
end else g_nClearIndex:=0;
end;
finally
HumDataDB.Close;
end;
if sHumName <> '' then begin
FrmDBSrv.DelHum(sHumName);
end;
// FrmDBSrv.LbAutoClean.Caption:=IntToStr(g_nClearIndex) + '/' + IntToStr(g_nClearCount) + '/' + IntToStr(g_nClearRecordCount);
end;
function TFrmFDBExplore.ClearHumanItem(var ChrRecord:THumDataInfo):Boolean;
var
I: Integer;
HumItems:pTHumItems;
UserItem:pTUserItem;
Item:pTUserItem;
SaveList:TStringList;
ClearList:TList;
sFileName:String;
sMsg:String;
begin
Result:=False;
ClearList:=nil;
HumItems:=@ChrRecord.Data.HumItems;
for I := Low(THumItems) to high(THumItems) do begin
UserItem:=@HumItems[I];
if UserItem.wIndex <= 0 then Continue;
if InClearMakeIndexList(UserItem.MakeIndex) then begin
if ClearList = nil then ClearList:=TList.Create;
New(Item);
Item^:=UserItem^;
ClearList.Add(Item);
UserItem.wIndex:=0;
Result:=True;
end;
end;
for I := Low(THumAddItems) to high(THumAddItems) do begin
UserItem:=@ChrRecord.Data.HumAddItems[I];
if UserItem.wIndex <= 0 then Continue;
if InClearMakeIndexList(UserItem.MakeIndex) then begin
if ClearList = nil then ClearList:=TList.Create;
New(Item);
Item^:=UserItem^;
ClearList.Add(Item);
UserItem.wIndex:=0;
Result:=True;
end;
end;
for I := Low(TBagItems) to high(TBagItems) do begin
UserItem:=@ChrRecord.Data.BagItems[I];
if UserItem.wIndex <= 0 then Continue;
if InClearMakeIndexList(UserItem.MakeIndex) then begin
if ClearList = nil then ClearList:=TList.Create;
New(Item);
Item^:=UserItem^;
ClearList.Add(Item);
UserItem.wIndex:=0;
Result:=True;
end;
end;
for I := Low(TStorageItems) to high(TStorageItems) do begin
UserItem:=@ChrRecord.Data.StorageItems[I];
if UserItem.wIndex <= 0 then Continue;
if InClearMakeIndexList(UserItem.MakeIndex) then begin
if ClearList = nil then ClearList:=TList.Create;
New(Item);
Item^:=UserItem^;
ClearList.Add(Item);
UserItem.wIndex:=0;
Result:=True;
end;
end;
if Result then begin
Inc(g_nClearItemIndexCount,ClearList.Count);
SaveList:=TStringList.Create;
sFileName:='ClearItemLog.txt';
if FileExists(sFileName) then begin
SaveList.LoadFromFile(sFileName);
end;
for I := 0 to ClearList.Count - 1 do begin
UserItem:=ClearList.Items[I];
sMsg:=ChrRecord.Data.sChrName + #9 + IntToStr(UserItem.wIndex) + #9 + IntToStr(UserItem.MakeIndex);
SaveList.Insert(0,sMsg);
Dispose(UserItem);
end;
SaveList.SaveToFile(sFileName);
SaveList.Free;
end;
if ClearList <> nil then ClearList.Free;
end;
procedure TFrmFDBExplore.BtnCopyRcdClick(Sender : TObject);
//0x004A6220
var
sSrcChrName,sDestChrName,sUserID:String;
begin
if not FrmCopyRcd.sub_49C09C then exit;
sSrcChrName:=FrmCopyRcd.s2F0;
sDestChrName:=FrmCopyRcd.s2F4;
sUserID:=FrmCopyRcd.s2F8;
if FrmDBSrv.CopyHumData(sSrcChrName,sDestChrName,sUserID) then
ShowMessage(sSrcChrName + ' -> ' + sDestChrName + ' Ƴɹ');
end;
procedure TFrmFDBExplore.BtnCopyNewClick(Sender : TObject);
//0x004A631C
var
sSrcChrName,sDestChrName,sUserID:String;
begin
if not FrmCopyRcd.sub_49C09C then exit;
sSrcChrName:=FrmCopyRcd.s2F0;
sDestChrName:=FrmCopyRcd.s2F4;
sUserID:=FrmCopyRcd.s2F8;
if FrmUserSoc.NewChrData(sDestChrName,0,0,0) and
FrmDBSrv.CopyHumData(sSrcChrName,sDestChrName,sUserID) then
ShowMessage(sSrcChrName + ' -> ' + sDestChrName + ' Ƴɹ');
end;
procedure TFrmFDBExplore.FormDestroy(Sender: TObject);
begin
SList_320.Free;
end;
end.