📄 svmain.pas
字号:
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.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.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 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.MENU_TOOLS_TESTClick(Sender: TObject);
var
Envir:TEnvirnoment;
sMsg:String;
UserItem:TUserItem;
I:Integer;
begin
{
Envir:=EnvirList.FindMap('3');
sMsg:='地图模式: ' + Envir.GetEnvirInfo;
MemoLog.Lines.Add(sMsg);
}
{
I:=0;
while i < 11 do begin
FillChar(UserItem,SizeOf(UserItem),#0);
itemUnit.UnknowHelmet(@UserItem);
MemoLog.Lines.Add(format('%d/%d/%d/%d/%d/%d/%d/%d/%d/%d/%d/%d/%d/%d',[UserItem.btValue[0],
UserItem.btValue[1],
UserItem.btValue[2],
UserItem.btValue[3],
UserItem.btValue[4],
UserItem.btValue[5],
UserItem.btValue[6],
UserItem.btValue[7],
UserItem.btValue[8],
UserItem.btValue[9],
UserItem.btValue[10],
UserItem.btValue[11],
UserItem.btValue[12],
UserItem.btValue[13]]));
Inc(I);
end;
}
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.aaa1Click(Sender: TObject);
type
TGetLicense = function (var nDay:Integer;var nM2Crc:Integer):Integer;stdcall;
var
nDay:Integer;
nUserCount,nM2Crc:Integer;
sSrc:String;
begin
{
nDay:=-1;
nUserCount:=-1;
if (g_nGetLicenseInfo >= 0) and Assigned(PlugProcArray[g_nGetLicenseInfo].nProcAddr) then begin
nUserCount:=TGetLicense(PlugProcArray[g_nGetLicenseInfo].nProcAddr)(nDay,nM2Crc);
end;
MemoLog.Lines.Add(format('%d/%d/%d',[nUserCount,nDay,nM2Crc]))
}
{
begin
MemoLog.Lines.Add(IntToStr(CalcFileCRC(g_Config.sClientFile1)));
}
{
sSrc:=InputBox('解密文本','输入密文','7103F4DD459743DC16FAE5FE3F30FEF0');
if CheckGuildName(sSrc) then begin
ShowMessage('OK');
end else begin
ShowMessage('Fail');
end;
}
end;
procedure TFrmMain.DECODESCRIPTClick(Sender: TObject);
var
sSrc:String;
Dest:array[0..1024] of Char;
nDest:Integer;
begin
// sSrc:=InputBox('解密文本','输入密文','7103F4DD459743DC16FAE5FE3F30FEF0');
// MemoLog.Lines.Add(Encodestring(sSrc));
{
sSrc:=InputBox('解密文本','输入密文','7103F4DD459743DC16FAE5FE3F30FEF0');
if sSrc = '' then exit;
if (nDeCryptString >= 0) and Assigned(PlugProcArray[nDeCryptString].nProcAddr) then begin
FillChar(Dest,SizeOf(Dest),0);
TDeCryptString(PlugProcArray[nDeCryptString].nProcAddr)(@sSrc[1],@Dest,length(sSrc),nDest);
sSrc:=strpas(PChar(@Dest));
MemoLog.Lines.Add(sSrc);
exit;
end;
}
{$IF DEBUG = 1}
sSrc:=InputBox('解密文本','输入密文','7103F4DD459743DC16FAE5FE3F30FEF0');
sSrc:=Md5.EncryptString(sSrc);
MemoLog.Lines.Add(sSrc);
MemoLog.Lines.Add(IntToStr(Length(sSrc)));
{$IFEND}
// MemoLog.Lines.Add(EnCodeString(sSrc));
(*
{$IF DEBUG = 0}
asm
jz @@Start
jnz @@Start
db 0E8h
@@Start:
end;
{$IFEND}
PlugInEngine.StartM2ServerDLL;
{$IF DEBUG = 0}
asm
jz @@Start
jnz @@Start
db 0E8h
@@Start:
end;
{$IFEND}
*)
end;
procedure TFrmMain.MenuStackTestClick(Sender: TObject);
var
ProcHandle:THandle;
Context:TContext;
// Sf:STACKFRAME;
// dwMachineType:LongWord;
begin
{
Context.ContextFlags:=$10001;
ProcHandle:=GetCurrentThread;
if GetThreadContext(ProcHandle,Context) then begin
MemoLog.Lines.Add(format('EIP:%x ESP:%x EBP:%x EF:%x',[Context.Eip,Context.ESP,Context.EBP,Context.EFlags]));
end;
}
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -