⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 svmain.pas

📁 M2原代码 M2原代码
💻 PAS
📖 第 1 页 / 共 5 页
字号:
  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 + -