📄 svmain.pas
字号:
FrmMsgClient.Run;
end;
Inc(n4EBD1C);
if (GetTickCount - g_dwRunTick) > 250 then
begin
g_dwRunTick := GetTickCount();
nRunTimeMin := n4EBD1C;
if nRunTimeMax > nRunTimeMin then
nRunTimeMax := nRunTimeMin;
n4EBD1C := 0;
end;
if assigned(g_GateSocket) then
begin
if not GateSocket.Active then
GateSocket.Active := True;
end;
(*if boRemoteOpenGateSocket then
begin
if not boRemoteOpenGateSocketed then
begin
boRemoteOpenGateSocketed := True;
try
if assigned(g_GateSocket) then
begin
g_GateSocket.Active := True;
end;
except
on E: Exception do
begin
{$IF SHowErr = 1}
MainOutMessage(E.Message);
{$IFEND}
end;
end;
end;
end; *)
end;
procedure TFrmMain.ConnectTimerTimer(Sender: TObject);
begin
if DBSocket.Active then
exit;
DBSocket.Active := True;
end;
procedure TFrmMain.ReloadConfig(Sender: TObject);
begin
try
LoadConfig();
FrmIDSoc.Timer1Timer(Sender);
if not (nServerIndex = 0) then
begin
if not FrmMsgClient.MsgClient.Active then
begin
FrmMsgClient.MsgClient.Active := True;
end;
end;
LogUDP.RemoteHost := g_Config.sLogServerAddr;
LogUDP.RemotePort := IntToStr(g_Config.nLogServerPort);
LoadServerTable();
finally
end;
end;
procedure TFrmMain.MemoLogChange(Sender: TObject);
begin
if MemoLog.Lines.Count > 500 then
MemoLog.Clear;
end;
procedure TFrmMain.MemoLogDblClick(Sender: TObject);
begin
ClearMemoLog();
end;
procedure TFrmMain.MENU_CONTROL_EXITClick(Sender: TObject);
begin
Close;
end;
procedure TFrmMain.MENU_CONTROL_RELOAD_CONFClick(Sender: TObject);
begin
ReloadConfig(Sender);
end;
procedure TFrmMain.MENU_CONTROL_CLEARLOGMSGClick(Sender: TObject);
begin
ClearMemoLog();
end;
procedure TFrmMain.SpeedButton1Click(Sender: TObject);
begin
ReloadConfig(Sender);
end;
procedure TFrmMain.MENU_CONTROL_RELOAD_ITEMDBClick(Sender: TObject);
begin
FrmDB.LoadItemsDB();
MainOutMessage('重新加载物品数据库完成...');
end;
procedure TFrmMain.MENU_CONTROL_RELOAD_MAGICDBClick(Sender: TObject);
begin
FrmDB.LoadMagicDB();
MainOutMessage('重新加载技能数据库完成...');
end;
procedure TFrmMain.MENU_CONTROL_RELOAD_MONSTERDBClick(Sender: TObject);
begin
FrmDB.LoadMonsterDB();
MainOutMessage('重新加载怪物数据库完成...');
end;
procedure TFrmMain.StartService;
var
TimeNow : TDateTime;
Year, Month, Day, Hour, Min, Sec, MSec: Word;
F : TextFile;
Config : pTConfig;
begin
Config := @g_Config;
MENU_CONTROL_START.Enabled := False;
MENU_CONTROL_STOP.Enabled := False;
// ShowMessage(IntToStr(High(LongWord)));
nRunTimeMax := 99999;
g_nSockCountMax := 0;
g_nUsrTimeMax := 0;
g_nHumCountMax := 0;
g_nMonTimeMax := 0;
g_nMonGenTimeMax := 0;
g_nMonProcTime := 0;
g_nMonProcTimeMin := 0;
g_nMonProcTimeMax := 0;
dwUsrRotCountMin := 0;
dwUsrRotCountMax := 0;
g_nProcessHumanLoopTime := 0;
g_dwHumLimit := 30;
g_dwMonLimit := 30;
g_dwZenLimit := 5;
g_dwNpcLimit := 5;
g_dwSocLimit := 10;
nDecLimit := 20;
Config.sDBSocketRecvText := '';
Config.boDBSocketWorking := False;
Config.nLoadDBErrorCount := 0;
Config.nLoadDBCount := 0;
Config.nSaveDBCount := 0;
Config.nDBQueryID := 0;
Config.nItemNumber := 0;
Config.nItemNumberEx := High(Integer) div 2;
boStartReady := False;
g_boExitServer := False;
boFilterWord := True;
Config.nWinLotteryCount := 0;
Config.nNoWinLotteryCount := 0;
Config.nWinLotteryLevel1 := 0;
Config.nWinLotteryLevel2 := 0;
Config.nWinLotteryLevel3 := 0;
Config.nWinLotteryLevel4 := 0;
Config.nWinLotteryLevel5 := 0;
Config.nWinLotteryLevel6 := 0;
FillChar(g_Config.GlobalVal, SizeOf(g_Config.GlobalVal), #0);
FillChar(g_Config.GlobaDyMval, SizeOf(g_Config.GlobaDyMval), #0);
LoadConfig();
Memo := MemoLog;
nServerIndex := 0;
//PlugInEngine := TPlugInManage.Create;
RunSocket := TRunSocket.Create();
MainLogMsgList := TStringList.Create;
LogStringList := TStringList.Create;
LogonCostLogList := TStringList.Create;
g_MapManager := TMapManager.Create;
ItemUnit := TItemUnit.Create;
MagicManager := TMagicManager.Create;
NoticeManager := TNoticeManager.Create;
g_GuildManager[0] := TGuildManager.Create;
g_GuildManager[0].DBIndex:=0;
g_GuildManager[1] := TGuildManager.Create;
g_GuildManager[1].DBIndex:=1;
g_EventManager := TEventManager.Create;
g_CastleManager := TCastleManager.Create;
FrontEngine := TFrontEngine.Create(True);
UserEngine := TUserEngine.Create();
RobotManage := TRobotManage.Create;
g_MakeItemList := TStringList.Create;
g_StartPointList := TGStringList.Create;
ServerTableList := TmyList.Create;
g_DenySayMsgList := TQuickList.Create;
MiniMapList := TStringList.Create;
g_UnbindList := TStringList.Create;
LineNoticeList := TStringList.Create;
QuestDiaryList := TMyList.Create;
ItemEventList := TStringList.Create;
AbuseTextList := TStringList.Create;
g_MonSayMsgList := TStringList.Create;
g_SayMsgList := TStringList.Create;
g_DisableMakeItemList := TGStringList.Create;
g_EnableMakeItemList := TGStringList.Create;
g_DisableMoveMapList := TGStringList.Create;
g_ItemNameList := TGList.Create;
g_DisableSendMsgList := TGStringList.Create;
g_MonDropLimitLIst := TGStringList.Create;
g_DisableTakeOffList := TGStringList.Create;
g_ItemLimiteList := TStringList.Create;
g_EnableSellOffList := TStringList.Create;
g_UnMasterList := TGStringList.Create;
g_UnForceMasterList := TGStringList.Create;
g_GameLogItemNameList := TGStringList.Create;
g_DenyIPAddrList := TGStringList.Create;
g_DenyChrNameList := TGStringList.Create;
g_DenyAccountList := TGStringList.Create;
g_NoClearMonList := TGStringList.Create;
g_ItemBindIPaddr := TGList.Create;
g_ItemBindAccount := TGList.Create;
g_ItemBindCharName := TGList.Create;
// n4EBBD0 := 0;
InitializeCriticalSection(LogMsgCriticalSection);
InitializeCriticalSection(ProcessMsgCriticalSection);
InitializeCriticalSection(ProcessHumanCriticalSection);
InitializeCriticalSection(Config.UserIDSection);
InitializeCriticalSection(UserDBSection);
InitializeCriticalSection(UserHumDataSection);
CS_6 := TCriticalSection.Create;
// MD5 := TMD5.Create;
g_DynamicVarList := TMyList.Create;
// AddToObjTable(RunSocket, 'RunSocket');
//AddToObjTable(UserEngine, 'UserEngine');
TimeNow := Now();
DecodeDate(TimeNow, Year, Month, Day);
DecodeTime(TimeNow, Hour, Min, Sec, MSec);
if not DirectoryExists(g_Config.sLogDir) then
begin
CreateDir(Config.sLogDir);
end;
sLogFileName := g_Config.sLogDir {'.\Log\'} + IntToStr(Year) + '-' +
IntToStr2(Month) + '-' + IntToStr2(Day) + '.' + IntToStr2(Hour) + '-' +
IntToStr2(Min) + '.txt';
AssignFile(F, sLogFileName);
Rewrite(F);
CloseFile(F);
// PlugInEngine.LoadPlugIn();
MemoLog.Lines.Add('正在读取配置信息...');
nShiftUsrDataNameNo := 1;
DBSocket.Address := g_Config.sDBAddr;
DBSocket.Port := g_Config.nDBPort;
DBSocket.Active := True;
sCaption := g_Config.sServerName;
// +' ' + DateToStr(Date)+ ' ' + TimeToStr(Time);
LoadServerTable();
LogUDP.RemoteHost := g_Config.sLogServerAddr;
LogUDP.RemotePort := IntToStr(g_Config.nLogServerPort);
Application.OnIdle := AppOnIdle;
Application.OnException := OnProgramException;
dwRunDBTimeMax := GetTickCount();
g_dwStartTick := GetTickCount();
Timer1.Enabled := True;
// StartTimer.Enabled := True;
boServiceStarted := True;
MENU_CONTROL_STOP.Enabled := True;
end;
procedure TFrmMain.StopService;
var
i : Integer;
Config : pTConfig;
begin
Config := @g_Config;
MENU_CONTROL_START.Enabled := False;
MENU_CONTROL_STOP.Enabled := False;
Timer1.Enabled := False;
RunTimer.Enabled := False;
FrmIDSoc.Close;
GateSocket.Close;
Memo := nil;
SaveItemNumber();
g_CastleManager.Free;
// UserCastle.Save;
// UserCastle.Free;
{$IF USERENGINEMODE = THREADENGINE}
ThreadInfo := @Config.UserEngineThread;
ThreadInfo.boTerminaled := True;
if WaitForSingleObject(ThreadInfo.hThreadHandle, 1000) <> 0 then
begin
SuspendThread(ThreadInfo.hThreadHandle);
end;
{$IFEND}
{$IF DBSOCKETMODE = THREADENGINE}
ThreadInfo := @Config.DBSOcketThread;
ThreadInfo.boTerminaled := True;
if WaitForSingleObject(ThreadInfo.hThreadHandle, 1000) <> 0 then
begin
SuspendThread(ThreadInfo.hThreadHandle);
end;
{$IFEND}
FrontEngine.Terminate();
// FrontEngine.WaitFor;
FrontEngine.Free;
MagicManager.Free;
UserEngine.Free;
RobotManage.Free;
//MessageBox(0,PChar(IntToStr(CertCheck.Count)),'aaa',MB_OK);
RunSocket.Free;
ConnectTimer.Enabled := False;
DBSocket.Close;
MainLogMsgList.Free;
LogStringList.Free;
LogonCostLogList.Free;
g_MapManager.Free;
ItemUnit.Free;
NoticeManager.Free;
g_GuildManager[0].Free;
g_GuildManager[1].Free;
for i := 0 to g_MakeItemList.Count - 1 do
begin
TStringList(g_MakeItemList.Objects[i]).Free;
end;
g_MakeItemList.Free;
// g_UNMakeItemNPC.Free;
g_StartPointList.Free;
ServerTableList.Free;
g_DenySayMsgList.Free;
MiniMapList.Free;
g_UnbindList.Free;
LineNoticeList.Free;
QuestDiaryList.Free;
ItemEventList.Free;
AbuseTextList.Free;
g_MonSayMsgList.Free;
g_DisableMakeItemList.Free;
g_EnableMakeItemList.Free;
g_DisableMoveMapList.Free;
g_ItemNameList.Free;
g_DisableSendMsgList.Free;
g_MonDropLimitLIst.Free;
g_DisableTakeOffList.Free;
g_ItemLimiteList.Free;
g_EnableSellOffList.Free;
g_UnMasterList.Free;
g_UnForceMasterList.Free;
g_GameLogItemNameList.Free;
g_DenyIPAddrList.Free;
g_DenyChrNameList.Free;
g_DenyAccountList.Free;
g_NoClearMonList.Free;
for i := 0 to g_ItemBindIPaddr.Count - 1 do
begin
DisPose(pTItemBind(g_ItemBindIPaddr.Items[i]));
end;
for i := 0 to g_ItemBindAccount.Count - 1 do
begin
DisPose(pTItemBind(g_ItemBindAccount.Items[i]));
end;
for i := 0 to g_ItemBindCharName.Count - 1 do
begin
DisPose(pTItemBind(g_ItemBindCharName.Items[i]));
end;
g_ItemBindIPaddr.Free;
g_ItemBindAccount.Free;
g_ItemBindCharName.Free;
DeleteCriticalSection(LogMsgCriticalSection);
DeleteCriticalSection(ProcessMsgCriticalSection);
DeleteCriticalSection(ProcessHumanCriticalSection);
DeleteCriticalSection(Config.UserIDSection);
DeleteCriticalSection(UserDBSection);
DeleteCriticalSection( UserHumDataSection);
CS_6.Free;
for i := 0 to g_DynamicVarList.Count - 1 do
begin
DisPose(pTDynamicVar(g_DynamicVarList.Items[i]));
end;
g_DynamicVarList.Free;
boServiceStarted := False;
MENU_CONTROL_START.Enabled := True;
end;
procedure TFrmMain.MENU_CONTROL_STARTClick(Sender: TObject);
begin
// StartService();
end;
procedure TFrmMain.MENU_CONTROL_STOPClick(Sender: TObject);
begin
// StopService();
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -