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

📄 dbshare.pas

📁 乐都SQL版传奇全套代码,绝对可编译
💻 PAS
📖 第 1 页 / 共 2 页
字号:
//DB 都没搞懂 我要了也没用  王清 QQ286251099 2008.3.23 
unit DBShare;

interface
uses
  Windows, Messages, Classes, SysUtils, IniFiles, Grobal2, MudUtil, D7ScktComp;

const
   Mode=0;//0:线程 1:定时器 2:实时
   UserCount=500;
const
  GS_QUIT           = 0;
  SG_FORMHANDLE     = 1000;
  SG_STARTNOW       = 1001;
  SG_STARTOK        = 1002;
  SG_CHECKCODEADDR  = 1006;
  SG_USERACCOUNT    = 5;
  SG_USERACCOUNTCHANGESTATUS = 6;
type
  TProgamType = (tDBServer, tLoginSrv, tLogServer, tM2Server, tLoginGate,
    tLoginGate1, tSelGate, tSelGate1, tRunGate, tRunGate1, tRunGate2, tRunGate3,
    tRunGate4, tRunGate5, tRunGate6, tRunGate7, tRunGate8);


   
  TUserInfo = record
    sAccount: string;                                       //0x00
    sUserIPaddr: string;                                    //0x0B
    sGateIPaddr: string;
    sConnID: string;                                        //0x20
    nSessionID: Integer;                                    //0x24
    Socket: TCustomWinSocket;
    s2C: string;                                            //0x2C
    boChrSelected: Boolean;                                 //0x30
    boChrQueryed: Boolean;                                  //0x31
    dwTick34: LongWord;                                     //0x34
    dwChrTick: LongWord;                                    //0x38
    nSelGateID: ShortInt;                                   //角色网关ID
    IsUsered:Boolean;
    DBIndex :Integer;
  end;
 
  TRouteInfo = record
    nGateCount: Integer;
    sSelGateIP: string[15];
    sGameGateIP: array[0..7] of string[15];
    nGameGatePort: array[0..7] of Integer;
  end;
  pTRouteInfo = ^TRouteInfo;

  TGateInfo = record
    Socket        : TCustomWinSocket;
    sGateaddr     : string;                                      //0x04
    sText         : string;
    sReceiveText  : string;                                 //0x08
    UserList      : array[0..UserCount] of TUserInfo;                                        //0x0C
    Count         : Integer;
    dwTick10      : LongWord;                                     //0x10
    nGateID       : Integer;                                       //网关ID
    IsUsed        : Boolean;
  end;
    TDateBaseConfig=packed record
    ip          : string;
    DatabaseName  : String;
    DataTableName    : String;
    DataUserName : String;
    DAtaPassWord: String;
  End;
procedure LoadConfig();
procedure LoadIPTable();
procedure LoadGateID();
function GetGateID(sIPaddr: string): Integer;
function GetCodeMsgSize(X: Double): Integer;
function CheckChrName(sChrName: string): Boolean;

procedure OutMainMessage(sMsg: string);
procedure WriteLogMsg(sMsg: string);
function CheckServerIP(sIP: string): Boolean;
procedure SendGameCenterMsg(wIdent: Word; sSendMsg: string);
var
  sHumDBFilePath                        : string = '.\FDB\';
  sDataDBFilePath                       : string = '.\FDB\';
  sFeedPath                             : string = '.\FDB\';
  sBackupPath                           : string = '.\FDB\';
  sConnectPath                          : string = '.\Connects\';
  sLogPath                              : string = '.\Log\';

  nServerPort                           : Integer = 6000;
  sServerAddr                           : string = '0.0.0.0';
  g_nGatePort                           : Integer = 5100;
  g_sGateAddr                           : string = '0.0.0.0';
  nIDServerPort                         : Integer = 5600;
  sIDServerAddr                         : string = '127.0.0.1';
  sLogFileName                          : string = 'Dbsrv.log';
  g_nRemotPort                          : Integer=8000;
  g_SRemotAddr                          : string='127.0.0.1';

  DataBaseConfig: TDatebaseconfig;
  LogMemstream:TStringList;

  boViewHackMsg                         : Boolean = False;
  //  sDBIdxHeaderDesc   :String = 'legend of mir database index file 2001/7';
  //  sDBHeaderDesc      :String = 'legend of mir database file 1999/1';
  HumDB_CS                              : TRTLCriticalSection; //0x004ADACC

  n4ADAE4                               : Integer;
  n4ADAE8                               : Integer;
  n4ADAEC                               : Integer;
  n4ADAF0                               : Integer;
  boDataDBReady                         : Boolean;          //0x004ADAF4
  n4ADAFC                               : Integer;
  n4ADB00                               : Integer;
  n4ADB04                               : Integer;
  boHumDBReady                          : Boolean;          //0x4ADB08
  n4ADBF4                               : Integer;
  n4ADBF8                               : Integer;
  n4ADBFC                               : Integer;
  n4ADC00                               : Integer;
  n4ADC04                               : Integer;
  boAutoClearDB                         : Boolean;          //0x004ADC08
  g_nQueryChrCount                      : Integer;          //0x004ADC0C
  nHackerNewChrCount                    : Integer;          //0x004ADC10
  nHackerDelChrCount                    : Integer;          //0x004ADC14
  nHackerSelChrCount                    : Integer;          //0x004ADC18
  n4ADC1C                               : Integer;
  n4ADC20                               : Integer;
  n4ADC24                               : Integer;
  n4ADC28                               : Integer;
  n4ADC2C                               : Integer;
  n4ADB10                               : Integer;
  n4ADB14                               : Integer;
  n4ADB18                               : Integer;
  n4ADBB8                               : Integer;
  bo4ADB1C                              : Boolean;

  sServerName                           : string = '乐都世界';
  sConfFileName                         : string = '.\Dbsrc.ini';
  sGateConfFileName                     : string = '.\!ServerInfo.txt';
  sServerIPConfFileNmae                 : string = '.\!AddrTable.txt';
  sGateIDConfFileName                   : string = '.\SelectID.txt';

  sMapFile                              : string;
  DenyChrNameList                       : TStringList;
  ServerIPList                          : TStringList;
  GateIDList                            : TStringList;
  {
  nClearIndex        :Integer;   //当前清理位置(记录的ID)
  nClearCount        :Integer;   //当前已经清量数量
  nRecordCount       :Integer;   //当前总记录数
  }
  {
  boClearLevel1      :Boolean = True;
  boClearLevel2      :Boolean = True;
  boClearLevel3      :Boolean = True;
  }
  dwInterval                            : LongWord = 3000;  //清理时间间隔长度

  nLevel1                               : Integer = 1;      //清理等级 1
  nLevel2                               : Integer = 7;      //清理等级 2
  nLevel3                               : Integer = 14;     //清理等级 3

  nDay1                                 : Integer = 14;     //清理未登录天数 1
  nDay2                                 : Integer = 62;     //清理未登录天数 2
  nDay3                                 : Integer = 124;    //清理未登录天数 3

  nMonth1                               : Integer = 0;      //清理未登录月数 1
  nMonth2                               : Integer = 0;      //清理未登录月数 2
  nMonth3                               : Integer = 0;      //清理未登录月数 3

  g_nClearRecordCount                   : Integer;
  g_nClearIndex                         : Integer;          //0x324
  g_nClearCount                         : Integer;          //0x328
  g_nClearItemIndexCount                : Integer;

  boOpenDBBusy                          : Boolean;          //0x350
  g_dwGameCenterHandle                  : THandle;
  g_boDynamicIPMode                     : Boolean = False;
  g_CheckCode                           : TCheckCode;


  g_RouteInfo                           : array[0..19] of TRouteInfo;
implementation

uses DBSMain, HUtil32;

procedure LoadGateID();
var
  i                                     : Integer;
  LoadList                              : TStringList;
  sLineText                             : string;
  sID                                   : string;
  sIPaddr                               : string;
  nID                                   : Integer;
begin
  GateIDList.Clear;
  if FileExists(sGateIDConfFileName) then
  begin
    LoadList := TStringList.Create;
    LoadList.LoadFromFile(sGateIDConfFileName);
    for i := 0 to LoadList.Count - 1 do
    begin
      sLineText := LoadList.Strings[i];
      if (sLineText = '') or (sLineText[1] = ';') then
        Continue;
      sLineText := GetValidStr3(sLineText, sID, [' ', #9]);
      sLineText := GetValidStr3(sLineText, sIPaddr, [' ', #9]);
      nID := Str_ToInt(sID, -1);
      if nID < 0 then
        Continue;
      GateIDList.AddObject(sIPaddr, TObject(nID))
    end;
    LoadList.Free;
  end;
end;

function GetGateID(sIPaddr: string): Integer;
var
  i                                     : Integer;
begin
  Result := 0;
  for i := 0 to GateIDList.Count - 1 do
  begin
    if GateIDList.Strings[i] = sIPaddr then
    begin
      Result := Integer(GateIDList.Objects[i]);
      break;
    end;

  end;
end;

procedure LoadIPTable();

⌨️ 快捷键说明

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