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

📄 svmain.pas

📁 乐都SQL版传奇全套代码,绝对可编译
💻 PAS
📖 第 1 页 / 共 5 页
字号:
      FrmMsgClient.Run;
  end;
  Inc(n4EBD1C);
  if (GetTickCount - g_dwRunTick) > 250 then
  begin
    g_dwRunTick := GetTickCount();
    nRunTimeMin := n4EBD1C;
    if nRunTimeMax > nRunTimeMin then
      nRunTimeMax := nRunTimeMin;
    n4EBD1C := 0;
  end;
  if assigned(g_GateSocket) then
  begin
    if not GateSocket.Active then
       GateSocket.Active := True;
  end;
  (*if boRemoteOpenGateSocket then
  begin
    if not boRemoteOpenGateSocketed then
    begin
      boRemoteOpenGateSocketed := True;
      try
        if assigned(g_GateSocket) then
        begin
          g_GateSocket.Active := True;
        end;
      except
        on E: Exception do
        begin
          {$IF SHowErr = 1}
           MainOutMessage(E.Message);
          {$IFEND}

        end;
      end;
    end;
    
  end; *)
end;

procedure TFrmMain.ConnectTimerTimer(Sender: TObject);
begin
 if DBSocket.Active then
    exit;
  DBSocket.Active := True;
end;

procedure TFrmMain.ReloadConfig(Sender: TObject);
begin
  try
    LoadConfig();

    FrmIDSoc.Timer1Timer(Sender);
    if not (nServerIndex = 0) then
    begin
      if not FrmMsgClient.MsgClient.Active then
      begin
        FrmMsgClient.MsgClient.Active := True;
      end;
    end;
    LogUDP.RemoteHost := g_Config.sLogServerAddr;
    LogUDP.RemotePort := IntToStr(g_Config.nLogServerPort);
    LoadServerTable();

  finally

  end;
end;

procedure TFrmMain.MemoLogChange(Sender: TObject);
begin
  if MemoLog.Lines.Count > 500 then
    MemoLog.Clear;
end;

procedure TFrmMain.MemoLogDblClick(Sender: TObject);
begin
  ClearMemoLog();
end;

procedure TFrmMain.MENU_CONTROL_EXITClick(Sender: TObject);
begin
  Close;
end;

procedure TFrmMain.MENU_CONTROL_RELOAD_CONFClick(Sender: TObject);
begin
  ReloadConfig(Sender);
end;

procedure TFrmMain.MENU_CONTROL_CLEARLOGMSGClick(Sender: TObject);
begin
  ClearMemoLog();
end;

procedure TFrmMain.SpeedButton1Click(Sender: TObject);
begin
  ReloadConfig(Sender);
end;

procedure TFrmMain.MENU_CONTROL_RELOAD_ITEMDBClick(Sender: TObject);
begin
  FrmDB.LoadItemsDB();
  MainOutMessage('重新加载物品数据库完成...');
end;

procedure TFrmMain.MENU_CONTROL_RELOAD_MAGICDBClick(Sender: TObject);
begin
  FrmDB.LoadMagicDB();
  MainOutMessage('重新加载技能数据库完成...');
end;

procedure TFrmMain.MENU_CONTROL_RELOAD_MONSTERDBClick(Sender: TObject);
begin
  FrmDB.LoadMonsterDB();
  MainOutMessage('重新加载怪物数据库完成...');
end;

procedure TFrmMain.StartService;
var
  TimeNow                               : TDateTime;
  Year, Month, Day, Hour, Min, Sec, MSec: Word;
  F                                     : TextFile;
  Config                                : pTConfig;

begin
  Config := @g_Config;
  MENU_CONTROL_START.Enabled := False;
  MENU_CONTROL_STOP.Enabled := False;

  //  ShowMessage(IntToStr(High(LongWord)));
  nRunTimeMax := 99999;
  g_nSockCountMax := 0;
  g_nUsrTimeMax := 0;
  g_nHumCountMax := 0;
  g_nMonTimeMax := 0;
  g_nMonGenTimeMax := 0;
  g_nMonProcTime := 0;
  g_nMonProcTimeMin := 0;
  g_nMonProcTimeMax := 0;
  dwUsrRotCountMin := 0;
  dwUsrRotCountMax := 0;
  g_nProcessHumanLoopTime := 0;
  g_dwHumLimit := 30;
  g_dwMonLimit := 30;
  g_dwZenLimit := 5;
  g_dwNpcLimit := 5;
  g_dwSocLimit := 10;
  nDecLimit := 20;

  Config.sDBSocketRecvText := '';
  Config.boDBSocketWorking := False;
  Config.nLoadDBErrorCount := 0;
  Config.nLoadDBCount := 0;
  Config.nSaveDBCount := 0;
  Config.nDBQueryID := 0;
  Config.nItemNumber := 0;
  Config.nItemNumberEx := High(Integer) div 2;
  boStartReady := False;
  g_boExitServer := False;
  boFilterWord := True;
  Config.nWinLotteryCount := 0;
  Config.nNoWinLotteryCount := 0;
  Config.nWinLotteryLevel1 := 0;
  Config.nWinLotteryLevel2 := 0;
  Config.nWinLotteryLevel3 := 0;
  Config.nWinLotteryLevel4 := 0;
  Config.nWinLotteryLevel5 := 0;
  Config.nWinLotteryLevel6 := 0;
  FillChar(g_Config.GlobalVal, SizeOf(g_Config.GlobalVal), #0);
  FillChar(g_Config.GlobaDyMval, SizeOf(g_Config.GlobaDyMval), #0);


  LoadConfig();
  Memo := MemoLog;
  nServerIndex := 0;
  //PlugInEngine := TPlugInManage.Create;
  RunSocket := TRunSocket.Create();
  MainLogMsgList := TStringList.Create;
  LogStringList := TStringList.Create;
  LogonCostLogList := TStringList.Create;
  g_MapManager := TMapManager.Create;
  ItemUnit := TItemUnit.Create;
  MagicManager := TMagicManager.Create;
  NoticeManager := TNoticeManager.Create;
  g_GuildManager[0] := TGuildManager.Create;
  g_GuildManager[0].DBIndex:=0;
  g_GuildManager[1] := TGuildManager.Create;
  g_GuildManager[1].DBIndex:=1;
  g_EventManager := TEventManager.Create;
  g_CastleManager := TCastleManager.Create;

  FrontEngine := TFrontEngine.Create(True);
  UserEngine := TUserEngine.Create();
  RobotManage := TRobotManage.Create;
  g_MakeItemList := TStringList.Create;
  g_StartPointList := TGStringList.Create;
  ServerTableList := TmyList.Create;
  g_DenySayMsgList := TQuickList.Create;
  MiniMapList := TStringList.Create;
  g_UnbindList := TStringList.Create;
  LineNoticeList := TStringList.Create;
  QuestDiaryList := TMyList.Create;
  ItemEventList := TStringList.Create;
  AbuseTextList := TStringList.Create;
  g_MonSayMsgList := TStringList.Create;
  g_SayMsgList := TStringList.Create;
  g_DisableMakeItemList := TGStringList.Create;
  g_EnableMakeItemList := TGStringList.Create;
  g_DisableMoveMapList := TGStringList.Create;
  g_ItemNameList := TGList.Create;
  g_DisableSendMsgList := TGStringList.Create;
  g_MonDropLimitLIst := TGStringList.Create;
  g_DisableTakeOffList := TGStringList.Create;
  g_ItemLimiteList     := TStringList.Create;
  g_EnableSellOffList := TStringList.Create;
  g_UnMasterList := TGStringList.Create;
  g_UnForceMasterList := TGStringList.Create;
  g_GameLogItemNameList := TGStringList.Create;
  g_DenyIPAddrList := TGStringList.Create;
  g_DenyChrNameList := TGStringList.Create;
  g_DenyAccountList := TGStringList.Create;
  g_NoClearMonList := TGStringList.Create;

  g_ItemBindIPaddr := TGList.Create;
  g_ItemBindAccount := TGList.Create;
  g_ItemBindCharName := TGList.Create;
  //  n4EBBD0           := 0;
  InitializeCriticalSection(LogMsgCriticalSection);
  InitializeCriticalSection(ProcessMsgCriticalSection);
  InitializeCriticalSection(ProcessHumanCriticalSection);

  InitializeCriticalSection(Config.UserIDSection);
  InitializeCriticalSection(UserDBSection);
  InitializeCriticalSection(UserHumDataSection);
  CS_6 := TCriticalSection.Create;
  // MD5 := TMD5.Create;
  g_DynamicVarList := TMyList.Create;
  // AddToObjTable(RunSocket, 'RunSocket');
   //AddToObjTable(UserEngine, 'UserEngine');

  TimeNow := Now();
  DecodeDate(TimeNow, Year, Month, Day);
  DecodeTime(TimeNow, Hour, Min, Sec, MSec);
  if not DirectoryExists(g_Config.sLogDir) then
  begin
    CreateDir(Config.sLogDir);
  end;

  sLogFileName := g_Config.sLogDir {'.\Log\'} + IntToStr(Year) + '-' +
  IntToStr2(Month) + '-' + IntToStr2(Day) + '.' + IntToStr2(Hour) + '-' +
    IntToStr2(Min) + '.txt';
  AssignFile(F, sLogFileName);
  Rewrite(F);
  CloseFile(F);


  // PlugInEngine.LoadPlugIn();

  MemoLog.Lines.Add('正在读取配置信息...');

  nShiftUsrDataNameNo := 1;

  DBSocket.Address := g_Config.sDBAddr;
  DBSocket.Port := g_Config.nDBPort;
   DBSocket.Active   := True;

  sCaption := g_Config.sServerName;
  // +' ' + DateToStr(Date)+ ' ' + TimeToStr(Time);
  LoadServerTable();
  LogUDP.RemoteHost := g_Config.sLogServerAddr;
  LogUDP.RemotePort := IntToStr(g_Config.nLogServerPort);


  Application.OnIdle := AppOnIdle;
  Application.OnException := OnProgramException;
  dwRunDBTimeMax := GetTickCount();
  g_dwStartTick := GetTickCount();
  Timer1.Enabled := True;
  //  StartTimer.Enabled  := True;

  boServiceStarted := True;
  MENU_CONTROL_STOP.Enabled := True;
end;

procedure TFrmMain.StopService;
var
  i                                     : Integer;
  Config                                : pTConfig;

begin
  Config := @g_Config;
  MENU_CONTROL_START.Enabled := False;
  MENU_CONTROL_STOP.Enabled := False;
  Timer1.Enabled := False;
  RunTimer.Enabled := False;
  FrmIDSoc.Close;
  GateSocket.Close;
  Memo := nil;
  SaveItemNumber();
  g_CastleManager.Free;
  //  UserCastle.Save;
  //  UserCastle.Free;

{$IF USERENGINEMODE = THREADENGINE}
  ThreadInfo := @Config.UserEngineThread;
  ThreadInfo.boTerminaled := True;
  if WaitForSingleObject(ThreadInfo.hThreadHandle, 1000) <> 0 then
  begin
    SuspendThread(ThreadInfo.hThreadHandle);
  end;
{$IFEND}
{$IF DBSOCKETMODE = THREADENGINE}
  ThreadInfo := @Config.DBSOcketThread;
  ThreadInfo.boTerminaled := True;
  if WaitForSingleObject(ThreadInfo.hThreadHandle, 1000) <> 0 then
  begin
    SuspendThread(ThreadInfo.hThreadHandle);
  end;
{$IFEND}
  FrontEngine.Terminate();
  //  FrontEngine.WaitFor;
  FrontEngine.Free;
  MagicManager.Free;
  UserEngine.Free;
  RobotManage.Free;
  //MessageBox(0,PChar(IntToStr(CertCheck.Count)),'aaa',MB_OK);
  RunSocket.Free;

  ConnectTimer.Enabled := False;
  DBSocket.Close;

  MainLogMsgList.Free;
  LogStringList.Free;
  LogonCostLogList.Free;
  g_MapManager.Free;
  ItemUnit.Free;

  NoticeManager.Free;
  g_GuildManager[0].Free;
  g_GuildManager[1].Free;
  for i := 0 to g_MakeItemList.Count - 1 do
  begin
    TStringList(g_MakeItemList.Objects[i]).Free;
  end;
  g_MakeItemList.Free;
 // g_UNMakeItemNPC.Free;
  g_StartPointList.Free;
  ServerTableList.Free;
  g_DenySayMsgList.Free;
  MiniMapList.Free;
  g_UnbindList.Free;
  LineNoticeList.Free;
  QuestDiaryList.Free;
  ItemEventList.Free;
  AbuseTextList.Free;
  g_MonSayMsgList.Free;
  g_DisableMakeItemList.Free;
  g_EnableMakeItemList.Free;
  g_DisableMoveMapList.Free;
  g_ItemNameList.Free;
  g_DisableSendMsgList.Free;
  g_MonDropLimitLIst.Free;
  g_DisableTakeOffList.Free;
  g_ItemLimiteList.Free;
  g_EnableSellOffList.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;

  DeleteCriticalSection(LogMsgCriticalSection);
  DeleteCriticalSection(ProcessMsgCriticalSection);
  DeleteCriticalSection(ProcessHumanCriticalSection);

  DeleteCriticalSection(Config.UserIDSection);
  DeleteCriticalSection(UserDBSection);
   DeleteCriticalSection(  UserHumDataSection);                  

  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;
 
end;

procedure TFrmMain.MENU_CONTROL_STARTClick(Sender: TObject);
begin
  //  StartService();
end;

procedure TFrmMain.MENU_CONTROL_STOPClick(Sender: TObject);
begin
  //  StopService();
end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -