📄 dbshare.pas
字号:
//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 + -