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