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

📄 usrengn.pas

📁 飞尔传奇世界的引擎代码可直接编译M2Engine 请使用Delphi编译
💻 PAS
📖 第 1 页 / 共 5 页
字号:
  for I := 0 to m_LoadPlayList.Count - 1 do begin
    Dispose(pTUserOpenInfo(m_LoadPlayList.Objects[I]));
  end;
  m_LoadPlayList.Free;
  for I := 0 to m_PlayObjectList.Count - 1 do begin
    TPlayObject(m_PlayObjectList.Objects[I]).Free;
  end;
  m_PlayObjectList.Free;
  m_StringList_0C.Free;

  for I := 0 to m_PlayObjectFreeList.Count - 1 do begin
    TPlayObject(m_PlayObjectFreeList.Items[I]).Free;
  end;
  m_PlayObjectFreeList.Free;

  for I := 0 to m_ChangeHumanDBGoldList.Count - 1 do begin
    Dispose(pTGoldChangeInfo(m_ChangeHumanDBGoldList.Items[I]));
  end;
  m_ChangeHumanDBGoldList.Free;

  for I := 0 to StdItemList.Count - 1 do begin
    Dispose(pTStdItem(StdItemList.Items[I]));
  end;
  StdItemList.Free;

  for I := 0 to MonsterList.Count - 1 do begin
    MonInfo := MonsterList.Items[I];
    if MonInfo.ItemList <> nil then begin
      for II := 0 to MonInfo.ItemList.Count - 1 do begin
        Dispose(pTMonItem(MonInfo.ItemList.Items[II]));
      end;
      MonInfo.ItemList.Free;
    end;
    Dispose(MonInfo);
  end;
  MonsterList.Free;

  for I := 0 to m_MonGenList.Count - 1 do begin
    MonGenInfo := m_MonGenList.Items[I];
    for II := 0 to MonGenInfo.CertList.Count - 1 do begin
      TBaseObject(MonGenInfo.CertList.Items[II]).Free;
    end;
    Dispose(pTMonGenInfo(m_MonGenList.Items[I]));
  end;
  m_MonGenList.Free;

  for I := 0 to m_MonFreeList.Count - 1 do begin
    TBaseObject(m_MonFreeList.Items[I]).Free;
  end;
  m_MonFreeList.Free;

  for I := 0 to m_MagicList.Count - 1 do begin
    Dispose(pTMagic(m_MagicList.Items[I]));
  end;
  m_MagicList.Free;
  m_AdminList.Free;
  for I := 0 to m_MerchantList.Count - 1 do begin
    TMerchant(m_MerchantList.Items[I]).Free;
  end;
  m_MerchantList.Free;
  for I := 0 to QuestNPCList.Count - 1 do begin
    TNormNpc(QuestNPCList.Items[I]).Free;
  end;
  QuestNPCList.Free;
  List_70.Free;
  for I := 0 to m_ChangeServerList.Count - 1 do begin
    Dispose(pTSwitchDataInfo(m_ChangeServerList.Items[I]));
  end;
  m_ChangeServerList.Free;
  for I := 0 to m_MagicEventList.Count - 1 do begin
    MagicEvent := m_MagicEventList.Items[I];
    if MagicEvent.BaseObjectList <> nil then MagicEvent.BaseObjectList.Free;

    Dispose(MagicEvent);
  end;
  m_MagicEventList.Free;
  m_NewHumanList.Free;
  m_ListOfGateIdx.Free;
  m_ListOfSocket.Free;
  for I := 0 to OldMagicList.Count - 1 do begin
    TmpList := TList(OldMagicList.Items[I]);
    for II := 0 to TmpList.Count - 1 do begin
      Dispose(pTMagic(TmpList.Items[II]));
    end;
    TmpList.Free;
  end;
  for I := 0 to m_MapMonGenCountList.Count - 1 do begin
    Dispose(pTMapMonGenCount(m_MapMonGenCountList.Items[I]));
  end;
  m_MapMonGenCountList.Free;
  OldMagicList.Free;

  for I := 0 to m_PlayObjectLevelList.Count - 1 do begin
    Dispose(pTCharName(m_PlayObjectLevelList.Objects[I]));
  end;
  m_PlayObjectLevelList.Free; //人物排行 等级

  m_WarrorObjectLevelList.Free; //战士等级排行
  m_WizardObjectLevelList.Free; //法师等级排行
  m_TaoistObjectLevelList.Free; //道士等级排行
  for I := 0 to m_PlayObjectMasterList.Count - 1 do begin
    Dispose(pTCharName(m_PlayObjectMasterList.Objects[I]));
  end;
  m_PlayObjectMasterList.Free; //徒弟数排行

  for I := 0 to m_HeroObjectLevelList.Count - 1 do begin
    Dispose(pTHeroName(m_HeroObjectLevelList.Objects[I]));
  end;
  m_HeroObjectLevelList.Free; //英雄等级排行

  m_WarrorHeroObjectLevelList.Free; //英雄战士等级排行
  m_WizardHeroObjectLevelList.Free; //英雄法师等级排行
  m_TaoistHeroObjectLevelList.Free; //英雄道士等级排行

  DeleteCriticalSection(m_LoadPlaySection);
  inherited;
end;

procedure TUserEngine.GetHumanOrder(); //获取人物排行
var
  I: Integer;
  PlayObject: TPlayObject;
  sCharName: string;
  CharName: pTCharName;
  HeroName: pTHeroName;
begin
  try
    EnterCriticalSection(HumanSortCriticalSection);
    for I := 0 to m_PlayObjectLevelList.Count - 1 do begin
      Dispose(pTCharName(m_PlayObjectLevelList.Objects[I]));
    end;
    m_PlayObjectLevelList.Clear; //人物等级总排行

    m_WarrorObjectLevelList.Clear; //战士等级排行
    m_WizardObjectLevelList.Clear; //法师等级排行
    m_TaoistObjectLevelList.Clear; //道士等级排行

    for I := 0 to m_PlayObjectMasterList.Count - 1 do begin
      Dispose(pTCharName(m_PlayObjectMasterList.Objects[I]));
    end;
    m_PlayObjectMasterList.Clear; //徒弟数排行
{$IF HEROVERSION = 1}
    for I := 0 to m_HeroObjectLevelList.Count - 1 do begin
      Dispose(pTHeroName(m_HeroObjectLevelList.Objects[I]));
    end;
    m_HeroObjectLevelList.Clear; //英雄等级排行
    m_WarrorHeroObjectLevelList.Clear; //英雄战士等级排行
    m_WizardHeroObjectLevelList.Clear; //英雄法师等级排行
    m_TaoistHeroObjectLevelList.Clear; //英雄道士等级排行
{$IFEND}
    try
      EnterCriticalSection(ProcessHumanCriticalSection);
      for I := 0 to m_PlayObjectList.Count - 1 do begin
        PlayObject := TPlayObject(m_PlayObjectList.Objects[I]);
        if PlayObject.m_WAbil.Level >= g_Config.nLimitMinOrderLevel then begin
          New(CharName);
          FillChar(CharName^, SizeOf(TCharName), 0);
          CharName^ := PlayObject.m_sCharName;
          m_PlayObjectLevelList.AddObject(IntToStr(PlayObject.m_WAbil.Level), TObject(CharName));
          case PlayObject.m_btJob of
            0: m_WarrorObjectLevelList.AddObject(IntToStr(PlayObject.m_WAbil.Level), TObject(CharName));
            1: m_WizardObjectLevelList.AddObject(IntToStr(PlayObject.m_WAbil.Level), TObject(CharName));
            2: m_TaoistObjectLevelList.AddObject(IntToStr(PlayObject.m_WAbil.Level), TObject(CharName));
          end;
        end;
        if PlayObject.m_wMasterCount > 0 then begin
          New(CharName);
          FillChar(CharName^, SizeOf(TCharName), 0);
          CharName^ := PlayObject.m_sCharName;
          m_PlayObjectMasterList.AddObject(IntToStr(PlayObject.m_wMasterCount), TObject(CharName));
        end;
{$IF HEROVERSION = 1}
        if (PlayObject.m_MyHero <> nil) and PlayObject.m_boHasHero then begin //英雄排行
          //if PlayObject.m_WAbil.Level >= g_Config.nLimitMinOrderLevel then begin
          New(HeroName);
          FillChar(HeroName^, SizeOf(THeroName), 0);
          HeroName^ := PlayObject.m_sCharName + #13 + THeroObject(PlayObject.m_MyHero).m_sCharName;
          m_HeroObjectLevelList.AddObject(IntToStr(THeroObject(PlayObject.m_MyHero).m_WAbil.Level), TObject(HeroName));
          case THeroObject(PlayObject.m_MyHero).m_btJob of
            0: m_WarrorHeroObjectLevelList.AddObject(IntToStr(THeroObject(PlayObject.m_MyHero).m_WAbil.Level), TObject(HeroName));
            1: m_WizardHeroObjectLevelList.AddObject(IntToStr(THeroObject(PlayObject.m_MyHero).m_WAbil.Level), TObject(HeroName));
            2: m_TaoistHeroObjectLevelList.AddObject(IntToStr(THeroObject(PlayObject.m_MyHero).m_WAbil.Level), TObject(HeroName));
          end;
          //end;
        end;
{$IFEND}
      end;
    finally
      LeaveCriticalSection(ProcessHumanCriticalSection);
    end;
    m_PlayObjectLevelList.QuickSort(False); //人物等级排行
    m_WarrorObjectLevelList.QuickSort(False); //战士等级排行
    m_WizardObjectLevelList.QuickSort(False); //法师等级排行
    m_TaoistObjectLevelList.QuickSort(False); //道士等级排行
    m_PlayObjectMasterList.QuickSort(False); //徒弟数排行
{$IF HEROVERSION = 1}
    m_HeroObjectLevelList.QuickSort(False); //英雄等级排行
    m_WarrorHeroObjectLevelList.QuickSort(False); //英雄战士等级排行
    m_WizardHeroObjectLevelList.QuickSort(False); //英雄法师等级排行
    m_TaoistHeroObjectLevelList.QuickSort(False); //英雄道士等级排行
{$IFEND}
  finally
    LeaveCriticalSection(HumanSortCriticalSection);
  end;
end;

procedure TUserEngine.Initialize;
var
  I: Integer;
  MonGen: pTMonGenInfo;
begin
  MerchantInitialize();
  NPCinitialize();
  for I := 0 to m_MonGenList.Count - 1 do begin
    MonGen := m_MonGenList.Items[I];
    if MonGen <> nil then begin
      MonGen.nRace := GetMonRace(MonGen.sMonName);
    end;
  end;
end;

function TUserEngine.AddMapMonGenCount(sMapName: string; nMonGenCount: Integer): Integer;
var
  I: Integer;
  MapMonGenCount: pTMapMonGenCount;
  boFound: Boolean;
begin
  Result := -1;
  boFound := False;
  for I := 0 to m_MapMonGenCountList.Count - 1 do begin
    MapMonGenCount := m_MapMonGenCountList.Items[I];
    if MapMonGenCount <> nil then begin
      if CompareText(MapMonGenCount.sMapName, sMapName) = 0 then begin
        Inc(MapMonGenCount.nMonGenCount, nMonGenCount);
        Result := MapMonGenCount.nMonGenCount;
        boFound := True;
      end;
    end;
  end;
  if not boFound then begin
    New(MapMonGenCount);
    MapMonGenCount.sMapName := sMapName;
    MapMonGenCount.nMonGenCount := nMonGenCount;
    MapMonGenCount.dwNotHumTimeTick := GetTickCount;
    MapMonGenCount.dwMakeMonGenTimeTick := GetTickCount;
    MapMonGenCount.nClearCount := 0;
    MapMonGenCount.boNotHum := True;
    m_MapMonGenCountList.Add(MapMonGenCount);
    Result := MapMonGenCount.nMonGenCount;
  end;
end;

function TUserEngine.GetMapMonGenCount(sMapName: string): pTMapMonGenCount;
var
  I: Integer;
  MapMonGenCount: pTMapMonGenCount;
begin
  Result := nil;
  for I := 0 to m_MapMonGenCountList.Count - 1 do begin
    MapMonGenCount := m_MapMonGenCountList.Items[I];
    if MapMonGenCount <> nil then begin
      if CompareText(MapMonGenCount.sMapName, sMapName) = 0 then begin
        Result := MapMonGenCount;
        Break;
      end;
    end;
  end;
end;

function TUserEngine.GetMonRace(sMonName: string): Integer;
var
  I: Integer;
  MonInfo: pTMonInfo;
begin
  Result := -1;
  for I := 0 to MonsterList.Count - 1 do begin
    MonInfo := MonsterList.Items[I];
    if MonInfo <> nil then begin
      if CompareText(MonInfo.sName, sMonName) = 0 then begin
        Result := MonInfo.btRace;
        Break;
      end;
    end;
  end;
end;

procedure TUserEngine.MerchantInitialize;
var
  I: Integer;
  Merchant: TMerchant;
  sCaption: string;
begin
  sCaption := FrmMain.Caption;
  m_MerchantList.Lock;
  try
    for I := m_MerchantList.Count - 1 downto 0 do begin
      Merchant := TMerchant(m_MerchantList.Items[I]);
      if Merchant <> nil then begin
        Merchant.m_PEnvir := g_MapManager.FindMap(Merchant.m_sMapName);
        if Merchant.m_PEnvir <> nil then begin
          Merchant.Initialize; //FFFE
          if Merchant.m_boAddtoMapSuccess and (not Merchant.m_boIsHide) then begin
            MainOutMessage('Merchant Initalize fail...' + Merchant.m_sCharName + ' ' + Merchant.m_sMapName + '(' + IntToStr(Merchant.m_nCurrX) + ':' + IntToStr(Merchant.m_nCurrY) + ')');
            m_MerchantList.Delete(I);
            Merchant.Free;
          end else begin
            Merchant.LoadNpcScript();
            Merchant.LoadNPCData();
          end;
        end else begin
          MainOutMessage(Merchant.m_sCharName + 'Merchant Initalize fail... (m.PEnvir=nil)');
          m_MerchantList.Delete(I);
          Merchant.Free;
        end;
        FrmMain.Caption := sCaption + '[正在初始交易NPC(' + IntToStr(m_MerchantList.Count) + '/' + IntToStr(m_MerchantList.Count - I) + ')]';

⌨️ 快捷键说明

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