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

📄 humdb.pas

📁 传奇源代码的delphi版本
💻 PAS
📖 第 1 页 / 共 4 页
字号:
                           [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 + -