📄 svmain.pas
字号:
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);
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;
{$IF USECODE = USEREMOTECODE}
Dispose(g_Config.Encode6BitBuf);
Dispose(g_Config.Decode6BitBuf);
{$IFEND}
end;
procedure TFrmMain.MENU_CONTROL_STARTClick(Sender: TObject);
begin
StartService();
end;
procedure TFrmMain.MENU_CONTROL_STOPClick(Sender: TObject);
begin
StopService();
end;
procedure TFrmMain.MENU_HELP_ABOUTClick(Sender: TObject);
begin
FrmAbout := TFrmAbout.Create(Owner);
FrmAbout.Open();
FrmAbout.Free;
// MemoLog.Lines.Add(g_sProductName);
// MemoLog.Lines.Add(format(g_sVersion,[0]));
// MemoLog.Lines.Add(g_sUpDateTime);
// MemoLog.Lines.Add(g_sProgram);
// MemoLog.Lines.Add(g_sWebSite);
// MemoLog.Lines.Add(g_sBbsSite);
end;
procedure TFrmMain.DBSocketConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
MainOutMessage('数据库服务器连接成功(' + Socket.RemoteAddress + ':' + IntToStr(Socket.RemotePort) + ')');
end;
procedure TFrmMain.MENU_OPTION_SERVERCONFIGClick(Sender: TObject);
begin
FrmServerValue:=TFrmServerValue.Create(Owner);
FrmServerValue.Top:=Self.Top + 20;
FrmServerValue.Left:=Self.Left;
FrmServerValue.AdjuestServerConfig();
FrmServerValue.Free;
end;
procedure TFrmMain.MENU_OPTION_GENERALClick(Sender: TObject);
begin
frmGeneralConfig:=TfrmGeneralConfig.Create(Owner);
frmGeneralConfig.Top:=Self.Top + 20;
frmGeneralConfig.Left:=Self.Left;
frmGeneralConfig.Open();
frmGeneralConfig.Free;
Caption:=g_Config.sServerName;
end;
procedure TFrmMain.MENU_OPTION_GAMEClick(Sender: TObject);
begin
frmGameConfig:=TfrmGameConfig.Create(Owner);
frmGameConfig.Top:=Self.Top + 20;
frmGameConfig.Left:=Self.Left;
frmGameConfig.Open;
frmGameConfig.Free;
end;
procedure TFrmMain.MENU_OPTION_FUNCTIONClick(Sender: TObject);
begin
frmFunctionConfig:=TfrmFunctionConfig.Create(Owner);
frmFunctionConfig.Top:=Self.Top + 20;
frmFunctionConfig.Left:=Self.Left;
frmFunctionConfig.Open;
frmFunctionConfig.Free;
end;
procedure TFrmMain.G1Click(Sender: TObject);
begin
frmGameCmd:=TfrmGameCmd.Create(Owner);
frmGameCmd.Top:=Self.Top + 20;
frmGameCmd.Left:=Self.Left;
frmGameCmd.Open;
frmGameCmd.Free;
end;
procedure TFrmMain.MENU_OPTION_MONSTERClick(Sender: TObject);
begin
frmMonsterConfig:=TfrmMonsterConfig.Create(Owner);
frmMonsterConfig.Top:=Self.Top + 20;
frmMonsterConfig.Left:=Self.Left;
frmMonsterConfig.Open;
frmMonsterConfig.Free;
end;
procedure TFrmMain.MENU_CONTROL_RELOAD_MONSTERSAYClick(Sender: TObject);
begin
UserEngine.ClearMonSayMsg();
LoadMonSayMsg();
MainOutMessage('信息:重新加载怪物说话配置成功...');
end;
procedure TFrmMain.MENU_CONTROL_RELOAD_DISABLEMAKEClick(Sender: TObject);
begin
LoadDisableTakeOffList();
LoadDisableMakeItem();
LoadEnableMakeItem();
LoadAllowSellOffItem();
LoadDisableMoveMap();
ItemUnit.LoadCustomItemName();
LoadDisableSendMsgList();
LoadGameLogItemNameList();
LoadItemBindIPaddr();
LoadItemBindAccount();
LoadItemBindCharName();
LoadUnMasterList();
LoadUnForceMasterList();
LoadDenyIPAddrList();
LoadDenyAccountList();
LoadDenyChrNameList();
LoadNoClearMonList();
FrmDB.LoadAdminList();
MainOutMessage('信息:重新加载列表信息完成...');
end;
procedure TFrmMain.MENU_CONTROL_RELOAD_STARTPOINTClick(Sender: TObject);
begin
FrmDB.LoadStartPoint();
MainOutMessage('信息:重新加载地图安全区列表完成...');
end;
procedure TFrmMain.MENU_CONTROL_GATE_OPENClick(Sender: TObject);
ResourceString
sGatePortOpen = '游戏网关端口(%s:%d)已打开...';
begin
if not GateSocket.Active then begin
GateSocket.Active:=True;
MainOutMessage(format(sGatePortOpen,[GateSocket.Address,GateSocket.Port]));
end;
end;
procedure TFrmMain.MENU_CONTROL_GATE_CLOSEClick(Sender: TObject);
begin
CloseGateSocket();
end;
procedure TFrmMain.CloseGateSocket;
var
I: Integer;
ResourceString
sGatePortClose = '游戏网关端口(%s:%d)已关闭...';
begin
if GateSocket.Active then begin
for I := 0 to GateSocket.Socket.ActiveConnections - 1 do begin
GateSocket.Socket.Connections[I].Close;
end;
GateSocket.Active:=False;
MainOutMessage(format(sGatePortClose,[GateSocket.Address,GateSocket.Port]));
end;
end;
procedure TFrmMain.MENU_CONTROLClick(Sender: TObject);
begin
if GateSocket.Active then begin
MENU_CONTROL_GATE_OPEN.Enabled:=False;
MENU_CONTROL_GATE_CLOSE.Enabled:=True;
end else begin
MENU_CONTROL_GATE_OPEN.Enabled:=True;
MENU_CONTROL_GATE_CLOSE.Enabled:=False;
end;
end;
procedure UserEngineProcess(Config:pTM2Config;ThreadInfo:pTThreadInfo);
var
nRunTime :Integer;
dwRunTick :LongWord;
begin
l_dwRunTimeTick:=0;
dwRunTick:=GetTickCount();
ThreadInfo.dwRunTick:=dwRunTick;
while not ThreadInfo.boTerminaled do begin
nRunTime:=GetTickCount - ThreadInfo.dwRunTick;
if ThreadInfo.nRunTime < nRunTime then ThreadInfo.nRunTime:=nRunTime;
if ThreadInfo.nMaxRunTime < nRunTime then ThreadInfo.nMaxRunTime:=nRunTime;
if GetTickCount - dwRunTick >= 1000 then begin
dwRunTick:=GetTickCount();
if ThreadInfo.nRunTime > 0 then Dec(ThreadInfo.nRunTime);
end;
ThreadInfo.dwRunTick:=GetTickCount();
ThreadInfo.boActived:=True;
ThreadInfo.nRunFlag:=125;
if Config.boThreadRun then
ProcessGameRun();
Sleep(1);
end;
end;
procedure UserEngineThread(ThreadInfo:pTThreadInfo);stdcall;
var
nErrorCount:Integer;
ResourceString
sExceptionMsg = '[Exception] UserEngineThread ErrorCount = %d';
begin
nErrorCount:=0;
while True do begin
try
UserEngineProcess(ThreadInfo.Config,ThreadInfo);
break;
except
Inc(nErrorCount);
if nErrorCount > 10 then break;
MainOutMessage(format(sExceptionMsg,[nErrorCount]));
end;
end;
ExitThread(0);
end;
procedure ProcessGameRun();
var
I:Integer;
begin
EnterCriticalSection(ProcessHumanCriticalSection);
try
UserEngine.PrcocessData;
g_EventManager.Run;
RobotManage.Run;
if GetTickCount - l_dwRunTimeTick > 10000 then begin
l_dwRunTimeTick:=GetTickCount();
g_GuildManager.Run;
//CastleManager.Run;
//UserCastle.Run;
g_CastleManager.Run;
g_DenySayMsgList.Lock;
try
for I:=g_DenySayMsgList.Count - 1 downto 0 do begin
if GetTickCount > LongWord(g_DenySayMsgList.Objects[I]) then begin
g_DenySayMsgList.Delete(I);
end;
end;
finally
g_DenySayMsgList.UnLock;
end;
end;
finally
LeaveCriticalSection(ProcessHumanCriticalSection);
end;
end;
procedure TFrmMain.MENU_VIEW_GATEClick(Sender: TObject);
begin
MENU_VIEW_GATE.Checked:= not MENU_VIEW_GATE.Checked;
GridGate.Visible:=MENU_VIEW_GATE.Checked;
end;
procedure TFrmMain.MENU_VIEW_SESSIONClick(Sender: TObject);
begin
frmViewSession:=TfrmViewSession.Create(Owner);
frmViewSession.Top:=Top + 20;
frmViewSession.Left:=Left;
frmViewSession.Open();
frmViewSession.Free;
end;
procedure TFrmMain.MENU_VIEW_ONLINEHUMANClick(Sender: TObject);
begin
frmViewOnlineHuman:=TfrmViewOnlineHuman.Create(Owner);
frmViewOnlineHuman.Top:=Top + 20;
frmViewOnlineHuman.Left:=Left;
frmViewOnlineHuman.Open();
frmViewOnlineHuman.Free;
end;
procedure TFrmMain.MENU_VIEW_LEVELClick(Sender: TObject);
begin
frmViewLevel:=TfrmViewLevel.Create(Owner);
frmViewLevel.Top:=Top + 20;
frmViewLevel.Left:=Left;
frmViewLevel.Open();
frmViewLevel.Free;
end;
procedure TFrmMain.MENU_VIEW_LISTClick(Sender: TObject);
begin
frmViewList:=TfrmViewList.Create(Owner);
frmViewList.Top:=Top + 20;
frmViewList.Left:=Left;
frmViewList.Open();
frmViewList.Free;
end;
procedure TFrmMain.MENU_MANAGE_ONLINEMSGClick(Sender: TObject);
begin
frmOnlineMsg:=TfrmOnlineMsg.Create(Owner);
frmOnlineMsg.Top:=Top + 20;
frmOnlineMsg.Left:=Left;
frmOnlineMsg.Open();
frmOnlineMsg.Free;
end;
procedure TFrmMain.SetMenu;
begin
FrmMain.Menu:=MainMenu;
end;
procedure TFrmMain.MENU_VIEW_KERNELINFOClick(Sender: TObject);
begin
frmViewKernelInfo:=TfrmViewKernelInfo.Create(Owner);
frmViewKernelInfo.Top:=Top + 20;
frmViewKernelInfo.Left:=Left;
frmViewKernelInfo.Open();
frmViewKernelInfo.Free;
end;
procedure TFrmMain.MENU_TOOLS_MERCHANTClick(Sender: TObject);
begin
frmConfigMerchant:=TfrmConfigMerchant.Create(Owner);
frmConfigMerchant.Top:=Top + 20;
frmConfigMerchant.Left:=Left;
frmConfigMerchant.Open();
frmConfigMerchant.Free;
end;
procedure TFrmMain.MENU_OPTION_ITEMFUNCClick(Sender: TObject);
begin
frmItemSet:=TfrmItemSet.Create(Owner);
frmItemSet.Top:=Top + 20;
frmItemSet.Left:=Left;
frmItemSet.Open();
frmItemSet.Free;
end;
procedure TFrmMain.ClearMemoLog;
begin
if Application.MessageBox('是否确定清除日志信息?','提示信息',MB_YESNO + MB_ICONQUESTION) = mrYes then begin
MemoLog.Clear;
end;
end;
procedure TFrmMain.MENU_TOOLS_MONGENClick(Sender: TObject);
begin
frmConfigMonGen:=TfrmConfigMonGen.Create(Owner);
frmConfigMonGen.Top:=Top + 20;
frmConfigMonGen.Left:=Left;
frmConfigMonGen.Open();
frmConfigMonGen.Free;
end;
procedure TFrmMain.MyMessage(var MsgData: TWmCopyData);
var
sData:String;
wIdent:Word;
begin
wIdent:=HiWord(MsgData.From);
// ProgramType:=TProgamType(LoWord(MsgData.From));
sData:=StrPas(MsgData.CopyDataStruct^.lpData);
case wIdent of //
GS_QUIT: begin
g_boExitServer:=True;
CloseGateSocket();
g_Config.boKickAllUser:=True;
CloseTimer.Enabled:=True;
end;
1: ;
2: ;
3: ;
end; // case
end;
{procedure TFrmMain.MENU_TOOLS_IPSEARCHClick(Sender: TObject);
var
sIPaddr:String;
begin
sIPaddr:=InputBox('IP所在地区查询','输入IP地址:','192.168.0.1');
if not IsIPaddr(sIPaddr) then begin
Application.MessageBox('输入的IP地址格式不正确!!!','错误信息',MB_OK + MB_ICONERROR);
exit;
end;
if not IsIPaddr(sIPaddr) then begin
Application.MessageBox('输入的IP地址格式不正确!!!','错误信息',MB_OK + MB_ICONERROR);
exit;
end;
MemoLog.Lines.Add(format('%s:%s',[sIPaddr,GetIPLocal(sIPaddr)]));
end;}
procedure TFrmMain.MENU_TOOLS_IPSEARCHClick(Sender: TObject);
var
FormIP: TFormIP;
begin
FormIP := TFormIP.Create(Owner);
FormIP.Top := Top + 20;
FormIP.Left := Left;
FormIP.Open();
FormIP.Free;
end;
procedure TFrmMain.MENU_MANAGE_CASTLEClick(Sender: TObject);
begin
frmCastleManage:=TfrmCastleManage.Create(Owner);
frmCastleManage.Top:=Top + 20;
frmCastleManage.Left:=Left;
frmCastleManage.Open();
frmCastleManage.Free;
end;
procedure TFrmMain.MENU_TOOLS_GAMESHOPClick(Sender: TObject);
begin
frmConfigGameShop:=TfrmConfigGameShop.Create(Owner);
frmConfigGameShop.Top:=Top + 20;
frmConfigGameShop.Left:=Left;
frmConfigGameShop.Open();
frmConfigGameShop.Free;
end;
initialization
begin
end;
finalization
begin
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -