📄 svmain.~pas
字号:
g_EnableMakeItemList.Free;
g_DisableMoveMapList.Free;
g_ItemNameList.Free;
g_DisableSendMsgList.Free;
g_MonDropLimitLIst.Free;
g_DisableTakeOffList.Free;
g_DisableDropList.Free;
g_DisableDealList.Free;
g_DisableStorageList.Free;
g_DisablePlayTakeOnList.Free;
g_DisableYSTakeOnList.Free;
SavePlayListToFile;
g_TopPlayList.lock ;
for I:=0 to g_TopPlayList.Count-1 do begin
dispose( pSavePaiHang(g_TopPlayList.Objects[i]) );
end;
g_TopPlayList.unlock;
g_TopPlayList.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;
PlugInEngine.Free;
DeleteCriticalSection(LogMsgCriticalSection);
DeleteCriticalSection(ProcessMsgCriticalSection);
DeleteCriticalSection(ProcessHumanCriticalSection);
DeleteCriticalSection(ProcessStorageSection);
DeleteCriticalSection(Config.UserIDSection);
DeleteCriticalSection(UserDBSection);
DeleteCriticalSection(ProcessHTimerlistSection);
MD5.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.ShowAbout;
begin
end;
procedure TFrmMain.MENU_HELP_ABOUTClick(Sender: TObject);
//关于
begin
// if isDoubleDll then
//Memolog.Lines.Add(' ')
// else
ShowAbout;
end;
procedure TFrmMain.DBSocketConnect(Sender: TObject;
Socket: TCustomWinSocket); //DB准备连接时执行
begin
MainOutMessage('数据库服务器(' + Socket.RemoteAddress + ':' + IntToStr(Socket.RemotePort) + ')连接成功...');
g_dbConnect:=true;
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();
LoadDisableMoveMap();
ItemUnit.LoadCustomItemName();
LoadDisableSendMsgList();
LoadGameLogItemNameList();
LoadItemBindIPaddr();
LoadItemBindAccount();
LoadItemBindCharName();
LoadUnMasterList();
LoadUnForceMasterList();
LoadDenyIPAddrList();
LoadDenyAccountList();
LoadDenyChrNameList();
LoadNoClearMonList();
FrmDB.LoadAdminList();
LoadDisableDropList(); // 读取禁止掉物列表
LoadDisableDealList(); //读取禁止交易列表
LoadDisableStorageList(); //读取禁止存仓列表
LoadDisablePlayTakeOnList();//读取禁止人物穿戴列表
LoadDisableYSTakeOnList();//读取禁止元神穿戴列表
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:pTConfig;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
// if runid >= 0 then begin
UserEngine.PrcocessData;
g_EventManager.Run;
RobotManage.Run;
// end;
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;
asm
NOP; NOP; NOP; NOP; NOP; NOP; NOP; NOP; NOP; NOP;
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.MENU_MANAGE_PLUGClick(Sender: TObject);
begin
ftmPlugInManage:=TftmPlugInManage.Create(Owner);
ftmPlugInManage.Top:=Top + 20;
ftmPlugInManage.Left:=Left;
ftmPlugInManage.Open();
ftmPlugInManage.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 TF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -