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

📄 mudutil.pas

📁 乐都SQL版传奇全套代码,绝对可编译
💻 PAS
📖 第 1 页 / 共 3 页
字号:
begin
  inherited Create;
  InitializeCriticalSection(FLock);
end;

procedure TGList.Lock;
begin
  EnterCriticalSection(FLock);
end;

procedure TGList.UnLock;
begin
  LeaveCriticalSection(FLock);
end;

{ TGStringList }

constructor TGStringList.Create;
begin
  inherited Create;
  InitializeCriticalSection(FLock);
end;

procedure TGStringList.Lock;
begin
  EnterCriticalSection(FLock);
end;

procedure TGStringList.UnLock;
begin
  LeaveCriticalSection(FLock);
end;
{ TQuickList }

function TQuickList.GetIndex(sName: string): Integer;
//0x0045B498
var
  nLow, nHigh, nMed, nCompareVal        : Integer;
begin
  Result := -1;
  if self.Count <> 0 then
  begin
    if self.Sorted then
    begin
      if self.Count = 1 then
      begin
        if CompareStr(sName, self.Strings[0]) = 0 then
          Result := 0;                                      // - > 0x0045B71D
      end
      else
      begin                                                 //0x0045B51E
        nLow := 0;
        nHigh := self.Count - 1;
        nMed := (nHigh - nLow) div 2 + nLow;
        while (True) do
        begin
          if (nHigh - nLow) = 1 then
          begin
            if CompareStr(sName, self.Strings[nHigh]) = 0 then
              Result := nHigh;
            if CompareStr(sName, self.Strings[nLow]) = 0 then
              Result := nLow;
            break;                                          // - > 0x0045B71D
          end
          else
          begin
            ;                                               //0x0045B59A
            nCompareVal := CompareStr(sName, self.Strings[nMed]);
            if nCompareVal > 0 then
            begin
              nLow := nMed;
              nMed := (nHigh - nLow) div 2 + nLow;
              Continue;
            end;                                            //0x0045B5DA
            if nCompareVal < 0 then
            begin
              nHigh := nMed;
              nMed := (nHigh - nLow) div 2 + nLow;
              Continue;
            end;
            Result := nMed;
            break;
          end;                                              //0x0045B609
        end;
      end;
    end
    else
    begin                                                   //0x0045B609
      if self.Count = 1 then
      begin
        if CompareText(sName, self.Strings[0]) = 0 then
          Result := 0;
      end
      else
      begin
        nLow := 0;
        nHigh := self.Count - 1;
        nMed := (nHigh - nLow) div 2 + nLow;
        while (True) do
        begin
          if (nHigh - nLow) = 1 then
          begin
            if CompareText(sName, self.Strings[nHigh]) = 0 then
              Result := nHigh;
            if CompareText(sName, self.Strings[nLow]) = 0 then
              Result := nLow;
            break;
          end
          else
          begin                                             //0x0045B6B3
            nCompareVal := CompareText(sName, self.Strings[nMed]);
            if nCompareVal > 0 then
            begin
              nLow := nMed;
              nMed := (nHigh - nLow) div 2 + nLow;
              Continue;
            end;
            if nCompareVal < 0 then
            begin
              nHigh := nMed;
              nMed := (nHigh - nLow) div 2 + nLow;
              Continue;
            end;
            Result := nMed;
            break;
          end;
        end;
      end;
    end;                                                    //0x0045B71D
  end;

end;

procedure TQuickList.SortString(nMIN, nMax: Integer);
//0x0045AF78
var
  ntMin, ntMax                          : Integer;
  s18                                   : string;
begin
  if self.Count > 0 then
    while (True) do
    begin
      ntMin := nMIN;
      ntMax := nMax;
      s18 := self.Strings[(nMIN + nMax) shr 1];
      while (True) do
      begin
        while (CompareText(self.Strings[ntMin], s18) < 0) do
          Inc(ntMin);
        while (CompareText(self.Strings[ntMax], s18) > 0) do
          Dec(ntMax);
        if ntMin <= ntMax then
        begin
          self.Exchange(ntMin, ntMax);
          Inc(ntMin);
          Dec(ntMax);
        end;
        if ntMin > ntMax then
          break
      end;
      if nMIN < ntMax then
        SortString(nMIN, ntMax);
      nMIN := ntMin;
      if ntMin >= nMax then
        break;
    end;
end;

function TQuickList.AddRecord(sName: string; nIndex: Integer): Boolean;
//0x0045B0D0
var
  nLow, nHigh, nMed, nCompareVal        : Integer;
begin
  Result := True;
  if self.Count = 0 then
  begin
    self.AddObject(sName, TObject(nIndex));
  end
  else
  begin                                                     //0x0045B133
    if self.Sorted then
    begin
      if self.Count = 1 then
      begin
        nMed := CompareStr(sName, self.Strings[0]);
        if nMed > 0 then
          self.AddObject(sName, TObject(nIndex))
        else
        begin
          if nMed < 0 then
            self.InsertObject(0, sName, TObject(nIndex));
        end;
      end
      else
      begin                                                 //0x0045B19F
        nLow := 0;
        nHigh := self.Count - 1;
        nMed := (nHigh - nLow) div 2 + nLow;
        while (True) do
        begin
          if (nHigh - nLow) = 1 then
          begin
            nMed := CompareStr(sName, self.Strings[nHigh]);
            if nMed > 0 then
            begin
              self.InsertObject(nHigh + 1, sName, TObject(nIndex));
              break;
            end
            else
            begin
              nMed := CompareStr(sName, self.Strings[nLow]);
              if nMed > 0 then
              begin
                self.InsertObject(nLow + 1, sName, TObject(nIndex));
                break;
              end
              else
              begin
                if nMed < 0 then
                begin
                  self.InsertObject(nLow, sName, TObject(nIndex));
                  break;
                  ;
                end
                else
                begin
                  Result := False;
                  break;
                end;
              end;
            end;
          end
          else
          begin                                             //0x0045B26A
            nCompareVal := CompareStr(sName, self.Strings[nMed]);
            if nCompareVal > 0 then
            begin
              nLow := nMed;
              nMed := (nHigh - nLow) div 2 + nLow;
              Continue;
            end;
            if nCompareVal < 0 then
            begin
              nHigh := nMed;
              nMed := (nHigh - nLow) div 2 + nLow;
              Continue;
            end;
            Result := False;
            break;
          end;
        end;
      end;
    end
    else
    begin
      if self.Count = 1 then
      begin
        nMed := CompareText(sName, self.Strings[0]);
        if nMed > 0 then
          self.AddObject(sName, TObject(nIndex))
        else
        begin
          if nMed < 0 then
            self.InsertObject(0, sName, TObject(nIndex));
        end;
      end
      else
      begin                                                 //
        nLow := 0;
        nHigh := self.Count - 1;
        nMed := (nHigh - nLow) div 2 + nLow;
        while (True) do
        begin
          if (nHigh - nLow) = 1 then
          begin
            nMed := CompareText(sName, self.Strings[nHigh]);
            if nMed > 0 then
            begin
              self.InsertObject(nHigh + 1, sName, TObject(nIndex));
              break;
            end
            else
            begin
              nMed := CompareText(sName, self.Strings[nLow]);
              if nMed > 0 then
              begin
                self.InsertObject(nLow + 1, sName, TObject(nIndex));
                break;
              end
              else
              begin
                if nMed < 0 then
                begin
                  self.InsertObject(nLow, sName, TObject(nIndex));
                  break;
                end
                else
                begin
                  Result := False;
                  break;
                end;
              end;
            end;
          end
          else
          begin                                             //0x0045B26A
            nCompareVal := CompareText(sName, self.Strings[nMed]);
            if nCompareVal > 0 then
            begin
              nLow := nMed;
              nMed := (nHigh - nLow) div 2 + nLow;
              Continue;
            end;
            if nCompareVal < 0 then
            begin
              nHigh := nMed;
              nMed := (nHigh - nLow) div 2 + nLow;
              Continue;
            end;
            Result := False;
            break;
          end;
        end;
      end;
    end;
  end;
end;

procedure TQuickList.Lock;
begin
  EnterCriticalSection(FLock);
end;

procedure TQuickList.UnLock;
begin
  LeaveCriticalSection(FLock);
end;

constructor TQuickList.Create;
begin
  inherited Create;
  InitializeCriticalSection(FLock);
end;

end.

⌨️ 快捷键说明

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