📄 dbshare.~pa
字号:
unit DBShare;
interface
uses
Windows, Messages, Classes, SysUtils, JSocket, WinSock, IniFiles, Grobal2, MudUtil, Common;
const
g_sVersion = '程序版本: 1.00 Build 20060924';
g_sUpDateTime = '更新日期: 2006/09/24';
{$IF Version = SuperUser}
g_sProgram = '程序制作: 叶随风飘 QQ:240621028';
g_sWebSite = '官方网站: http://www.51ggame.com';
{$ELSEIF Version = UserKey1}
g_sProgram = '程序制作: 飞尔世界 QQ:13677866';
g_sWebSite = '官方网站: http://www.cqfir.com';
{$ELSEIF Version = UserKey2}
g_sProgram = '程序制作: 亿众网络 QQ:987355';
g_sWebSite = '官方网站: http://www.hao4f.cn';
{$ELSEIF Version = UserKey3}
g_sProgram = '程序制作: 我爱罗 QQ:548262';
g_sWebSite = '官方网站: http://www.588idc.com';
{$ELSEIF Version = UserKey4}
g_sProgram = '程序制作: 无泪 QQ:19639454';
g_sWebSite = '官方网站: http://www.coipc.com';
{$ELSEIF Version = UserKey5}
g_sProgram = '程序制作: 叶随风飘 QQ:240621028';
g_sWebSite = '官方网站: http://www.51ggame.com';
{$ELSEIF Version = UserKey6}
g_sProgram = '程序制作: 叶随风飘 QQ:240621028';
g_sWebSite = '官方网站: http://www.51ggame.com';
{$IFEND}
type
TGList = class(TList)
private
GLock: TRTLCriticalSection;
public
constructor Create;
destructor Destroy; override;
procedure Lock;
procedure UnLock;
end;
TSockaddr = record
nIPaddr: Integer;
dwStartAttackTick: LongWord;
nAttackCount: Integer;
end;
pTSockaddr = ^TSockaddr;
TCheckCode = record
dwThread0: LongWord;
end;
TGateInfo = record
Socket: TCustomWinSocket;
sGateaddr: string; //0x04
sText: string; //0x08
UserList: TList; //0x0C
dwTick10: LongWord; //0x10
nGateID: Integer; //网关ID
end;
pTGateInfo = ^TGateInfo;
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
//nSelGateID :Integer;
end;
pTUserInfo = ^TUserInfo;
TRouteInfo = record
nGateCount: Integer;
sSelGateIP: string[15];
sGameGateIP: array[0..7] of string[15];
nGameGatePort: array[0..7] of Integer;
end;
pTRouteInfo = ^TRouteInfo;
procedure LoadConfig();
procedure LoadIPTable();
procedure LoadGateID();
function GetGateID(sIPaddr: string): Integer;
function GetCodeMsgSize(X: Double): Integer;
function CheckChrName(sChrName: string): Boolean;
function InClearMakeIndexList(nIndex: Integer): Boolean;
procedure WriteLogMsg(sMsg: string);
function CheckServerIP(sIP: string): Boolean;
procedure SendGameCenterMsg(wIdent: Word; sSendMsg: string);
procedure MainOutMessage(sMsg: string);
function GetMagicName(wMagicId: Word): string;
function GetStdItemName(nPosition: Integer): string;
function AddAttackIP(sIPaddr: string): Boolean;
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';
{nDataManagePort: Integer = 6600;
sDataManageAddrPort: string = '0.0.0.0';}
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';
sHeroDB: string = 'HeroDB';
sMapFile: string;
DenyChrNameList: TStringList;
ServerIPList: TStringList;
GateIDList: TStringList;
StdItemList: TList;
MagicList: TList;
{
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_ClearMakeIndex: TStringList;
g_RouteInfo: array[0..19] of TRouteInfo;
g_MainMsgList: TStringList;
g_OutMessageCS: TRTLCriticalSection;
ProcessHumanCriticalSection: TRTLCriticalSection;
IDSocketConnected: Boolean;
UserSocketClientConnected: Boolean;
ServerSocketClientConnected: Boolean;
DataManageSocketClientConnected: Boolean;
ID_sRemoteAddress: string;
User_sRemoteAddress: string;
Server_sRemoteAddress: string;
DataManage_sRemoteAddress: string;
ID_nRemotePort: Integer;
User_nRemotePort: Integer;
Server_nRemotePort: Integer;
DataManage_nRemotePort: Integer;
dwKeepAliveTick: LongWord;
dwKeepIDAliveTick: LongWord;
dwKeepServerAliveTick: LongWord;
AttackIPaddrList: TGList; //攻击IP临时列表
boAttack: Boolean = False;
boDenyChrName: Boolean = True;
const
tDBServer = 0;
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();
begin
ServerIPList.Clear;
try
ServerIPList.LoadFromFile(sServerIPConfFileNmae);
except
MainOutMessage('加载IP列表文件 ' + sServerIPConfFileNmae + ' 出错!!!');
end;
end;
procedure LoadConfig();
var
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -