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

📄 svmain.pas

📁 乐都SQL版传奇全套代码,绝对可编译
💻 PAS
📖 第 1 页 / 共 5 页
字号:
    Config.WriteInteger('Setup', 'WinLotteryLevel6', g_Config.nWinLotteryLevel6);

    for i:=0 to 255 do
      Config.WriteInteger('Setup','TARIFF'+Inttostr(i),g_Config.TARIFF[i]);
    for i:=0 to 255 do
      Config.WriteInteger('Setup','REBATE'+Inttostr(i),g_Config.REBATE[i]);      
  except

  end;
end;

procedure TFrmMain.AppOnIdle(Sender: TObject; var Done: Boolean);
begin
  //   MainOutMessage ('空闲');
end;

procedure TFrmMain.OnProgramException(Sender: TObject; E: Exception);
begin
          {$IF SHowErr = 1}
           MainOutMessage(E.Message);
          {$IFEND}
end;

procedure TFrmMain.DBSocketError(Sender: TObject; Socket: TCustomWinSocket;
  ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
  ErrorCode := 0;
  Socket.Close;
  shutdown(Socket.SocketHandle,0);

end;

procedure TFrmMain.DBSocketRead(Sender: TObject; Socket: TCustomWinSocket);
var
  tStr                                  : string;
begin
  EnterCriticalSection(UserDBSection);
  try
    tStr := Socket.ReceiveText;
    g_Config.sDBSocketRecvText := g_Config.sDBSocketRecvText + tStr;
       // MainOutMessage(tstr);
    if not g_Config.boDBSocketWorking then
    begin
      g_Config.sDBSocketRecvText := '';
    end;
  finally
    LeaveCriticalSection(UserDBSection);
  end;
end;

procedure TFrmMain.Timer1Timer(Sender: TObject);            //004E5418
var
  boWriteLog                            : Boolean;
  i                                     : Integer;
  nRow                                  : Integer;
  wHour                                 : Word;
  wMinute                               : Word;
  wSecond                               : Word;
  tSecond                               : Integer;
  sSrvType                              : string;
  sVerType                              : string;
  tTimeCount                            : Currency;
  GateInfo                              : pTGateInfo;
  //  sGate,tGate      :String;
  LogFile                               : TextFile;

  s28                                   : string;
begin
  //  Caption:=sCaption + ' [' + sCaptionExtText + ']';
  if  g_MemShared.Open=1 then
   Caption := format('%s(企业版)', [sCaption])
  else
   Caption := format('%s(专业版)', [sCaption]) ;
   Application.Title:=Caption;
  EnterCriticalSection(LogMsgCriticalSection);
  try
    if MemoLog.Lines.Count > 500 then
      MemoLog.Clear;
    boWriteLog := True;
    if MainLogMsgList.Count > 0 then
    begin
      try
        if not FileExists(sLogFileName) then
        begin
          AssignFile(LogFile, sLogFileName);
          Rewrite(LogFile);
        end
        else
        begin
          AssignFile(LogFile, sLogFileName);
          Append(LogFile);
        end;
        boWriteLog := False;
      except
        MemoLog.Lines.Add('保存日志信息出错!!!');
      end;
    end;
    for i := 0 to MainLogMsgList.Count - 1 do
    begin
      MemoLog.Lines.Add(MainLogMsgList.Strings[i]);
      if not boWriteLog then
      begin
        WriteLn(LogFile, MainLogMsgList.Strings[i]);
      end;
    end;
    MainLogMsgList.Clear;
    if not boWriteLog then
      CloseFile(LogFile);

    for i := 0 to LogStringList.Count - 1 do
    begin

      try
        s28 := '1' + #9 + IntToStr(g_Config.nServerNumber) + #9 +
          IntToStr(nServerIndex) + #9 + LogStringList.Strings[i];

        if not LogUDP.Active then
          LogUDP.Active := True;

        LogUDP.SendBuf(PChar(s28)^, length(s28), 0);

      finally

      end;
    end;
    LogStringList.Clear;


    if LogonCostLogList.Count > 0 then
    begin
      WriteConLog(LogonCostLogList);
    end;
    LogonCostLogList.Clear;
  finally
    LeaveCriticalSection(LogMsgCriticalSection);
  end;

{$IF SoftVersion = VERDEMO}
  sVerType := '[D]';
{$ELSEIF SoftVersion = VERFREE}
  sVerType := '[F]';
{$ELSEIF SoftVersion = VERSTD}
  sVerType := '[S]';
{$ELSEIF SoftVersion = VEROEM}
  sVerType := '[O]';
{$ELSEIF SoftVersion = VERPRO}
  sVerType := '[P]';
{$ELSEIF SoftVersion = VERENT}
  sVerType := '[E]';
{$IFEND}

  if nServerIndex = 0 then
  begin
    sSrvType := '[M]';
  end
  else
  begin
    if FrmMsgClient.MsgClient.Socket.Connected then
    begin
      sSrvType := '[S]';
    end
    else
    begin
      sSrvType := '[ ]';
    end;
  end;
  //检查线程 运行时间
  //g_dwEngineRunTime:=GetTickCount - g_dwEngineTick;

  tSecond := (GetTickCount() - g_dwStartTick) div 1000;
  wHour := tSecond div 3600;
  wMinute := (tSecond div 60) mod 60;
  wSecond := tSecond mod 60;
  LbRunTime.Caption := IntToStr(wHour) + ':' +
    IntToStr(wMinute) + ':' +
    IntToStr(wSecond) + ' ' + sSrvType + sVerType; { +
  IntToStr(g_dwEngineRunTime) + g_sProcessName + '-' + g_sOldProcessName;}
  LbUserCount.Caption := '(' + IntToStr(UserEngine.MonsterCount) + ')   ' +
    IntToStr(UserEngine.OnlinePlayObject) + '/' +
    IntToStr(UserEngine.PlayObjectCount) + '[' +
    IntToStr(UserEngine.LoadPlayCount) + '/' +
    IntToStr(UserEngine.m_PlayObjectFreeList.Count) + ']';
  {
  Label1.Caption:= 'Run' + IntToStr(nRunTimeMin) + '/' + IntToStr(nRunTimeMax) + ' ' +
                   'Soc' + IntToStr(g_nSockCountMin) + '/' + IntToStr(g_nSockCountMax) + ' ' +
                   'Usr' + IntToStr(g_nUsrTimeMin) + '/' + IntToStr(g_nUsrTimeMax);
  }
  Label1.Caption := format('处理(%d/%d) 传输(%d/%d) 角色(%d/%d)', [nRunTimeMin,
    nRunTimeMax, g_nSockCountMin, g_nSockCountMax, g_nUsrTimeMin,
      g_nUsrTimeMax]);
  {
  Label2.Caption:= 'Hum' + IntToStr(g_nHumCountMin) + '/' + IntToStr(g_nHumCountMax) + ' ' +
                   'Mon' + IntToStr(g_nMonTimeMin) + '/' + IntToStr(g_nMonTimeMax) + ' ' +
                   'UsrRot' + IntToStr(dwUsrRotCountMin) + '/' + IntToStr(dwUsrRotCountMax) + ' ' +
                   'Merch' + IntToStr(UserEngine.dwProcessMerchantTimeMin) + '/' + IntToStr(UserEngine.dwProcessMerchantTimeMax) + ' ' +
                   'Npc' + IntToStr(UserEngine.dwProcessNpcTimeMin) + '/' + IntToStr(UserEngine.dwProcessNpcTimeMax) + ' ' +
                   '(' + IntToStr(g_nProcessHumanLoopTime) + ')';
  }
  Label2.Caption :=
    format('人物(%d/%d) 循环(%d/%d) 交易(%d/%d) 管理(%d/%d) (%d)',
    [g_nHumCountMin,
    g_nHumCountMax,
      dwUsrRotCountMin,
      dwUsrRotCountMax,
      UserEngine.dwProcessMerchantTimeMin,
      UserEngine.dwProcessMerchantTimeMax,
      UserEngine.dwProcessNpcTimeMin,
      UserEngine.dwProcessNpcTimeMax,
      g_nProcessHumanLoopTime]);

  Label5.Caption := g_sMonGenInfo1 + ' - ' + g_sMonGenInfo2 + '    ';

  {
  Label20.Caption:='MonG' + IntToStr(g_nMonGenTime) + '/' + IntToStr(g_nMonGenTimeMin) + '/' + IntToStr(g_nMonGenTimeMax) + ' ' +
                   'MonP' + IntToStr(g_nMonProcTime) + '/' + IntToStr(g_nMonProcTimeMin) + '/' + IntToStr(g_nMonProcTimeMax) + ' ' +
                   'ObjRun' + IntToStr(g_nBaseObjTimeMin) + '/' + IntToStr(g_nBaseObjTimeMax);
  }
  Label20.Caption :=
    format('刷新怪物(%d/%d/%d) 处理怪物(%d/%d/%d) 角色处理(%d/%d)',
    [g_nMonGenTime, g_nMonGenTimeMin, g_nMonGenTimeMax, g_nMonProcTime,
    g_nMonProcTimeMin, g_nMonProcTimeMax, g_nBaseObjTimeMin,
      g_nBaseObjTimeMax]);

  tTimeCount := GetTickCount() / (24 * 60 * 60 * 1000);
  if tTimeCount >= 36 then
    LbTimeCount.Font.Color := clRed
  else
    LbTimeCount.Font.Color := clBlack;
  LbTimeCount.Caption := CurrToStr(tTimeCount) + '天';

  nRow := 1;
  //for i:= Low(RunSocket.GateList) to High(RunSocket.GateList) do begin
  for i := Low(g_GateArr) to High(g_GateArr) do
  begin
    GridGate.Cells[0, i + 1] := '';
    GridGate.Cells[1, i + 1] := '';
    GridGate.Cells[2, i + 1] := '';
    GridGate.Cells[3, i + 1] := '';
    GridGate.Cells[4, i + 1] := '';
    GridGate.Cells[5, i + 1] := '';
    GridGate.Cells[6, i + 1] := '';
    GateInfo := @g_GateArr[i];
    //GateInfo:=@RunSocket.GateList[i];
    if GateInfo.boUsed and (GateInfo.Socket <> nil) then
    begin
      GridGate.Cells[0, nRow] := IntToStr(i);
      GridGate.Cells[1, nRow] := GateInfo.sAddr + ':' +
        IntToStr(GateInfo.nPort);
      GridGate.Cells[2, nRow] := IntToStr(GateInfo.nSendMsgCount);
      GridGate.Cells[3, nRow] := IntToStr(GateInfo.nSendedMsgCount);
      GridGate.Cells[4, nRow] := IntToStr(GateInfo.nSendRemainCount);
      if GateInfo.nSendMsgBytes < 1024 then
      begin
        GridGate.Cells[5, nRow] := IntToStr(GateInfo.nSendMsgBytes) + 'b';
      end
      else
      begin
        GridGate.Cells[5, nRow] := IntToStr(GateInfo.nSendMsgBytes div 1024) +
          'kb';
      end;
      GridGate.Cells[6, nRow] := IntToStr(GateInfo.nUserCount) + '/' +
        IntToStr(GateInfo.UserList.Count);
      Inc(nRow);
    end;
  end;

  Inc(nRunTimeMax);

  if g_nSockCountMax > 0 then
    Dec(g_nSockCountMax);
  if g_nUsrTimeMax > 0 then
    Dec(g_nUsrTimeMax);
  if g_nHumCountMax > 0 then
    Dec(g_nHumCountMax);
  if g_nMonTimeMax > 0 then
    Dec(g_nMonTimeMax);
  if dwUsrRotCountMax > 0 then
    Dec(dwUsrRotCountMax);
  if g_nMonGenTimeMin > 1 then
    Dec(g_nMonGenTimeMin, 2);
  if g_nMonProcTimeMin > 1 then
    Dec(g_nMonProcTimeMin, 2);
  if g_nBaseObjTimeMax > 0 then
    Dec(g_nBaseObjTimeMax);

end;

procedure TFrmMain.StartTimerTimer(Sender: TObject);        //004E4848
var
  nCode                                 : Integer;
  i                                     : Integer;
 
begin
{$IF DEBUG = 0}
  Function2;
{$IFEND}
  SendGameCenterMsg(SG_STARTNOW, '正在启动游戏主程序...');
  StartTimer.Enabled := False;
  FrmDB := TFrmDB.Create();
  StartService();
  try
    for i:=0 to  DateCount-1 do
    Begin
      if DateConfig[i].DataTableName<>'' then
      Begin
        g_sADODBString:=format(g_sADODBString,[DateConfig[i].DataPassWord, DateConfig[i].DataUserName, DateConfig[i].DataTableName, DateConfig[i].DatabaseName]);
        DataModule_mir200[i].ADOConnection_Mir.ConnectString:=g_sADODBString;
        g_GuildManager[i].Query.ConnectionString:=g_sADODBString;
        try
         DataModule_mir200[i].ADOConnection_Mir.Connected:=True;
         MemoLog.Lines.Add(Format('联接SQL数据库%d成功...',[i]));
        except
         MemoLog.Lines.Add(Format('联接SQL数据库%d失败...',[i]));
        End;
      End;
    End;
    LoadGameLogItemNameList();
    LoadDenyIPAddrList();
    LoadDenyAccountList();
    LoadDenyChrNameList();
    LoadNoClearMonList();
    g_Config.nServerFile_CRCB := CalcFileCRC(Application.ExeName);
    MemoLog.Lines.Add('正在加载物品数据库...');
    nCode := FrmDB.LoadItemsDB;
    if nCode < 0 then
    begin
      MemoLog.Lines.Add('物品数据库加载失败!!!' + 'Code: ' +
        IntToStr(nCode));
      exit;
    end;
    MemoLog.Lines.Add(format('物品数据库加载成功(%d)...',
      [UserEngine.StdItemList.Count]));
    MemoLog.Lines.Add('正在加载数据图文件...');
    nCode := FrmDB.LoadMinMap;
    if nCode < 0 then
    begin
      MemoLog.Lines.Add('小地图数据加载失败!!!' + 'Code: ' +
        IntToStr(nCode));
      exit;
    end;
    MemoLog.Lines.Add('小地图数据加载成功...');

    MemoLog.Lines.Add('正在加载地图数据...');
    nCode := FrmDB.LoadMapInfo;
    if nCode < 0 then
    begin
      MemoLog.Lines.Add('地图数据加载失败!!!' + 'Code: ' + IntToStr(nCode));
      exit;
    end;
    MemoLog.Lines.Add(format('地图数据加载成功(%d)...', [g_MapManager.Count]));

    MemoLog.Lines.Add('正在加载怪物数据库...');
    nCode := FrmDB.LoadMonsterDB;
    if nCode < 0 then
    begin
      MemoLog.Lines.Add('加载怪物数据库失败!!!' + 'Code: ' +
        IntToStr(nCode));
      exit;
    end;
    MemoLog.Lines.Add(format('加载怪物数据库成功(%d)...',
      [UserEngine.MonsterList.Count]));

    MemoLog.Lines.Add('正在加载技能数据库...');
    nCode := FrmDB.LoadMagicDB;
    if nCode < 0 then
    begin
      MemoLog.Lines.Add('加载技能数据库失败!!!' + 'Code: ' +
        IntToStr(nCode));
      exit;
    end;
    MemoLog.Lines.Add(format('加载技能数据库成功(%d)...',
      [UserEngine.m_MagicList.Count]));

    MemoLog.Lines.Add('正在加载怪物刷新配置信息...');
    nCode := FrmDB.LoadMonGen;
    if nCode < 0 then
    begin
      MemoLog.Lines.Add('加载怪物刷新配置信息失败!!!' + 'Code: ' +
        IntToStr(nCode));
      exit;
    end;
    MemoLog.Lines.Add(format('加载怪物刷新配置信息成功(%d)...',
      [UserEngine.m_MonGenList.Count]));

    MemoLog.Lines.Add('正加载怪物说话配置信息...');
    LoadMonSayMsg();
    MemoLog.Lines.Add(format('加载怪物说话配置信息成功(%d)...',
      [g_MonSayMsgList.Count]));
    LoadItemLimiteList();
    LoadDisableTakeOffList();
    LoadEnableSellOffList();
    LoadMonDropLimitList();
    LoadDisableMakeItem();
    LoadEnableMakeItem();
    LoadDisableMoveMap;
    ItemUnit.LoadCustomItemName();
    LoadDisableSendMsgList();
    LoadItemBindIPaddr();
    LoadItemBindAccount();
    LoadItemBindCharName();
    LoadUnMasterList();
    LoadUnForceMasterList();
    MemoLog.Lines.Add('正在加载捆装物品信息...');
    nCode := FrmDB.LoadUnbindList;
    if nCode < 0 then
    begin
      MemoLog.Lines.Add('加载捆装物品信息失败!!!' + 'Code: ' +
        IntToStr(nCode));
      exit;
    end;
    MemoLog.Lines.Add('加载捆装物品信息成功...');

    MemoLog.Lines.Add('正在加载任务地图信息...');
    nCode := FrmDB.LoadMapQuest;
    if nCode < 0 then
    begin
      MemoLog.Lines.Add('加载任务地图信息失败!!!');
      exit;
    end;

⌨️ 快捷键说明

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