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

📄 uitemlog.pas

📁 千年源代码,只缺少控件,可以做二次开发用,好不容易得来的
💻 PAS
📖 第 1 页 / 共 2 页
字号:

   nCount := KeyList.Select (aCharName, nStartPos, nEndPos);
   if nCount <= 0 then exit;

   for i := nStartPos to nEndPos do begin
      nPos := KeyList.GetKeyValue (i);
      LogStream.Seek (SizeOf (TItemLogHeader) + nPos * SizeOf (TItemLogRecord), soFromBeginning);
      LogStream.ReadBuffer (LogData, SizeOf (TItemLogRecord));

      if aItemData.rboDouble = true then begin
         for j := 0 to 10 - 1 do begin
            if StrPas (@aItemData.rName) = StrPas (@LogData.ItemData[j].Name) then begin
               if aItemData.rcolor = LogData.ItemData[j].Color then begin
                  StrPCopy (@LogData.Header.LastUpdate, DateToStr (Date));
                  LogData.ItemData[j].Count := LogData.ItemData[j].Count + aItemData.rCount;
                  LogStream.Seek (SizeOf (TItemLogHeader) + nPos * SizeOf (TItemLogRecord), soFromBeginning);
                  LogStream.WriteBuffer (LogData, SizeOf (TItemLogRecord));
                  Result := true;
                  exit;
               end;
            end;
         end;
      end;
   end;

   for i := nStartPos to nEndPos do begin
      nPos := KeyList.GetKeyValue (i);
      LogStream.Seek (SizeOf (TItemLogHeader) + nPos * SizeOf (TItemLogRecord), soFromBeginning);
      LogStream.ReadBuffer (LogData, SizeOf (TItemLogRecord));

      for j := 0 to 10 - 1 do begin
         if LogData.ItemData[j].Name[0] = 0 then begin
            StrPCopy (@LogData.Header.LastUpdate, DateToStr (Date));
            StrCopy (@LogData.ItemData[j].Name, @aItemData.rName);
            LogData.ItemData[j].Color := aItemData.rColor;
            LogData.ItemData[j].Count := LogData.ItemData[j].Count + aItemData.rCount;
            LogStream.Seek (SizeOf (TItemLogHeader) + nPos * SizeOf (TItemLogRecord), soFromBeginning);
            LogStream.WriteBuffer (LogData, SizeOf (TItemLogRecord));
            Result := true;
            exit;
         end;
      end;
   end;
end;

function TItemLog.GetItem (aCharName : String; var aItemData : TItemData) : Boolean;
var
   i, j, nPos, nStartPos, nEndPos, nCount : Integer;
begin
   Result := false;

   if aItemData.rName [0] = 0 then exit;
   if aItemData.rCount <= 0 then exit;

   nCount := KeyList.Select (aCharName, nStartPos, nEndPos);
   if nCount <= 0 then exit;

   for i := nStartPos to nEndPos do begin
      nPos := KeyList.GetKeyValue (i);
      LogStream.Seek (SizeOf (TItemLogHeader) + nPos * SizeOf (TItemLogRecord), soFromBeginning);
      LogStream.ReadBuffer (LogData, SizeOf (TItemLogRecord));
      for j := 0 to 10 - 1 do begin
         if StrPas (@LogData.ItemData[j].Name) = StrPas (@aItemData.rName) then begin
            if LogData.ItemData[j].Color = aItemData.rColor then begin
               if LogData.ItemData[j].Count >= aItemData.rCount then begin
                  StrPCopy (@LogData.Header.LastUpdate, DateToStr (Date));
                  if LogData.ItemData[j].Count - aItemData.rCount > 0 then begin
                     LogData.ItemData[j].Count := LogData.ItemData[j].Count - aItemData.rCount;
                  end else begin
                     FillChar (LogData.ItemData[j], SizeOf (TItemLogData), 0);
                  end;
                  LogStream.Seek (SizeOf (TItemLogHeader) + nPos * SizeOf (TItemLogRecord), soFromBeginning);
                  LogStream.WriteBuffer (LogData, SizeOf (TItemLogRecord));
                  Result := true;
                  exit;
               end;
            end;
         end;
      end;
   end;
end;

function TItemLog.CheckAddItem (aCharName : String; var aItemData : TItemData) : Boolean;
var
   i, j, nPos, nStartPos, nEndPos, nCount : Integer;
begin
   Result := false;

   if aItemData.rName [0] = 0 then exit;
   if aItemData.rCount <= 0 then exit;

   nCount := KeyList.Select (aCharName, nStartPos, nEndPos);
   if nCount <= 0 then exit;

   for i := nStartPos to nEndPos do begin
      nPos := KeyList.GetKeyValue (i);
      LogStream.Seek (SizeOf (TItemLogHeader) + nPos * SizeOf (TItemLogRecord), soFromBeginning);
      LogStream.ReadBuffer (LogData, SizeOf (TItemLogRecord));

      if aItemData.rboDouble = true then begin
         for j := 0 to 10 - 1 do begin
            if StrPas (@aItemData.rName) = StrPas (@LogData.ItemData[j].Name) then begin
               if aItemData.rcolor = LogData.ItemData[j].Color then begin
                  Result := true;
                  exit;
               end;
            end;
         end;
      end;
   end;

   for i := nStartPos to nEndPos do begin
      nPos := KeyList.GetKeyValue (i);
      LogStream.Seek (SizeOf (TItemLogHeader) + nPos * SizeOf (TItemLogRecord), soFromBeginning);
      LogStream.ReadBuffer (LogData, SizeOf (TItemLogRecord));

      for j := 0 to 10 - 1 do begin
         if LogData.ItemData[j].Name[0] = 0 then begin
            Result := true;
            exit;
         end;
      end;
   end;
end;

function TItemLog.CheckGetItem (aCharName : String; var aItemData : TItemData) : Boolean;
var
   i, j, nPos, nStartPos, nEndPos, nCount : Integer;
begin
   Result := false;

   if aItemData.rName [0] = 0 then exit;
   if aItemData.rCount <= 0 then exit;

   nCount := KeyList.Select (aCharName, nStartPos, nEndPos);
   if nCount <= 0 then exit;

   for i := nStartPos to nEndPos do begin
      nPos := KeyList.GetKeyValue (i);
      LogStream.Seek (SizeOf (TItemLogHeader) + nPos * SizeOf (TItemLogRecord), soFromBeginning);
      LogStream.ReadBuffer (LogData, SizeOf (TItemLogRecord));
      for j := 0 to 10 - 1 do begin
         if StrPas (@LogData.ItemData[j].Name) = StrPas (@aItemData.rName) then begin
            if LogData.ItemData[j].Color = aItemData.rColor then begin
               if LogData.ItemData[j].Count >= aItemData.rCount then begin
                  Result := true;
                  exit;
               end;
            end;
         end;
      end;
   end;
end;

function TItemLog.GetLogRecord (aCharName : String; aIndex : Integer; var ItemLogRecord : TItemLogRecord) : Boolean;
var
   i, j, nPos, nStartPos, nEndPos, nCount : Integer;
   ItemData : TItemData;
begin
   Result := false;

   FillChar (ItemLogRecord, SizeOf (TItemLogRecord), 0);
   nCount := KeyList.Select (aCharName, nStartPos, nEndPos);
   if nCount <= 0 then exit;

   for i := nStartPos to nEndPos do begin
      if i - nStartPos = aIndex then begin
         nPos := KeyList.GetKeyValue (i);
         LogStream.Seek (SizeOf (TItemLogHeader) + nPos * SizeOf (TItemLogRecord), soFromBeginning);
         LogStream.ReadBuffer (ItemLogRecord, SizeOf (TItemLogRecord));
         for j := 0 to 10 - 1 do begin
            ItemClass.GetItemData (StrPas (@ItemLogRecord.ItemData [j].Name), ItemData);
            if ItemData.rName [0] = 0 then begin
               FillChar (ItemLogRecord.ItemData [j], SizeOf (TItemLogData), 0);
            end;
         end;
         Result := true;
         exit;
      end;
   end;
end;

function TItemLog.SetLogRecord (aCharName : String; aIndex : Integer; var ItemLogRecord : TItemLogRecord) : Boolean;
var
   i, j, nPos, nStartPos, nEndPos, nCount : Integer;
begin
   Result := false;

   nCount := KeyList.Select (aCharName, nStartPos, nEndPos);
   if nCount <= 0 then exit;

   for i := nStartPos to nEndPos do begin
      if i - nStartPos = aIndex then begin
         ItemLogRecord.Header.boUsed := true;
         nPos := KeyList.GetKeyValue (i);
         LogStream.Seek (SizeOf (TItemLogHeader) + nPos * SizeOf (TItemLogRecord), soFromBeginning);
         LogStream.WriteBuffer (ItemLogRecord, SizeOf (TItemLogRecord));
         Result := true;
         exit;
      end;
   end;
end;

function TItemLog.ViewItemLogInfo (aCharName : String) : String;
var
   InfoStr : String;
   i, j, nPos, nStartPos, nEndPos, nCount : Integer;
begin
   Result := '';

   nCount := KeyList.Select (aCharName, nStartPos, nEndPos);
   if nCount <= 0 then exit;

   InfoStr := '';
   for i := nStartPos to nEndPos do begin
      nPos := KeyList.GetKeyValue (i);
      LogStream.Seek (SizeOf (TItemLogHeader) + nPos * SizeOf (TItemLogRecord), soFromBeginning);
      LogStream.ReadBuffer (LogData, SizeOf (TItemLogRecord));
      for j := 0 to 10 - 1 do begin
         if LogData.ItemData[j].Name[0] <> 0 then begin
            InfoStr := InfoStr + StrPas (@LogData.ItemData[j].Name) + ':' + IntToStr (LogData.ItemData[j].Color) + ':' + IntToStr (LogData.ItemData[j].Count) + ';'; 
         end;
      end;
   end;

   Result := InfoStr;
end;

function TItemLog.isLocked (aCharName : String) : Boolean;
var
   nStartPos, nEndPos, nCount, nPos : Integer;
begin
   Result := true;

   nCount := KeyList.Select (aCharName, nStartPos, nEndPos);
   if nCount <= 0 then exit;

   nPos := KeyList.GetKeyValue (nStartPos);
   LogStream.Seek (SizeOf (TItemLogHeader) + nPos * SizeOf (TItemLogRecord), soFromBeginning);
   LogStream.ReadBuffer (LogData, SizeOf (TItemLogRecord));

   Result := LogData.Header.boLocked;
end;

function TItemLog.SetPassword (aCharName, aPassword : String) : String;
var
   Password : String;
   nStartPos, nEndPos, nCount, nPos : Integer;
begin
   Result := '';

   Password := Trim (aPassword);
   if (Length (Password) < 4) or (Length (Password) > 8) then begin
      Result := '厚呼锅龋绰 4-8磊府鳖瘤肺 秦 林技夸';
      exit;
   end;
   nCount := KeyList.Select (aCharName, nStartPos, nEndPos);
   if nCount <= 0 then begin
      Result := aCharName + '丛俊霸 且寸等 接瘤啊 绝嚼聪促';
      exit;
   end;

   nPos := KeyList.GetKeyValue (nStartPos);
   LogStream.Seek (SizeOf (TItemLogHeader) + nPos * SizeOf (TItemLogRecord), soFromBeginning);
   LogStream.ReadBuffer (LogData, SizeOf (TItemLogRecord));

   if LogData.Header.boLocked = true then begin
      Result := '捞固 厚剐锅龋啊 汲沥登绢 乐嚼聪促';
      exit;
   end;

   LogData.Header.boLocked := true;
   StrPCopy (@LogData.Header.LockPassword, Password);

   LogStream.Seek (SizeOf (TItemLogHeader) + nPos * SizeOf (TItemLogRecord), soFromBeginning);
   LogStream.WriteBuffer (LogData, SizeOf (TItemLogRecord));

   Result := '接瘤俊 厚剐锅龋啊 汲沥登菌嚼聪促';
end;

function TItemLog.FreePassword (aCharName, aPassword : String) : String;
var
   Password : String;
   nStartPos, nEndPos, nCount, nPos : Integer;
begin
   Result := '';

   Password := Trim (aPassword);
   if Password = '' then begin
      Result := '汲沥等 厚剐锅龋甫 涝仿秦具父 钦聪促';
      exit; 
   end;

   nCount := KeyList.Select (aCharName, nStartPos, nEndPos);
   if nCount <= 0 then begin
      Result := aCharName + '丛俊霸 且寸等 焊包傍埃捞 绝嚼聪促';
      exit;
   end;

   nPos := KeyList.GetKeyValue (nStartPos);
   LogStream.Seek (SizeOf (TItemLogHeader) + nPos * SizeOf (TItemLogRecord), soFromBeginning);
   LogStream.ReadBuffer (LogData, SizeOf (TItemLogRecord));

   if LogData.Header.boLocked = false then begin
      Result := '厚剐锅龋啊 汲沥登绢 乐瘤 臼嚼聪促';
      exit;
   end;

   if StrPas (@LogData.Header.LockPassword) <> aPassword then begin
      Result := '涝仿茄 厚剐锅龋啊 老摹窍瘤 臼嚼聪促';
      exit;
   end;

   LogData.Header.boLocked := false;
   LogStream.Seek (SizeOf (TItemLogHeader) + nPos * SizeOf (TItemLogRecord), soFromBeginning);
   LogStream.WriteBuffer (LogData, SizeOf (TItemLogRecord));

   Result := '接瘤狼 厚剐锅龋甫 秦力 窍看嚼聪促';
end;

end.

⌨️ 快捷键说明

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