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

📄 lsshare.pas

📁 乐都SQL版传奇全套代码,绝对可编译
💻 PAS
字号:
unit LSShare;

interface
uses
  Windows, Messages, Classes, SysUtils, SyncObjs, MudUtil, IniFiles, Grobal2;
const
  IDFILEMODE                            = 0;                //文件模式
  IDDBMODE                              = 1;                //数据库模式

  IDMODE                                = IDFILEMODE;
  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);

  TGateNet = record
    sIPaddr: string;
    nPort: Integer;
    boEnable: Boolean;
  end;
  TGateRoute = record
    sServerName: string;
    sTitle: string;
    sRemoteAddr: string;
    sPublicAddr: string;
    nSelIdx: Integer;
    Gate: array[0..9] of TGateNet;
  end;
  TDateBaseConfig=packed record
    ip          : string;
    DataServer  : String;
    DATABase    : String;
    DataAccount : String;
    DAtaPassWord: String;
  End;
  TConfig = record
    IniConf: TIniFile;
    DataBaseConfig: TDateBaseConfig;
    boRemoteClose: Boolean;
    sDBServer: string[30];                                  //0x00475368
    nDBSPort: Integer;                                      //0x00475374
    sFeeServer: string[30];                                 //0x0047536C
    nFeePort: Integer;                                      //0x00475378
    sLogServer: string[30];                                 //0x00475370
    nLogPort: Integer;                                      //0x0047537C
    sGateAddr: string[30];
    nGatePort: Integer;
    sRemoteAddr :string[30];
    nRemotePort :Integer;
    sServerAddr: string[30];
    nServerPort: Integer;
    sMonAddr: string[30];
    nMonPort: Integer;
    sGateIPaddr: string[30]; //当前处理的网关连接IP地址
    sIdDir: string[50];
    sWebLogDir: string[50];
    sFeedIDList: string[50];
    sFeedIPList: string[50];
    sCountLogDir: string[50];
    sChrLogDir: string[50];
    boTestServer: Boolean;
    boEnableMakingID: Boolean;
    boDynamicIPMode: Boolean;
    nReadyServers: Integer;

    GateCriticalSection: TRTLCriticalSection;
    GateList: TList;
    SessionList: TGList;
    ServerNameList: TStringList;
    AccountCostList: TQuickList;
    IPaddrCostList: TQuickList;
    boShowDetailMsg: Boolean;
    dwProcessGateTick: LongWord;                            //0x00475380
    dwProcessGateTime: LongWord;                            //0x00475384
    nRouteCount: Integer;                                   //0x47328C
    GateRoute: array[0..59] of TGateRoute;

  end;
  pTConfig = ^TConfig;
function GetCodeMsgSize(X: Double): Integer;
function CheckAccountName(sName: string): Boolean;
function GetSessionID(): Integer;
procedure SaveGateConfig(Config: pTConfig);
function GetGatePublicAddr(Config: pTConfig; sGateIP: string): string;
function GenSpaceString(sStr: string; nSpaceCOunt: Integer): string;
procedure MainOutMessage(sMsg: string);
procedure SendGameCenterMsg(wIdent:Word;sSendMsg:String);
var
  g_Config                              : TConfig = (boRemoteClose: False;
    sDBServer: '127.0.0.1';
    nDBSPort: 16300;
    sFeeServer: '127.0.0.1';
    nFeePort: 16301;
    sLogServer: '127.0.0.1';
    nLogPort: 16301;
    sGateAddr: '0.0.0.0';
    nGatePort: 5500;
    sServerAddr: '0.0.0.0';
    nServerPort: 5600;
    sMonAddr: '0.0.0.0';
    nMonPort: 3000;
    sIdDir: '.\DB\';                                        //0x00470D04
    sWebLogDir: '.\Share\';                                 //0x00470D08
    sFeedIDList: '.\FeedIDList.txt';                        //0x00470D0C
    sFeedIPList: '.\FeedIPList.txt';                        //0x00470D10
    sCountLogDir: '.\CountLog\';                            //0x00470D14
    sChrLogDir: '.\ChrLog\';
    boTestServer: true;
    boEnableMakingID: true;
    boDynamicIPMode: False;
    nReadyServers: 0;
    boShowDetailMsg: False
    );





  //g_sGateAddr     :String = '0.0.0.0';
  //g_nGatePort     :Integer = 5500;
  //g_sServerAddr   :String = '0.0.0.0';
  //g_nServerPort   :Integer = 5600;
  //g_sMonAddr      :String = '0.0.0.0';
  //g_nMonPort      :Integer = 3000;

  //g_boDynamicIPMode :Boolean = False;


  //nReadyServers     :Integer;           //0x00475388
  StringList_0                          : TStringList;      //0x0047538C
  nOnlineCountMin                       : Integer;          //0x00475390
  nOnlineCountMax                       : Integer;          //0x00475394
  nMemoHeigh                            : Integer;          //0x00475398
  g_OutMessageCS                        : TRTLCriticalSection;
  g_MainMsgList                         : TStringList;      //0x0047539C
  CS_DB                                 : TCriticalSection; //0x004753A0
  n4753A4                               : Integer;          //0x004753A4
  n4753A8                               : Integer;          //0x004753A8
  n4753B0                               : Integer;          //0x004753B0

  //sIdDir            :String = '.\DB\';             //0x00470D04
  //sWebLogDir        :String = '.\Share\';          //0x00470D08
  //sFeedIDList       :String = '.\FeedIDList.txt';  //0x00470D0C
  //sFeedIPList       :String = '.\FeedIPList.txt';  //0x00470D10
  //sCountLogDir      :String = '.\CountLog\';       //0x00470D14
  //sChrLogDir        :String = '.\ChrLog\';
  //boTestServer      :Boolean = False;              //0x00470D18
  //boEnableMakingID  :Boolean = True;              //0x00470D18

  n47328C                               : Integer;

  nSessionIdx                           : Integer;          //0x00473294

  g_n472A6C                             : Integer;
  g_n472A70                             : Integer;
  g_n472A74                             : Integer;
  g_boDataDBReady                       : Boolean;          //0x00472A78
  bo470D20                              : Boolean;




  nVersionDate                          : Integer = 20011006;


  ServerAddr                            : array[0..99] of string[15];



  g_dwGameCenterHandle                  : THandle;

implementation



function GetCodeMsgSize(X: Double): Integer;
begin
  if INT(X) < X then
    Result := TRUNC(X) + 1
  else
    Result := TRUNC(X)
end;

function CheckAccountName(sName: string): Boolean;          //00454384
var
  I                                     : Integer;
  nLen                                  : Integer;
begin
  Result := False;
  if sName = '' then
    exit;
  Result := true;
  nLen := length(sName);
  I := 1;
  while (true) do
  begin
    if I > nLen then
      break;
    if (sName[I] < '0') or (sName[I] > 'z') then
    begin
      ;
      Result := False;
      if (sName[I] >= #$B0) and (sName[I] <= #$C8) then
      begin
        Inc(I);
        if I <= nLen then
          if (sName[I] >= #$A1) and (sName[I] <= #$FE) then
            Result := true;
      end;
      if not Result then
        break;
    end;
    Inc(I);
  end;
end;
//00468BDC

function GetSessionID(): Integer;
begin
  Inc(nSessionIdx);
  if nSessionIdx >= High(Integer) then
  begin
    nSessionIdx := 2;
  end;
  Result := nSessionIdx;
end;
//0046D4F4

procedure SaveGateConfig(Config: pTConfig);
var
  SaveList                              : TStringList;
  I, n8                                 : Integer;
  s10, sC                               : string;
begin
  SaveList := TStringList.Create;
  SaveList.Add(';No space allowed');
  SaveList.Add(GenSpaceString(';Server', 15) + GenSpaceString('Title', 15) +
    GenSpaceString('Remote', 17) + GenSpaceString('Public', 17) + 'Gate...');
  for I := 0 to Config.nRouteCount - 1 do
  begin
    sC := GenSpaceString(Config.GateRoute[I].sServerName, 15) +
      GenSpaceString(Config.GateRoute[I].sTitle, 15) +
      GenSpaceString(Config.GateRoute[I].sRemoteAddr, 17) +
      GenSpaceString(Config.GateRoute[I].sPublicAddr, 17);
    n8 := 0;
    while (true) do
    begin
      s10 := Config.GateRoute[I].Gate[n8].sIPaddr;
      if s10 = '' then
        break;
      if not Config.GateRoute[I].Gate[n8].boEnable then
        s10 := '*' + s10;
      s10 := s10 + ':' + IntToStr(Config.GateRoute[I].Gate[n8].nPort);
      sC := sC + GenSpaceString(s10, 17);
      Inc(n8);
      if n8 >= 10 then
        break;
    end;
    SaveList.Add(sC);
  end;
  SaveList.SaveToFile('.\!addrtable.txt');
  SaveList.Free;
end;
//0046D7F8

function GetGatePublicAddr(Config: pTConfig; sGateIP: string): string;
var
  I                                     : Integer;
begin
  Result := sGateIP;
  for I := 0 to Config.nRouteCount - 1 do
  begin
    if Config.GateRoute[I].sRemoteAddr = sGateIP then
    begin
      Result := Config.GateRoute[I].sPublicAddr;
      break;
    end;
  end;
end;
//004541C4

function GenSpaceString(sStr: string; nSpaceCOunt: Integer): string;
var
  I                                     : Integer;
begin
  Result := sStr + ' ';
  for I := 1 to nSpaceCOunt - length(sStr) do
  begin
    Result := Result + ' ';
  end;
end;
//00468F00

procedure MainOutMessage(sMsg: string);
begin
  EnterCriticalSection(g_OutMessageCS);
  try
    g_MainMsgList.Add(sMsg)
  finally
    LeaveCriticalSection(g_OutMessageCS);
  end;
end;
procedure SendGameCenterMsg(wIdent:Word;sSendMsg:String);
var
  SendData:TCopyDataStruct;
  nParam:Integer;
begin
  nParam:=MakeLong(Word(tLoginSrv),wIdent);
  SendData.cbData:=Length (sSendMsg) + 1;
  GetMem(SendData.lpData,SendData.cbData);
  StrCopy (SendData.lpData, PChar(sSendMsg));
  SendMessage(g_dwGameCenterHandle,WM_COPYDATA,nParam,Cardinal(@SendData));
  FreeMem(SendData.lpData);
end;


initialization
  begin
    InitializeCriticalSection(g_OutMessageCS);

    g_MainMsgList := TStringList.Create;

  end;
finalization
  begin
    g_MainMsgList.Free;
    DeleteCriticalSection(g_OutMessageCS);
  end;
end.

⌨️ 快捷键说明

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