📄 sdk.pas
字号:
break;
end;
end;
end;
UnLock();
end;
function TBigStorageList.ClearRec(): Boolean;
var
i, ii: Integer;
List: TList;
BigStorage: pTBigStorage;
begin
Lock();
Result := False;
for i := 0 to Count - 1 do begin
if Count <= 0 then break;
List := TList(Items[i]);
if (List <> nil) and (List.Count > 0) then begin
for ii := 0 to List.Count - 1 do begin
BigStorage := pTBigStorage(List.Items[0]);
DisPose(BigStorage);
end;
List.Free;
end;
end;
Clear;
Inc(m_nChangeCount);
Result := TRUE;
UnLock();
end;
function TBigStorageList.GetUserStorageListByMakeIndex(sChrName, sItemName: string; nMakeIndex: Integer; var UserItem: pTUserItem): Boolean;
var
i, ii: Integer;
List: TList;
Storage: pTBigStorage;
sUserItemName: string;
begin
Lock();
Result := False;
for i := 0 to Count - 1 do begin
if Count <= 0 then break;
List := TList(Items[i]);
if (List <> nil) and (List.Count > 0) then begin
Storage := pTBigStorage(List.Items[0]);
if CompareText(Storage.sCharName, sChrName) = 0 then begin
for ii := 0 to List.Count - 1 do begin
Storage := pTBigStorage(List.Items[ii]);
if (Storage.UseItems.MakeIndex = nMakeIndex) and (not Storage.boDelete) then begin
sUserItemName := '';
if Storage.UseItems.btValue[13] = 1 then
sUserItemName := ItemUnit.GetCustomItemName(Storage.UseItems.MakeIndex, Storage.UseItems.wIndex);
if sUserItemName = '' then
sUserItemName := UserEngine.GetStdItemName(Storage.UseItems.wIndex);
if CompareText(sUserItemName, sItemName) = 0 then begin
New(UserItem);
UserItem^ := Storage.UseItems;
Result := TRUE;
break;
end;
end;
end;
end;
end;
end;
UnLock();
end;
function TBigStorageList.AddItemToUserBigStorageList(sChrName: string; UserItem: pTUserItem): Boolean;
var
i: Integer;
List: TList;
Storage: pTBigStorage;
boFound: Boolean;
AddStorage: pTBigStorage;
begin
Lock();
Result := False;
boFound := False;
for i := 0 to Count - 1 do begin
if Count <= 0 then break;
List := TList(Items[i]);
if (List <> nil) and (List.Count > 0) then begin
Storage := pTBigStorage(List.Items[0]);
if CompareText(Storage.sCharName, sChrName) = 0 then begin
New(AddStorage);
FillChar(AddStorage.UseItems, SizeOf(TUserItem), #0);
AddStorage.boDelete := False;
AddStorage.sCharName := sChrName;
AddStorage.SaveDateTime := Now;
AddStorage.UseItems := UserItem^;
{AddStorage.UseItems.MakeIndex := UserItem.MakeIndex;
AddStorage.UseItems.wIndex := UserItem.wIndex;
AddStorage.UseItems.Dura := UserItem.Dura;
AddStorage.UseItems.DuraMax := UserItem.DuraMax;
AddStorage.UseItems.btValue := UserItem.btValue;}
List.Add(AddStorage);
Inc(m_nChangeCount);
boFound := TRUE;
Result := TRUE;
end;
end;
end;
if not boFound then begin
List := TList.Create;
New(AddStorage);
FillChar(AddStorage.UseItems, SizeOf(TUserItem), #0);
AddStorage.boDelete := False;
AddStorage.sCharName := sChrName;
AddStorage.SaveDateTime := Now;
AddStorage.UseItems := UserItem^;
{AddStorage.UseItems.MakeIndex := UserItem.MakeIndex;
AddStorage.UseItems.wIndex := UserItem.wIndex;
AddStorage.UseItems.Dura := UserItem.Dura;
AddStorage.UseItems.DuraMax := UserItem.DuraMax;
AddStorage.UseItems.btValue := UserItem.btValue;}
List.Add(AddStorage);
Add(List);
Inc(m_nChangeCount);
Result := TRUE;
end;
UnLock();
end;
function TBigStorageList.DelBigStorageItem(sChrName, sItemName: string; nMakeIndex: Integer): Boolean;
var
i, ii: Integer;
List: TList;
Storage: pTBigStorage;
sUserItemName: string;
begin
Lock();
Result := False;
i := 0;
while TRUE do begin
if i >= Count then break;
if Count <= 0 then break;
List := TList(Items[i]);
if (List <> nil) and (List.Count > 0) then begin
Storage := pTBigStorage(List.Items[0]);
if CompareText(Storage.sCharName, sChrName) = 0 then begin
ii := 0;
while TRUE do begin
if ii >= List.Count then break;
Storage := pTBigStorage(List.Items[ii]);
if (Storage.UseItems.MakeIndex = nMakeIndex) and (not Storage.boDelete) then begin
sUserItemName := '';
if Storage.UseItems.btValue[13] = 1 then
sUserItemName := ItemUnit.GetCustomItemName(Storage.UseItems.MakeIndex, Storage.UseItems.wIndex);
if sUserItemName = '' then
sUserItemName := UserEngine.GetStdItemName(Storage.UseItems.wIndex);
if CompareText(sUserItemName, sItemName) = 0 then begin
Storage.boDelete := TRUE;
DisPose(Storage);
List.Delete(ii);
if List.Count <= 0 then begin
List.Free;
Delete(i);
end;
Inc(m_nChangeCount);
Result := TRUE;
break;
end;
end;
Inc(ii);
end;
end;
end;
Inc(i);
end;
UnLock();
end;
function TBigStorageList.SaveStorageList(): Boolean;
var
i, ii: Integer;
sFileName: string;
FileHandle: Integer;
Storage: pTBigStorage;
List: TList;
nItemCount: TItemCount; //Inc(m_nChangeCount);
nChangeCount: Integer;
begin
Lock();
Result := False;
try
if (g_boExitServer) and (m_nChangeCount <= 0) then m_nChangeCount := 1;
if (not FUpDate) and (m_nChangeCount > 0) then begin
nChangeCount := m_nChangeCount;
FUpDate := TRUE;
sFileName := g_Config.sEnvirDir + '\Market_Storage\UserStorage.db';
if FileExists(sFileName) then begin
FileHandle := FileOpen(sFileName, fmOpenWrite or fmShareDenyNone);
end else begin
FileHandle := FileCreate(sFileName);
end;
if FileHandle > 0 then begin
FillChar(nItemCount, SizeOf(TItemCount), #0);
for i := 0 to Count - 1 do begin
List := TList(Items[i]);
if List <> nil then begin
Inc(nItemCount, List.Count);
end;
end;
FileSeek(FileHandle, 0, 0);
FileWrite(FileHandle, nItemCount, SizeOf(TItemCount));
for i := 0 to Count - 1 do begin
List := TList(Items[i]);
for ii := 0 to List.Count - 1 do begin
if (List = nil) or (List.Count <= 0) then Continue;
Storage := pTBigStorage(List.Items[ii]);
if (Storage <> nil) and (not Storage.boDelete) then
FileWrite(FileHandle, Storage^, SizeOf(TBigStorage));
end;
end;
FileClose(FileHandle);
end;
FUpDate := False;
Dec(m_nChangeCount, nChangeCount);
Result := TRUE;
end;
finally
UnLock();
end;
end;
function TBigStorageList.SaveStorageList(sFileName: string): Boolean;
var
i, ii: Integer;
FileHandle: Integer;
Storage: pTBigStorage;
List: TList;
nItemCount: TItemCount; //Inc(m_nChangeCount);
nChangeCount: Integer;
begin
Lock();
Result := False;
try
if FileExists(sFileName) then DeleteFile(sFileName);
FileHandle := FileCreate(sFileName);
if FileHandle > 0 then begin
FillChar(nItemCount, SizeOf(TItemCount), #0);
for i := 0 to Count - 1 do begin
List := TList(Items[i]);
if List <> nil then begin
Inc(nItemCount, List.Count);
end;
end;
FileSeek(FileHandle, 0, 0);
FileWrite(FileHandle, nItemCount, SizeOf(TItemCount));
for i := 0 to Count - 1 do begin
List := TList(Items[i]);
for ii := 0 to List.Count - 1 do begin
if (List = nil) or (List.Count <= 0) then Continue;
Storage := pTBigStorage(List.Items[ii]);
if (Storage <> nil) and (not Storage.boDelete) then
FileWrite(FileHandle, Storage^, SizeOf(TBigStorage));
end;
end;
FileClose(FileHandle);
Result := TRUE;
end;
finally
UnLock();
end;
end;
{TSellOffGoodList}
constructor TSellOffGoodList.Create;
begin
inherited Create;
FRecCount := 0;
FUpDateSellOff := False;
m_nChangeCount := 0;
end;
destructor TSellOffGoodList.Destroy;
begin
inherited;
end;
procedure TSellOffGoodList.UnLoadSellOffGoodList();
var
i, ii: Integer;
begin
Lock();
try
{ SaveSellOffGoodList();
FUpDateSellOff := True;
for I := 0 to Count - 1 do begin
if Count <= 0 then Break;
//if TList(Items[I]).Count <= 0 then Continue;
for II := 0 to TList(Items[I]).Count - 1 do begin
Dispose(pTSellOffInfo(TList(Items[I]).Items[II]));
end;
TList(Items[I]).Free;
end; }
finally
UnLock();
end;
end;
procedure TSellOffGoodList.LoadSellOffGoodList();
var
i: Integer;
sFileName: string;
FileHandle: Integer;
List: TList;
SellOffInfo: pTSellOffInfo;
Header420: TSellOffHeader;
begin
Lock();
try
sFileName := g_Config.sEnvirDir + '\Market_SellOff\UserSellOff.sell';
if FileExists(sFileName) then begin
FileHandle := FileOpen(sFileName, fmOpenRead or fmShareDenyNone);
List := nil;
if FileHandle > 0 then begin
if FileRead(FileHandle, Header420, SizeOf(TSellOffHeader)) = SizeOf(TSellOffHeader) then begin
FRecCount := Header420.nItemCount;
for i := 0 to Header420.nItemCount - 1 do begin
New(SellOffInfo);
FillChar(SellOffInfo.UseItems, SizeOf(TUserItem), #0);
if (FileRead(FileHandle, SellOffInfo^, SizeOf(TSellOffInfo)) = SizeOf(TSellOffInfo)) and (SellOffInfo.UseItems.wIndex > 0) then begin
if List = nil then begin
List := TList.Create;
List.Add(SellOffInfo);
end else begin
if pTSellOffInfo(List.Items[0]).UseItems.wIndex = SellOffInfo.UseItems.wIndex then begin
List.Add(SellOffInfo);
end else begin
Self.Add(List);
List := TList.Create;
List.Add(SellOffInfo);
end;
end;
end else begin
DisPose(SellOffInfo);
end;
end;
if List <> nil then
Self.Add(List);
FileClose(FileHandle);
end;
end;
end else begin
FileHandle := FileCreate(sFileName);
if FileHandle > 0 then begin
Header420.nItemCount := 0;
FileWrite(FileHandle, Header420, SizeOf(TSellOffHeader));
FileClose(FileHandle);
end;
end;
finally
UnLock();
end;
//MainOutMessage('LoadSellGoodRecord: '+IntToStr(Self.Count));
end;
procedure TSellOffGoodList.GetSellOffGoodList(var SellOffList: TList);
var
i: Integer;
List: TList;
SellOffInfo: pTSellOffInfo;
begin
Lock();
try
if SellOffList <> nil then begin
SellOffList.Clear;
for i := 0 to Count - 1 do begin
if Count <= 0 then break;
List := TList(Items[i]);
if List.Count <= 0 then Continue;
SellOffInfo := pTSellOffInfo(List.Items[0]);
SellOffList.Add(SellOffInfo);
end;
end;
finally
UnLock();
end;
end;
procedure TSellOffGoodList.GetUserSellOffGoodListByChrName(sChrName: string; var SellOffList: TList);
var
i, ii: Integer;
List: TList;
SellOffInfo: pTSellOffInfo;
begin
Lock();
try
for i := 0 to Count - 1 do begin
if Count <= 0 then break;
List := TList(Items[i]);
if List = nil then Continue;
if List.Count <= 0 then Continue;
for ii := List.Count - 1 downto 0 do begin
SellOffInfo := pTSellOffInfo(List.Items[ii]);
if CompareText(SellOffInfo.sCharName, sChrName) = 0 then
SellOffList.Add(SellOffInfo);
end;
end;
finally
UnLock();
end;
end;
procedure TSellOffGoodList.GetUserSellOffGoodListByItemName(sItemName: string; var SellOffList: TList);
var
i: Integer;
List: TList;
SellOffInfo: pTSellOffInfo;
sUserItemName: string;
StdItem: pTStdItem;
begin
Lock();
try
SellOffList := nil;
for i := 0 to Count - 1 do begin
if Count <= 0 then break;
List := TList(Items[i]);
if List = nil then Continue;
if List.Count <= 0 then Continue;
SellOffInfo := pTSellOffInfo(List.Items[0]);
sUserItemName := '';
if SellOffInfo.UseItems.btValue[13] = 1 then
sUserItemName := ItemUnit.GetCustomItemName(SellOffInfo.UseItems.MakeIndex, SellOffInfo.UseItems.wIndex);
if sUserItemName = '' then
sUserItemName := UserEngine.GetStdItemName(SellOffInfo.UseItems.wIndex);
StdItem := UserEngine.GetStdItem(SellOffInfo.UseItems.wIndex);
if (StdItem <> nil) and (CompareText(sUserItemName, sItemName) = 0) then begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -