📄 svmain.pas
字号:
procedure TFrmMain.MENU_HELP_ABOUTClick(Sender: TObject);
begin
Formabout.show;
{ MemoLog.Lines.Add('M2Server 0716');
MemoLog.Lines.Add('Copyright @2005 HH8.Net');
MemoLog.Lines.Add('乐都在线');
MemoLog.Lines.Add('http://www.hh8.net ');
}// 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
LoadItemLimiteList();
LoadDisableTakeOffList();
LoadEnableSellOffList();
LoadDisableMakeItem();
LoadEnableMakeItem();
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: 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
UserEngine.PrcocessData;
g_EventManager.Run;
RobotManage.Run;
if GetTickCount - l_dwRunTimeTick > 10000 then
begin
l_dwRunTimeTick := GetTickCount();
g_GuildManager[0].Run;
g_GuildManager[1].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);
// MainOutMessage('消息:'+Inttostr(wident));
case wIdent of //
0: //GS_QUIT:
begin
g_boExitServer := True;
CloseGateSocket();
g_Config.boKickAllUser := True;
CloseTimer.Enabled := True;
end;
1: ;
2: ;
3: ;
end; // case
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_CONTROL_RELOAD_SABAKClick(Sender: TObject);
begin
// Add by Delphilxh 2005-09-16
try
g_CastleManager.Initialize;
finally
MainOutMessage('重新加载沙巴克数据完成...');
end;
end;
procedure TFrmMain.WM_MessageTest(var AMessage: TMessage);
begin
NotRegenMonsters:=AMessage.WParam=1;
// MainOutMessage('验证');
end;
initialization
Coinitialize(nil);
LoadKernelFunction;
finalization
CoUninitialize;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -