📄 dbshare.~pa
字号:
Conf: TIniFile;
LoadInteger: Integer;
begin
Conf := TIniFile.Create(sConfFileName);
if Conf <> nil then begin
sDataDBFilePath := Conf.ReadString('DB', 'Dir', sDataDBFilePath);
sHumDBFilePath := Conf.ReadString('DB', 'HumDir', sHumDBFilePath);
sFeedPath := Conf.ReadString('DB', 'FeeDir', sFeedPath);
sBackupPath := Conf.ReadString('DB', 'Backup', sBackupPath);
sConnectPath := Conf.ReadString('DB', 'ConnectDir', sConnectPath);
sLogPath := Conf.ReadString('DB', 'LogDir', sLogPath);
nServerPort := Conf.ReadInteger('Setup', 'ServerPort', nServerPort);
sServerAddr := Conf.ReadString('Setup', 'ServerAddr', sServerAddr);
g_nGatePort := Conf.ReadInteger('Setup', 'GatePort', g_nGatePort);
g_sGateAddr := Conf.ReadString('Setup', 'GateAddr', g_sGateAddr);
sIDServerAddr := Conf.ReadString('Server', 'IDSAddr', sIDServerAddr);
nIDServerPort := Conf.ReadInteger('Server', 'IDSPort', nIDServerPort);
boViewHackMsg := Conf.ReadBool('Setup', 'ViewHackMsg', boViewHackMsg);
sServerName := Conf.ReadString('Setup', 'ServerName', sServerName);
boAttack := Conf.ReadBool('Setup', 'Attack', boAttack);
boDenyChrName := Conf.ReadBool('Setup', 'DenyChrName', boDenyChrName);
{
boClearLevel1:=Conf.ReadBool('DBClear','ClearLevel1',boClearLevel1);
boClearLevel2:=Conf.ReadBool('DBClear','ClearLevel2',boClearLevel2);
boClearLevel3:=Conf.ReadBool('DBClear','ClearLevel3',boClearLevel3);
}
dwInterval := Conf.ReadInteger('DBClear', 'Interval', dwInterval);
nLevel1 := Conf.ReadInteger('DBClear', 'Level1', nLevel1);
nLevel2 := Conf.ReadInteger('DBClear', 'Level2', nLevel2);
nLevel3 := Conf.ReadInteger('DBClear', 'Level3', nLevel3);
nDay1 := Conf.ReadInteger('DBClear', 'Day1', nDay1);
nDay2 := Conf.ReadInteger('DBClear', 'Day2', nDay2);
nDay3 := Conf.ReadInteger('DBClear', 'Day3', nDay3);
nMonth1 := Conf.ReadInteger('DBClear', 'Month1', nMonth1);
nMonth2 := Conf.ReadInteger('DBClear', 'Month2', nMonth2);
nMonth3 := Conf.ReadInteger('DBClear', 'Month3', nMonth3);
LoadInteger := Conf.ReadInteger('Setup', 'DynamicIPMode', -1);
if LoadInteger < 0 then begin
Conf.WriteBool('Setup', 'DynamicIPMode', g_boDynamicIPMode);
end else g_boDynamicIPMode := LoadInteger = 1;
sHeroDB := Conf.ReadString('Setup', 'DBName', '');
if sHeroDB = '' then begin
Conf.WriteString('Setup', 'DBName', 'HeroDB');
end;
Conf.Free;
end;
LoadIPTable();
LoadGateID();
end;
function GetStdItemName(nPosition: Integer): string;
var
I: Integer;
StdItem: pTStdItem;
begin
if (nPosition - 1 >= 0) and (nPosition < StdItemList.Count) then begin
StdItem := StdItemList.Items[nPosition - 1];
if StdItem <> nil then begin
Result := StdItem.Name;
end;
end;
end;
function GetMagicName(wMagicId: Word): string;
var
I: Integer;
Magic: pTMagicInfo;
begin
for I := 0 to MagicList.Count - 1 do begin
Magic := MagicList.Items[I];
if Magic <> nil then begin
if Magic.wMagicId = wMagicId then begin
Result := Magic.sMagicName;
break;
end;
end;
end;
end;
function GetCodeMsgSize(X: Double): Integer;
begin
if INT(X) < X then Result := TRUNC(X) + 1
else Result := TRUNC(X)
end;
function CheckChrName(sChrName: string): Boolean;
//0x0045BE60
var
I: Integer;
Chr: Char;
boIsTwoByte: Boolean;
FirstChr: Char;
begin
Result := True;
boIsTwoByte := False;
FirstChr := #0;
for I := 1 to length(sChrName) do begin
Chr := (sChrName[I]);
if boIsTwoByte then begin
//if Chr < #$A1 then Result:=False; //如果小于就是非法字符
// if Chr < #$81 then Result:=False; //如果小于就是非法字符
if not ((FirstChr <= #$F7) and (Chr >= #$40) and (Chr <= #$FE)) then
if not ((FirstChr > #$F7) and (Chr >= #$40) and (Chr <= #$A0)) then Result := False;
boIsTwoByte := False;
end else begin //0045BEC0
//if (Chr >= #$B0) and (Chr <= #$C8) then begin
if (Chr >= #$81) and (Chr <= #$FE) then begin
boIsTwoByte := True;
FirstChr := Chr;
end else begin //0x0045BED2
if not ((Chr >= '0' {#30}) and (Chr <= '9' {#39})) and
not ((Chr >= 'a' {#61}) and (Chr <= 'z') {#7A}) and
not ((Chr >= 'A' {#41}) and (Chr <= 'Z' {#5A})) then
Result := False;
end;
end;
if not Result then break;
end;
end;
function InClearMakeIndexList(nIndex: Integer): Boolean;
var
I: Integer;
begin
Result := False;
for I := 0 to g_ClearMakeIndex.Count - 1 do begin
if nIndex = Integer(g_ClearMakeIndex.Objects[I]) then begin
Result := True;
break;
end;
end;
end;
procedure MainOutMessage(sMsg: string);
begin
EnterCriticalSection(g_OutMessageCS);
try
g_MainMsgList.Add(sMsg);
finally
LeaveCriticalSection(g_OutMessageCS);
end;
end;
procedure WriteLogMsg(sMsg: string);
begin
end;
function CheckServerIP(sIP: string): Boolean;
var
I: Integer;
begin
Result := False;
for I := 0 to ServerIPList.Count - 1 do begin
if CompareText(sIP, ServerIPList.Strings[I]) = 0 then begin
Result := True;
break;
end;
end;
end;
procedure SendGameCenterMsg(wIdent: Word; sSendMsg: string);
var
SendData: TCopyDataStruct;
nParam: Integer;
begin
nParam := MakeLong(Word(tDBServer), 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;
constructor TGList.Create;
begin
inherited Create;
InitializeCriticalSection(GLock);
end;
destructor TGList.Destroy;
begin
DeleteCriticalSection(GLock);
inherited;
end;
procedure TGList.Lock;
begin
EnterCriticalSection(GLock);
end;
procedure TGList.UnLock;
begin
LeaveCriticalSection(GLock);
end;
function AddAttackIP(sIPaddr: string): Boolean;
var
I: Integer;
IPaddr, AddIPaddr: pTSockaddr;
nIPaddr: Integer;
bo01: Boolean;
begin
AttackIPaddrList.Lock;
try
Result := False;
bo01 := False;
nIPaddr := inet_addr(PChar(sIPaddr));
for I := AttackIPaddrList.Count - 1 downto 0 do begin
IPaddr := pTSockaddr(AttackIPaddrList.Items[I]);
if IPaddr.nIPaddr = nIPaddr then begin
if (GetTickCount - IPaddr.dwStartAttackTick) < 200 then begin
Inc(IPaddr.nAttackCount);
if IPaddr.nAttackCount >= 10 then begin
Dispose(IPaddr);
AttackIPaddrList.Delete(I);
Result := True;
end;
end else begin
if IPaddr.nAttackCount > 10 then begin
Result := True;
end;
Dispose(IPaddr);
AttackIPaddrList.Delete(I);
end;
bo01 := True;
break;
end;
end;
if not bo01 then begin
New(AddIPaddr);
FillChar(AddIPaddr^, SizeOf(TSockaddr), 0);
AddIPaddr^.nIPaddr := nIPaddr;
AddIPaddr^.dwStartAttackTick := GetTickCount;
AddIPaddr^.nAttackCount := 0;
AttackIPaddrList.Add(AddIPaddr);
end;
finally
AttackIPaddrList.UnLock;
end;
end;
initialization
begin
InitializeCriticalSection(g_OutMessageCS);
InitializeCriticalSection(HumDB_CS);
g_MainMsgList := TStringList.Create;
DenyChrNameList := TStringList.Create;
ServerIPList := TStringList.Create;
GateIDList := TStringList.Create;
g_ClearMakeIndex := TStringList.Create;
StdItemList := TList.Create;
MagicList := TList.Create;
end;
finalization
begin
DeleteCriticalSection(HumDB_CS);
DeleteCriticalSection(g_OutMessageCS);
DenyChrNameList.Free;
ServerIPList.Free;
GateIDList.Free;
g_ClearMakeIndex.Free;
g_MainMsgList.Free;
StdItemList.Free;
MagicList.Free;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -