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

📄 sdk.pas

📁 传奇2...飘飘M2的源码.曾经是传奇"龙"版用得最好的M2程序.完整M2源码
💻 PAS
📖 第 1 页 / 共 3 页
字号:
        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 + -