📄 svmain.pas
字号:
end;
if g_boExitServer then begin
boStartReady := False;
exit;
end;
CanClose := False;
if Application.MessageBox(PChar(sCloseServerYesNo), PChar(sCloseServerTitle), MB_YESNO + MB_ICONQUESTION) = mrYes then begin
g_boExitServer := True;
CloseGateSocket();
g_Config.boKickAllUser := True;
// RunSocket.CloseAllGate;
// GateSocket.Close;
CloseTimer.Enabled := True;
end;
end;
procedure SaveItemData();
var
n01:Integer;
begin
n01:=0;
boSaveData := False;
while TRUE do begin
Inc(n01);
if g_BigStorageList.SaveStorageList() then break;
if n01 >=50 then break;
end;
n01 := 0;
while TRUE do begin
Inc(n01);
if g_SellOffGoodList.SaveSellOffGoodList() then break;
if n01 >=50 then break;
end;
n01 := 0;
while TRUE do begin
Inc(n01);
if g_SellOffGoldList.SaveSellOffGoldList() then break;
if n01 >= 50 then break;
end;
end;
procedure TFrmMain.CloseTimerTimer(Sender: TObject);
resourcestring
sCloseServer = '%s [正在关闭服务器(%s %d/%s %d)...]';
sCloseServer1 = '%s [服务器已关闭]';
begin
Caption := Format(sCloseServer, [g_Config.sServerName,'人物', UserEngine.OnlinePlayObject,'数据', FrontEngine.SaveListCount]);
if UserEngine.OnlinePlayObject = 0 then begin
if FrontEngine.IsIdle then begin
CloseTimer.Enabled := False;
SaveItemData();
Caption := Format(sCloseServer1, [g_Config.sServerName]);
StopService;
Close;
end;
end;
end;
procedure TFrmMain.SaveVariableTimerTimer(Sender: TObject);
begin
SaveItemNumber();
if boSaveData then begin
if g_SellOffGoodList <> nil then g_SellOffGoodList.SaveSellOffGoodList();
if g_SellOffGoldList <> nil then g_SellOffGoldList.SaveSellOffGoldList();
if g_BigStorageList <> nil then g_BigStorageList.SaveStorageList();
end;
end;
procedure TFrmMain.GateSocketClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
RunSocket.CloseErrGate(Socket, ErrorCode);
end;
procedure TFrmMain.GateSocketClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
RunSocket.CloseGate(Socket);
end;
procedure TFrmMain.GateSocketClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
RunSocket.AddGate(Socket);
end;
procedure TFrmMain.GateSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
RunSocket.SocketRead(Socket);
end;
procedure TFrmMain.RunTimerTimer(Sender: TObject);
begin
if boStartReady then begin
RunSocket.Execute;
FrmIDSoc.Run;
UserEngine.Execute;
ProcessGameRun();
if nServerIndex = 0 then
FrmSrvMsg.Run
else 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 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
MainOutMessage(E.Message);
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;
IdUDPClientLog.Host := g_Config.sLogServerAddr;
IdUDPClientLog.Port := g_Config.nLogServerPort;
LoadServerTable();
LoadClientFile();
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
//boThief := True;
Config := @g_Config;
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);
FillChar(g_Config.GlobalAVal, SizeOf(g_Config.GlobalAVal), #0);
{$IF USECODE = USEREMOTECODE}
New(Config.Encode6BitBuf);
Config.Encode6BitBuf^ := g_Encode6BitBuf;
New(Config.Decode6BitBuf);
Config.Decode6BitBuf^ := g_Decode6BitBuf;
{$IFEND}
LoadConfig();
Memo := MemoLog;
nServerIndex := 0;
zPlugOfEngine := TPlugOfEngine.Create;
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 := TGuildManager.Create;
g_EventManager := TEventManager.Create;
g_CastleManager := TCastleManager.Create;
{
g_UserCastle := TUserCastle.Create;
CastleManager.Add(g_UserCastle);
}
FrontEngine := TFrontEngine.Create(True);
UserEngine := TUserEngine.Create();
RobotManage := TRobotManage.Create;
g_MakeItemList := TStringList.Create;
g_StartPointList := TGStringList.Create;
ServerTableList := TList.Create;
g_DenySayMsgList := TQuickList.Create;
MiniMapList := TStringList.Create;
g_UnbindList := TStringList.Create;
LineNoticeList := TStringList.Create;
QuestDiaryList := TList.Create;
ItemEventList := TStringList.Create;
AbuseTextList := TStringList.Create;
g_MonSayMsgList := 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_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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -