svmain.pas
来自「2009最新 传奇汉化0599代码 传奇汉化」· PAS 代码 · 共 1,827 行 · 第 1/4 页
PAS
1,827 行
{
Label20.Caption:='MonG' + IntToStr(g_nMonGenTime) + '/' + IntToStr(g_nMonGenTimeMin) + '/' + IntToStr(g_nMonGenTimeMax) + ' ' +
'MonP' + IntToStr(g_nMonProcTime) + '/' + IntToStr(g_nMonProcTimeMin) + '/' + IntToStr(g_nMonProcTimeMax) + ' ' +
'ObjRun' + IntToStr(g_nBaseObjTimeMin) + '/' + IntToStr(g_nBaseObjTimeMax);
}
Label20.Caption:=format('MonG:%d/%d/%d MonP:%d/%d/%d ObjRun:%d/%d',[g_nMonGenTime,g_nMonGenTimeMin,g_nMonGenTimeMax,g_nMonProcTime,g_nMonProcTimeMin,g_nMonProcTimeMax,g_nBaseObjTimeMin,g_nBaseObjTimeMax]);
tTimeCount:=GetTickCount() / (24 * 60 * 60 * 1000);
{if tTimeCount >= 36 then LbTimeCount.Font.Color:=clBlue
else LbTimeCount.Font.Color:=clBlack;}
StatusBar.Panels[2].Text := CurrToStr(tTimeCount) + 'Mins';
{
//004E5B78
for i:= Low(RunSocket.GateList) to High(RunSocket.GateList) do begin
GateInfo:=@RunSocket.GateList[i];
if GateInfo.boUsed and (GateInfo.Socket <> nil) then begin
if GateInfo.nSendMsgBytes < 1024 then begin
tGate:=IntToStr(GateInfo.nSendMsgBytes) + 'b ';
end else begin//004E5BDA
tGate:=IntToStr(GateInfo.nSendMsgBytes div 1024) + 'kb ';
end;//004E5C0A
sGate:='[G' + IntToStr(i) + ': ' +
IntToStr(GateInfo.nSendMsgCount) + '/' +
IntToStr(GateInfo.nSendRemainCount) + ' ' +
tGate + IntToStr(GateInfo.nSendedMsgCount) + ']' + sGate;
end;//004E5C90
end;
Label3.Caption:=sGate;
}
// GridGate
nRow:=1;
//for i:= Low(RunSocket.GateList) to High(RunSocket.GateList) do begin
for i:= Low(g_GateArr) to High(g_GateArr) do begin
GridGate.Cells[0,I + 1]:='';
GridGate.Cells[1,I + 1]:='';
GridGate.Cells[2,I + 1]:='';
GridGate.Cells[3,I + 1]:='';
GridGate.Cells[4,I + 1]:='';
GridGate.Cells[5,I + 1]:='';
GridGate.Cells[6,I + 1]:='';
GateInfo:=@g_GateArr[i];
//GateInfo:=@RunSocket.GateList[i];
if GateInfo.boUsed and (GateInfo.Socket <> nil) then begin
GridGate.Cells[0,nRow]:=IntToStr(I);
GridGate.Cells[1,nRow]:=GateInfo.sAddr + ':' + IntToStr(GateInfo.nPort);
GridGate.Cells[2,nRow]:=IntToStr(GateInfo.nSendMsgCount);
GridGate.Cells[3,nRow]:=IntToStr(GateInfo.nSendedMsgCount);
GridGate.Cells[4,nRow]:=IntToStr(GateInfo.nSendRemainCount);
if GateInfo.nSendMsgBytes < 1024 then begin
GridGate.Cells[5,nRow]:=IntToStr(GateInfo.nSendMsgBytes) + 'b';
end else begin
GridGate.Cells[5,nRow]:=IntToStr(GateInfo.nSendMsgBytes div 1024) + 'kb';
end;
GridGate.Cells[6,nRow]:=IntToStr(GateInfo.nUserCount) + '/' + IntToStr(GateInfo.UserList.Count);
Inc(nRow);
end;
end;
Inc(nRunTimeMax);
if g_nSockCountMax > 0 then Dec(g_nSockCountMax);
if g_nUsrTimeMax > 0 then Dec(g_nUsrTimeMax);
if g_nHumCountMax > 0 then Dec(g_nHumCountMax);
if g_nMonTimeMax > 0 then Dec(g_nMonTimeMax);
if dwUsrRotCountMax > 0 then Dec(dwUsrRotCountMax);
if g_nMonGenTimeMin > 1 then Dec(g_nMonGenTimeMin,2);
if g_nMonProcTimeMin > 1 then Dec(g_nMonProcTimeMin,2);
if g_nBaseObjTimeMax > 0 then Dec(g_nBaseObjTimeMax);
end;
procedure TFrmMain.StartTimerTimer(Sender: TObject);//004E4848
var
nCode:Integer;
begin
SendGameCenterMsg(SG_STARTNOW,'正在启动游戏主程序...');
StartTimer.Enabled:=False;
FrmDB:=TFrmDB.Create();
StartService();
try
if SizeOf(THumData)<> SIZEOFTHUMAN then begin
ShowMessage('SizeOf(THuman) ' + IntToStr(sizeof(THumData)) + ' <> SIZEOFTHUMAN ' + IntToStr(SIZEOFTHUMAN));
Close;
exit;
end;
if not LoadClientFile then begin
Close;
exit;
end;
FrmDB.InitDBM;
LoadGameLogItemNameList();
LoadDenyIPAddrList();
LoadDenyAccountList();
LoadDenyChrNameList();
LoadNoClearMonList();
//thedeath
nEMKills:=0;//make sure all the em values are set
dwEMSpellTick:=GetTickCount();//em value again
dwEMDied:=0;//em didnt die yet
MemoLog.Lines.Add('Loading StdItem.DB...');
nCode:=FrmDB.LoadItemsDB;
if nCode < 0 then begin
if nCode = -3 then MemoLog.Lines.Add('StdItems.DB : No Items in DB. Please Check!' + 'Code= ' + IntToStr(nCode))
else MemoLog.Lines.Add('StdItems.DB : Failure was occurred while reading this file.' + 'Code= ' + IntToStr(nCode));
exit;
end;
MemoLog.Lines.Add(format('StdItem.DB loaded(%d).',[UserEngine.StdItemList.Count]));
{$IFDEF UseTXT}
MemoLog.Lines.Add('File Setting: [TextFiles]');
{$ELSE}
MemoLog.Lines.Add('File Setting: [Database]');
{$ENDIF}
MemoLog.Lines.Add('Loading MapFiles...');
nCode:= FrmDB.LoadMapInfo;
if nCode < 0 then begin
MemoLog.Lines.Add('MapInfo : Failure occurred.' + 'Code= ' + IntToStr(nCode));
exit;
end;
MemoLog.Lines.Add(format('Mapfile loaded(%d).',[g_MapManager.Count]));
{$IFDEF UseTXT}
MemoLog.Lines.Add('Loading Minimap...');
nCode:= FrmDB.LoadMinMap;
if nCode < 0 then begin
MemoLog.Lines.Add('Minimap.txt : Failure was occurred while reading this file.' + 'Code: ' + IntToStr(nCode));
exit;
end;
MemoLog.Lines.Add('Minimap loaded...');
{$ENDIF}
nCode:= FrmDB.LoadDecorationList;
if nCode < 0 then begin
MemoLog.Lines.Add('DecoItem.txt : Failure was occurred while reading this file.' + 'Code= ' + IntToStr(nCode));
exit;
end;
MemoLog.Lines.Add('DecoItem loaded...');
MemoLog.Lines.Add('Loading Guild Territorys...');
g_GuildTerritory.LoadAll();
MemoLog.Lines.Add('Loading Monster.DB...');
nCode:= FrmDB.LoadMonsterDB;
if nCode < 0 then begin
MemoLog.Lines.Add('Monster.DB : Failure was occurred while reading this file.' + 'Code= ' + IntToStr(nCode));
exit;
end;
MemoLog.Lines.Add(format('Monster.DB loaded(%d).',[UserEngine.MonsterList.Count]));
MemoLog.Lines.Add('Loading Magic.DB...');
nCode:= FrmDB.LoadMagicDB;
if nCode < 0 then begin
MemoLog.Lines.Add('Magic.DB : Failure was occurred while reading this file.' + 'Code= ' + IntToStr(nCode));
exit;
end;
MemoLog.Lines.Add(format('Magic.DB loaded(%d).',[UserEngine.m_MagicList.Count]));
MemoLog.Lines.Add('Loading MonGen.txt...');
nCode:= FrmDB.LoadMonGen;
if nCode < 0 then begin
MemoLog.Lines.Add('MonGen.txt : Failure was occurred while reading this file.' + 'Code= ' + IntToStr(nCode));
exit;
end;
MemoLog.Lines.Add(format('MonGen.txt loaded(%d).',[UserEngine.m_MonGenList.Count]));
MemoLog.Lines.Add('Loading GenMsg.txt...');
LoadMonSayMsg();
MemoLog.Lines.Add(format('GenMsg.txt loaded(%d).',[g_MonSayMsgList.Count]));
LoadDisableTakeOffList();
LoadMonDropLimitList();
LoadDisableMakeItem();
LoadEnableMakeItem();
LoadAllowSellOffItem();
LoadDisableMoveMap;
ItemUnit.LoadCustomItemName();
LoadDisableSendMsgList();
LoadItemBindIPaddr();
LoadItemBindAccount();
LoadItemBindCharName();
LoadUnMasterList();
LoadUnForceMasterList();
MemoLog.Lines.Add('Loading UnbindList.txt...');
nCode:= FrmDB.LoadUnbindList;
if nCode < 0 then begin
MemoLog.Lines.Add('UnbindList.txt : Failure was occurred while reading this file.' + 'Code= ' + IntToStr(nCode));
exit;
end;
MemoLog.Lines.Add('UnbindList information loaded.');
MemoLog.Lines.Add('Loading MapQuest.txt...');
nCode:= FrmDB.LoadMapQuest;
if nCode < 0 then begin
MemoLog.Lines.Add('MapQuest.txt : Failure was occurred while reading this file.' + 'Code= ' + IntToStr(nCode));
exit;
end;
MemoLog.Lines.Add('MapQuest information loaded.');
MemoLog.Lines.Add('Loading QuestDiary\*.txt...');
nCode:= FrmDB.LoadQuestDiary;
if nCode < 0 then begin
MemoLog.Lines.Add('QuestDiary\*.txt : Failure was occurred while reading this file.' + 'Code= ' + IntToStr(nCode));
exit;
end;
MemoLog.Lines.Add('QuestDiary information loaded.');
if LoadAbuseInformation('.\!Abuse.txt') then begin
MemoLog.Lines.Add('!Abuse.txt loaded..');
end;
MemoLog.Lines.Add('Loading LineNotice...');
if not LoadLineNotice(g_Config.sNoticeDir + 'LineNotice.txt') then begin
MemoLog.Lines.Add('Line Notice.txt : Failed to load.');
end;
MemoLog.Lines.Add('Line Notice loaded...');
FrmDB.LoadAdminList();
MemoLog.Lines.Add('Admin List loaded..');
g_GuildManager.LoadGuildInfo();
MemoLog.Lines.Add('Guild List loaded..');
g_CastleManager.LoadCastleList();
MemoLog.Lines.Add('Castle List loaded..');
//UserCastle.Initialize;
g_CastleManager.Initialize;
MemoLog.Lines.Add('Castle initialized..');
if (nServerIndex=0) then FrmSrvMsg.StartMsgServer
else FrmMsgClient.ConnectMsgServer;
StartEngine();
boStartReady:=True;
Sleep(500);
{$IF DBSOCKETMODE = TIMERENGINE}
ConnectTimer.Enabled:=True;
{$ELSE}
FillChar(g_Config.DBSOcketThread,SizeOf(g_Config.DBSOcketThread),0);
g_Config.DBSOcketThread.Config:=@g_Config;
g_Config.DBSOcketThread.hThreadHandle:=CreateThread(nil,
0,
@DBSocketThread,
@g_Config.DBSOcketThread,
0,
g_Config.DBSOcketThread.dwThreadID);
{$IFEND}
{$IF IDSOCKETMODE = THREADENGINE}
FillChar(g_Config.IDSocketThread,SizeOf(g_Config.IDSocketThread),0);
g_Config.IDSocketThread.Config:=@g_Config;
g_Config.IDSocketThread.hThreadHandle:=CreateThread(nil,
0,
@IDSocketThread,
@g_Config.IDSocketThread,
0,
g_Config.IDSocketThread.dwThreadID);
{$IFEND}
g_dwRunTick := GetTickCount();
n4EBD1C := 0;
g_dwUsrRotCountTick := GetTickCount();
{$IF USERENGINEMODE = THREADENGINE}
FillChar(g_Config.UserEngineThread,SizeOf(g_Config.UserEngineThread),0);
g_Config.UserEngineThread.Config:=@g_Config;
g_Config.UserEngineThread.hThreadHandle:=CreateThread(nil,
0,
@UserEngineThread,
@g_Config.UserEngineThread,
0,
g_Config.UserEngineThread.dwThreadID);
{$ELSE}
{$IFEND}
RunTimer.Enabled:=True;
SendGameCenterMsg(SG_STARTOK,'游戏主程序启动完成...');
GateSocket.Address:=g_Config.sGateAddr;
GateSocket.Port:=g_Config.nGatePort;
g_GateSocket:=GateSocket;
boRemoteOpenGateSocket:=True;
except
on e: Exception do
MainOutMessage('StartTimer exception: ' + E.Message);
end;
end;
procedure TFrmMain.StartEngine(); //004E5F2C
var
nCode:Integer;
nCheckCode:Integer;
ResourceString
sExceptionMsg = '[Exception] TFrmMain::StartEngine - Code=%d';
begin
nCheckCode := 0;
try
{$IF IDSOCKETMODE = TIMERENGINE}
FrmIDSoc.Initialize;
MemoLog.Lines.Add('IDSoc Initialized..');
{$IFEND}
nCheckCode := 1;
g_MapManager.LoadMapDoor;
MemoLog.Lines.Add('GrobalEnvir loaded..');
nCheckCode := 2;
MakeStoneMines();
MemoLog.Lines.Add('MakeStoneMines...');
nCheckCode := 3;
nCode:= FrmDB.LoadMerchant;
if nCode < 0 then begin
MemoLog.Lines.Add('Merchant.txt : Failure was occurred while reading this file.' + 'Code= ' + IntToStr(nCode));
exit;
end;
MemoLog.Lines.Add('Merchant loaded...');
nCheckCode := 4;
if not g_Config.boVentureServer then begin
nCode:= FrmDB.LoadGuardList;
if nCode < 0 then begin
MemoLog.Lines.Add('Guardlist.txt : Failure was occurred while reading this file.' + 'Code= ' + IntToStr(nCode));
end;
MemoLog.Lines.Add('GuardList loaded..');
end;
nCheckCode := 5;
nCode:= FrmDB.LoadNpcs;
if nCode < 0 then begin
MemoLog.Lines.Add('Npc.txt : Failure was occurred while reading this file.' + 'Code= ' + IntToStr(nCode));
exit;
end;
MemoLog.Lines.Add('Npc loaded..');
nCheckCode := 6;
nCode:= FrmDB.LoadMakeItem;
if nCode < 0 then begin
MemoLog.Lines.Add('MakeItem.txt : Failure was occurred while reading this file.' + 'Code= ' + IntToStr(nCode));
exit;
end;
MemoLog.Lines.Add('MakeItem loaded..');
nCheckCode := 7;
nCode:= FrmDB.LoadStartPoint;
if nCode < 0 then begin
MemoLog.Lines.Add('StartPoint.txt : Failure was occurred while reading this file.' + 'Code= ' + IntToStr(nCode));
Close;
end;
MemoLog.Lines.Add('StartPoints loaded...');
nCheckCode := 8;
FrontEngine.Resume;
MemoLog.Lines.Add('F-Engine resumed..');
nCheckCode := 9;
UserEngine.Initialize;
MemoLog.Lines.Add('U-Engine initialized..');
nCheckCode := 10;
if (not DirectoryExists(g_Config.sEnvirDir+ 'Memo_Saved')) then begin
if (not CreateDir(g_Config.sEnvirDir+ 'Memo_Saved')) then
MemoLog.Lines.Add('Error: Memo_Saved directory cannot be created.');
end;
if not DirectoryExists(g_Config.sEnvirDir+ 'Friend_Saved') then begin
if (not CreateDir(g_Config.sEnvirDir+ 'Friend_Saved')) then
MemoLog.Lines.Add('Error: Friend_Saved directory cannot be created.');
end;
except
MainOutMessage(format(sExceptionMsg, [nCheckCode]));
end;
end;
procedure TFrmMain.MakeStoneMines();//004E5E88
var
i,nW,nH:Integer;
Envir:TEnvirnoment;
begin
for i:=0 to g_MapManager.Count -1 do begin
Envir:=TEnvirnoment(g_MapManager.Items[i]);
if Envir.Flag.boMINE or Envir.Flag.boMINE2 or Envir.Flag.boMINE3 then begin
for nW:=0 to Envir.Header.wWidth - 1 do begin
for nH:=0 to Envir.Header.wHeight - 1 do begin
//if (nW mod 2 = 0) and (nH mod 2 = 0) then
TStoneMineEvent.Create(Envir,nW,nH,ET_MINE);
end;
end;
end;
end;
end;
function TFrmMain.LoadClientFile():Boolean;
begin
MemoLog.Lines.Add('Loaded client version information and server table...');
if not (g_Config.sClientFile1='') then g_Config.nClientFile1_CRC:=CalcFileCRC(g_Config.sClientFile1);
if not (g_Config.sClientFile2='') then g_Config.nClientFile2_CRC:=CalcFileCRC(g_Config.sClientFile2);
if not (g_Config.sClientFile3='') then g_Config.nClientFile3_CRC:=CalcFileCRC(g_Config.sClientFile3);
if (g_Config.nClientFile1_CRC<>0) or (g_Config.nClientFile2_CRC<>0) or (g_Config.nClientFile3_CRC<>0) then begin
Result:=True;
end else begin
MemoLog.Lines.Add('Loading client version information failed. check !setup.txt -> [setup] -> clientfile1,..');
MemoLog.Lines.Add('Ensure you''ve copied the client exe into the M2 folder and it has the same name in !setup.txt');
Result:=TRUE;
end;
end;
procedure TFrmMain.FormCreate(Sender: TObject);
var
nX,nY:Integer;
ResourceString
sGateIdx = 'Idx';
sGateIPaddr = 'Address';
sGateListMsg = 'Msg';
sGateSendCount = 'SCount';
sGateMsgCount = 'MCount';
sGateSendKB = 'KB';
sGateUserCount = 'Users';
begin
Randomize;
LogUDP := TWSocket.Create(nil);
g_dwGameCenterHandle:=Str_ToInt(ParamStr(1),0);
nX:=Str_ToInt(ParamStr(2),-1);
nY:=Str_ToInt(ParamStr(3),-1);
if (nX >= 0) or (nY >= 0) then begin
Left:=nX;
Top:=nY;
end;
SendGameCenterMsg(SG_FORMHANDLE,IntToStr(Self.Handle));
GridGate.RowCount:= 21;
GridGate.Cells[0,0]:=sGateIdx;
GridGate.Cells[1,0]:=sGateIPaddr;
GridGate.Cells[2,0]:=sGateListMsg;
GridGate.Cells[3,0]:=sGateSendCount;
GridGate.Cells[4,0]:=sGateMsgCount;
GridGate.Cells[5,0]:=sGateSendKB;
GridGate.Cells[6,0]:=sGateUserCount;
{
GridGate.Cells[0,1]:='0';
GridGate.Cells[1,1]:='888.888.888.888:8888';
GridGate.Cells[2,1]:='10000';
GridGate.Cells[3,1]:='10000';
GridGate.Cells[4,1]:='10000';
GridGate.Cells[5,1]:='10000';
}
GateSocket:=TServerSocket.Create(Owner);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?