📄 humdb.pas
字号:
[hd.BonusAbil.AC, hd.BonusAbil.MAC, hd.BonusAbil.DC, hd.BonusAbil.MC,
hd.BonusAbil.SC, hd.BonusAbil.HP, hd.BonusAbil.MP, hd.BonusAbil.Hit, hd.BonusAbil.Speed,
HumanRCD.Header.sChrName]));
try
dbQry.Execute;
except
Result := False;
OutMainMessage('[Exception] TFileDB.UpdateRecord (4)');
end;
dbQry.SQL.Clear;
dbQry.SQL.Add(format('DELETE FROM TBL_QUEST WHERE FLD_CHARNAME=''%s''',
[HumanRCD.Header.sChrName]));
// Delete Quest Data
try
dbQry.Execute;
except
Result := False;
OutMainMessage('[Exception] TFileDB.UpdateRecord (6)');
end;
try
dbQry.SQL.Clear;
dbQry.SQL.Text := 'INSERT INTO TBL_QUEST (FLD_CHARNAME, FLD_QUESTOPENINDEX, FLD_QUESTFININDEX, FLD_QUEST) '+
'VALUES(:FLD_CHARNAME, :FLD_QUESTOPENINDEX, :FLD_QUESTFININDEX, :FLD_QUEST)';
dbQry.ParamByName('FLD_CHARNAME').Value := HumanRCD.Header.sChrName;
sTmp := '';
for i:=0 to High(HumanRCD.Data.QuestUnitOpen) do
sTmp := sTmp + IntToStr(HumanRCD.Data.QuestUnitOpen[i]) + '/';
dbQry.ParamByName('FLD_QUESTOPENINDEX').Value := sTmp;
sTmp := '';
for i:=0 to High(HumanRCD.Data.QuestUnit) do
sTmp := sTmp + IntToStr(HumanRCD.Data.QuestUnit[i]) + '/';
dbQry.ParamByName('FLD_QUESTFININDEX').Value := sTmp;
sTmp := '';
for i:=0 to High(HumanRCD.Data.QuestFlag) do
sTmp := sTmp + IntToStr(HumanRCD.Data.QuestFlag[i]) + '/';
dbQry.ParamByName('FLD_QUEST').Value := sTmp;
dbQry.Execute;
except
Result := False;
OutMainMessage('[Exception] TFileDB.UpdateRecord => TBL_QUEST!!');
end;
dbQry.SQL.Clear;
dbQry.SQL.Add(format('DELETE FROM TBL_CHARACTER_MAGIC WHERE FLD_CHARNAME=''%s''',
[HumanRCD.Header.sChrName]));
// Delete Magic Data
try
dbQry.Execute;
except
Result := False;
OutMainMessage('[Exception] TFileDB.UpdateRecord (6)');
end;
for i:=0 to High(hd.Magic) do begin
if hd.Magic[i].wMagIdx > 0 then begin
dbQry.SQL.Clear;
dbQry.SQL.Add(format('INSERT TBL_CHARACTER_MAGIC(FLD_LOGINID, FLD_CHARNAME, FLD_MAGICID, FLD_LEVEL, FLD_USEKEY, FLD_CURRTRAIN) VALUES '+
'( ''%s'', ''%s'', %d, %d, %d, %d )',
[HumanRCD.Header.sAccount, HumanRCD.Header.sChrName,
hd.Magic[i].wMagIdx, hd.Magic[i].btLevel,
hd.Magic[i].btKey,hd.Magic[i].nTranPoint]));
try
dbQry.Execute;
except
Result := False;
OutMainMessage('[Exception] TFileDB.UpdateRecord (7)');
end;
end;
end;
dbQry.SQL.Clear;
dbQry.SQL.Add(format('DELETE FROM TBL_CHARACTER_ITEM WHERE FLD_CHARNAME=''%s''',
[HumanRCD.Header.sChrName]));
// Delete Item Data
try
dbQry.Execute;
except
Result := False;
OutMainMessage('[Exception] TFileDB.UpdateRecord (8)');
end;
for i:=0 to High(hd.BagItems) do begin
if (hd.BagItems[i].wIndex > 0) and (hd.BagItems[i].MakeIndex > 0) then begin
dbQry.SQL.Clear;
dbQry.SQL.Add(format('INSERT TBL_CHARACTER_ITEM(FLD_LOGINID, FLD_CHARNAME, FLD_POSITION, FLD_MAKEINDEX, FLD_STDINDEX, FLD_DURA, FLD_DURAMAX, '+
'FLD_COUNT, FLD_COLOR, FLD_VALUE1, FLD_VALUE2, FLD_VALUE3, FLD_VALUE4, FLD_VALUE5, FLD_VALUE6, FLD_VALUE7, FLD_VALUE8, '+
'FLD_VALUE9, FLD_VALUE10, FLD_VALUE11, FLD_VALUE12, FLD_VALUE13, FLD_VALUE14) VALUES '+
'( ''%s'', ''%s'', %d, %d, %d, %d, %d, '+
'%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, '+
'%d, %d, %d, %d, %d, %d )',
[HumanRCD.Header.sAccount, HumanRCD.Header.sChrName, 0,
hd.BagItems[i].MakeIndex, hd.BagItems[i].wIndex, hd.BagItems[i].Dura,
hd.BagItems[i].DuraMax, hd.BagItems[i].Count, hd.BagItems[i].Color,
hd.BagItems[i].btValue[0], hd.BagItems[i].btValue[1], hd.BagItems[i].btValue[2],
hd.BagItems[i].btValue[3], hd.BagItems[i].btValue[4], hd.BagItems[i].btValue[5],
hd.BagItems[i].btValue[6], hd.BagItems[i].btValue[7], hd.BagItems[i].btValue[8],
hd.BagItems[i].btValue[9], hd.BagItems[i].btValue[10], hd.BagItems[i].btValue[11],
hd.BagItems[i].btValue[12], hd.BagItems[i].btValue[13]]));
try
dbQry.Execute;
except
Result := False;
OutMainMessage('[Exception] TFileDB.UpdateRecord (9)');
end;
end;
end;
for i:=0 to High(hd.HumItems) do begin
if (hd.HumItems[i].wIndex > 0) and (hd.HumItems[i].MakeIndex > 0) then begin
dbQry.SQL.Clear;
dbQry.SQL.Add(format('INSERT TBL_CHARACTER_ITEM(FLD_LOGINID, FLD_CHARNAME, FLD_POSITION, FLD_MAKEINDEX, FLD_STDINDEX, FLD_DURA, FLD_DURAMAX, '+
'FLD_COUNT, FLD_COLOR, FLD_VALUE1, FLD_VALUE2, FLD_VALUE3, FLD_VALUE4, FLD_VALUE5, FLD_VALUE6, FLD_VALUE7, FLD_VALUE8, '+
'FLD_VALUE9, FLD_VALUE10, FLD_VALUE11, FLD_VALUE12, FLD_VALUE13, FLD_VALUE14) VALUES '+
'( ''%s'', ''%s'', %d, %d, %d, %d, %d, '+
'%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, '+
'%d, %d, %d, %d, %d, %d )',
[HumanRCD.Header.sAccount, HumanRCD.Header.sChrName, i+1,
hd.HumItems[i].MakeIndex, hd.HumItems[i].wIndex, hd.HumItems[i].Dura,
hd.HumItems[i].DuraMax, hd.HumItems[i].Count, hd.HumItems[i].Color,
hd.HumItems[i].btValue[0], hd.HumItems[i].btValue[1], hd.HumItems[i].btValue[2],
hd.HumItems[i].btValue[3], hd.HumItems[i].btValue[4], hd.HumItems[i].btValue[5],
hd.HumItems[i].btValue[6], hd.HumItems[i].btValue[7], hd.HumItems[i].btValue[8],
hd.HumItems[i].btValue[9], hd.HumItems[i].btValue[10], hd.HumItems[i].btValue[11],
hd.HumItems[i].btValue[12], hd.HumItems[i].btValue[13]]));
try
dbQry.Execute;
except
Result := False;
OutMainMessage('[Exception] TFileDB.UpdateRecord (13)');
end;
end;
end;
dbQry.SQL.Clear;
dbQry.SQL.Add(format('DELETE FROM TBL_CHARACTER_STORAGE WHERE FLD_CHARNAME=''%s''',
[HumanRCD.Header.sChrName]));
// Delete Store Item Data
try
dbQry.Execute;
except
Result := False;
OutMainMessage('[Exception] TFileDB.UpdateRecord (10)');
end;
for i:=0 to High(hd.StorageItems) do begin
if (hd.StorageItems[i].wIndex > 0) and (hd.StorageItems[i].MakeIndex > 0) then begin
dbQry.SQL.Clear;
dbQry.SQL.Add(format('INSERT TBL_CHARACTER_STORAGE(FLD_LOGINID, FLD_CHARNAME, FLD_MAKEINDEX, FLD_STDINDEX, FLD_DURA, FLD_DURAMAX, '+
'FLD_COUNT, FLD_COLOR, FLD_VALUE1, FLD_VALUE2, FLD_VALUE3, FLD_VALUE4, FLD_VALUE5, FLD_VALUE6, FLD_VALUE7, FLD_VALUE8, '+
'FLD_VALUE9, FLD_VALUE10, FLD_VALUE11, FLD_VALUE12, FLD_VALUE13, FLD_VALUE14) VALUES '+
'( ''%s'', ''%s'', %d, %d, %d, %d, '+
'%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, '+
'%d, %d, %d, %d, %d, %d )',
[HumanRCD.Header.sAccount, HumanRCD.Header.sChrName,
hd.StorageItems[i].MakeIndex, hd.StorageItems[i].wIndex, hd.StorageItems[i].Dura,
hd.StorageItems[i].DuraMax, hd.StorageItems[i].Count, hd.StorageItems[i].Color,
hd.StorageItems[i].btValue[0], hd.StorageItems[i].btValue[1], hd.StorageItems[i].btValue[2],
hd.StorageItems[i].btValue[3], hd.StorageItems[i].btValue[4], hd.StorageItems[i].btValue[5],
hd.StorageItems[i].btValue[6], hd.StorageItems[i].btValue[7], hd.StorageItems[i].btValue[8],
hd.StorageItems[i].btValue[9], hd.StorageItems[i].btValue[10], hd.StorageItems[i].btValue[11],
hd.StorageItems[i].btValue[12], hd.StorageItems[i].btValue[13]]));
try
dbQry.Execute;
except
Result := False;
OutMainMessage('[Exception] TFileDB.UpdateRecord (11)');
end;
end;
end;
end;
m_boChanged := True;
finally
dbQry.Close;
end;
{var
nPosion, n10: integer;
dt20: TDateTime;
ReadRCD: THumDataInfo;
begin
nPosion := nIndex * SizeOf(THumDataInfo) + SizeOf(TDBHeader);
if FileSeek(m_nFileHandle, nPosion, 0) = nPosion then begin
dt20 := Now();
m_nLastIndex := nIndex;
m_dUpdateTime := dt20;
n10 := FileSeek(m_nFileHandle, 0, 1);
if boNew and (FileRead(m_nFileHandle, ReadRCD, SizeOf(THumDataInfo)) =
SizeOf(THumDataInfo)) and not ReadRCD.Header.boDeleted and
(ReadRCD.Header.sName <> '') then begin
Result := False;
end else begin //0048B1F5
HumanRCD.Header.boDeleted := False;
HumanRCD.Header.dCreateDate := Now();
m_Header.nLastIndex := m_nLastIndex;
m_Header.dLastDate := m_dUpdateTime;
m_Header.dUpdateDate := Now();
FileSeek(m_nFileHandle, 0, 0);
FileWrite(m_nFileHandle, m_Header, SizeOf(TDBHeader));
FileSeek(m_nFileHandle, n10, 0);
FileWrite(m_nFileHandle, HumanRCD, SizeOf(THumDataInfo));
FileSeek(m_nFileHandle, -SizeOf(THumDataInfo), 1);
m_nCurIndex := nIndex;
m_boChanged := True;
Result := True;
end;
end else
Result := False;}
end;
function TFileDB.Find(sChrName: string; List: TStrings): integer;
var
I: integer;
begin
for I := 0 to m_QuickList.Count - 1 do begin
if CompareLStr(m_QuickList.Strings[i], sChrName, length(sChrName)) then begin
List.AddObject(m_QuickList.Strings[i], m_QuickList.Objects[i]);
end;
end;
Result := List.Count;
end;
function TFileDB.Delete(nIndex: integer): boolean;
var
I: integer;
s14: string;
begin
Result := False;
for I := 0 to m_QuickList.Count - 1 do begin
if integer(m_QuickList.Objects[i]) = nIndex then begin
s14 := m_QuickList.Strings[i];
if DeleteRecord(nIndex) then begin
m_QuickList.Delete(i); //deleting correct index? must test!
Result := True;
break;
end;
end;
end;
end;
function TFileDB.DeleteRecord(nIndex: integer): boolean;
var
sChrName:String;
sdt:String;
begin
Result := True;
sdt := FormatDateTime(SQLDTFORMAT, Now);
sChrName := m_QuickList[nIndex];
try
dbQry.SQL.Clear;
dbQry.SQL.Add(format('UPDATE TBL_CHARACTER SET FLD_DELETED=1, FLD_CREATEDATE=''%s'' '+
'WHERE FLD_CHARNAME=''%s''',
[sdt,
sChrName]));
try
dbQry.Execute;
except
Result := False;
OutMainMessage('[Exception] TFileDB.DeleteRecord');
end;
m_boChanged := True;
finally
dbQry.Close;
end;
end;
procedure TFileDB.Rebuild;//0x0048A688
var
sTempFileName: string;
nHandle, n10: integer;
// DBHeader: TDBHeader;
ChrRecord: THumDataInfo;
begin
{ sTempFileName := 'Mir#$00.DB';
if FileExists(sTempFileName) then DeleteFile(sTempFileName);
nHandle := FileCreate(sTempFileName);
n10 := 0;
if nHandle < 0 then exit;
try
if Open then begin
FileSeek(m_nFileHandle, 0, 0);
if FileRead(m_nFileHandle, DBHeader, SizeOf(TDBHeader)) = SizeOf(TDBHeader) then
begin
FileWrite(nHandle, DBHeader, SizeOf(TDBHeader));
while (True) do begin
if FileRead(m_nFileHandle, ChrRecord, SizeOf(THumDataInfo)) =
SizeOf(THumDataInfo) then begin
if ChrRecord.Header.boDeleted then Continue;
FileWrite(nHandle, ChrRecord, SizeOf(THumDataInfo));
Inc(n10);
end else
break;
end;
DBHeader.nHumCount := n10;
DBHeader.dUpdateDate := Now();
FileSeek(nHandle, 0, 0);
FileWrite(nHandle, DBHeader, SizeOf(TDBHeader));
end;
end;
finally
Close;
end;
FileClose(nHandle);
FileCopy(sTempFileName, m_sDBFileName);
DeleteFile(sTempFileName);}
end;
function TFileDB.Count: integer;
begin
Result := m_QuickList.Count;
end;
function TFileDB.Delete(sChrName: string): boolean;
var
nIndex: integer;
begin
Result := False;
nIndex := m_QuickList.GetIndex(sChrName);
if nIndex < 0 then exit;
if DeleteRecord(nIndex) then begin
m_QuickList.Delete(nIndex);
Result := True;
end;
end;
initialization
begin
CoInitialize(nil);
ADOConnection := TMSConnection.Create(nil);
// ADOConnection.OnError := MSConnectionError;
dbQry := TMSQuery.Create(nil);
end;
finalization
begin
dbQry.Free;
ADOConnection.Free;
CoUnInitialize;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -