📄 uitemlog.pas
字号:
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 + -