?? frnengn.pas
字號:
nCode := 16;
end;
except
MainOutMessage(Format(sExceptionMsg, [nCode]));
end;
end;
function TFrontEngine.IsFull: Boolean;
begin
Result := False;
EnterCriticalSection(m_UserCriticalSection);
try
if m_SaveRcdList.Count >= 2000 then begin
Result := True;
end;
finally
LeaveCriticalSection(m_UserCriticalSection);
end;
end;
procedure TFrontEngine.AddToLoadHeroRcdList(sCharName, sMsg: string; PlayObject: TObject; btLoadType: Byte);
var
LoadRcdInfo: pTLoadDBInfo;
begin
New(LoadRcdInfo);
TPlayObject(PlayObject).m_boWaitHeroDate := True;
LoadRcdInfo.sAccount := TPlayObject(PlayObject).m_sUserID;
LoadRcdInfo.sCharName := sCharName;
LoadRcdInfo.sIPaddr := TPlayObject(PlayObject).m_sIPaddr;
LoadRcdInfo.boClinetFlag := TPlayObject(PlayObject).m_boClientFlag;
LoadRcdInfo.nSessionID := TPlayObject(PlayObject).m_nSessionID;
LoadRcdInfo.nSoftVersionDate := TPlayObject(PlayObject).m_nSoftVersionDate;
LoadRcdInfo.nPayMent := TPlayObject(PlayObject).m_nPayMent;
LoadRcdInfo.nPayMode := TPlayObject(PlayObject).m_nPayMode;
LoadRcdInfo.nSocket := TPlayObject(PlayObject).m_nSocket;
LoadRcdInfo.nGSocketIdx := TPlayObject(PlayObject).m_nGSocketIdx;
LoadRcdInfo.nGateIdx := TPlayObject(PlayObject).m_nGateIdx;
LoadRcdInfo.dwNewUserTick := GetTickCount();
LoadRcdInfo.PlayObject := PlayObject;
LoadRcdInfo.nReLoadCount := 0;
LoadRcdInfo.boIsHero := True;
LoadRcdInfo.btLoadDBType := btLoadType;
LoadRcdInfo.sMsg := sMsg;
EnterCriticalSection(m_UserCriticalSection);
try
m_LoadRcdList.Add(LoadRcdInfo);
finally
LeaveCriticalSection(m_UserCriticalSection);
end;
end;
procedure TFrontEngine.AddToLoadRcdList(sAccount, sChrName, sIPaddr: string;
boFlag: Boolean; nSessionID, nPayMent, nPayMode, nSoftVersionDate, nSocket, nGSocketIdx, nGateIdx: Integer);
var
LoadRcdInfo: pTLoadDBInfo;
begin
New(LoadRcdInfo);
LoadRcdInfo.sAccount := sAccount;
LoadRcdInfo.sCharName := sChrName;
LoadRcdInfo.sIPaddr := sIPaddr;
LoadRcdInfo.boClinetFlag := boFlag;
LoadRcdInfo.nSessionID := nSessionID;
LoadRcdInfo.nSoftVersionDate := nSoftVersionDate;
LoadRcdInfo.nPayMent := nPayMent;
LoadRcdInfo.nPayMode := nPayMode;
LoadRcdInfo.nSocket := nSocket;
LoadRcdInfo.nGSocketIdx := nGSocketIdx;
LoadRcdInfo.nGateIdx := nGateIdx;
LoadRcdInfo.dwNewUserTick := GetTickCount();
LoadRcdInfo.PlayObject := nil;
LoadRcdInfo.nReLoadCount := 0;
LoadRcdInfo.boIsHero := False;
EnterCriticalSection(m_UserCriticalSection);
try
m_LoadRcdList.Add(LoadRcdInfo);
finally
LeaveCriticalSection(m_UserCriticalSection);
end;
end;
function TFrontEngine.LoadHumFromDB(LoadUser: pTLoadDBInfo; var boReTry: Boolean): Boolean; //004B4B10
var
HumanRcd: THumDataInfo;
UserOpenInfo: pTUserOpenInfo;
PlayObject: TPlayObject;
nOpenStatus: Integer;
resourcestring
sReLoginFailMsg = '[非法登錄] 全局會話驗(yàn)證失敗(%s/%s/%s/%d)';
begin
Result := False;
boReTry := False;
if (not LoadUser.boIsHero) or ((LoadUser.boIsHero) and (LoadUser.btLoadDBType = 0)) then begin
if InSaveRcdList(LoadUser.sAccount, LoadUser.sCharName) then begin
boReTry := True; //反回TRUE,則重新加入隊(duì)列
Exit;
end;
end;
if not LoadUser.boIsHero then begin
if (UserEngine.GetPlayObjectEx(LoadUser.sAccount, LoadUser.sCharName) <> nil) then begin
UserEngine.KickPlayObjectEx(LoadUser.sAccount, LoadUser.sCharName);
boReTry := True; //反回TRUE,則重新加入隊(duì)列
Exit;
end;
end;
if not LoadUser.boIsHero then begin
if not LoadHumRcdFromDB(LoadUser.sAccount, LoadUser.sCharName, LoadUser.sIPaddr, HumanRcd, LoadUser.nSessionID) then begin
RunSocket.SendOutConnectMsg(LoadUser.nGateIdx, LoadUser.nSocket, LoadUser.nGSocketIdx);
end else begin
New(UserOpenInfo);
UserOpenInfo.sAccount := LoadUser.sAccount;
UserOpenInfo.sChrName := LoadUser.sCharName;
UserOpenInfo.LoadUser := LoadUser^;
UserOpenInfo.HumanRcd := HumanRcd;
UserEngine.AddUserOpenInfo(UserOpenInfo);
Result := True;
end;
end else begin
nOpenStatus := -1;
case LoadUser.btLoadDBType of
0: if LoadHeroRcdFromDB(LoadUser.sAccount, LoadUser.sCharName, LoadUser.sIPaddr, HumanRcd, LoadUser.nSessionID) then nOpenStatus := 1;
1: nOpenStatus := NewHeroRcd(LoadUser.sCharName, LoadUser.sMsg);
2: if DelHeroRcd(LoadUser.sAccount, LoadUser.sCharName, LoadUser.sIPaddr, LoadUser.nSessionID) then nOpenStatus := 1 else nOpenStatus := 0;
end;
New(UserOpenInfo);
UserOpenInfo.sAccount := LoadUser.sAccount;
UserOpenInfo.sChrName := LoadUser.sCharName;
UserOpenInfo.LoadUser := LoadUser^;
UserOpenInfo.HumanRcd := HumanRcd;
UserOpenInfo.nOpenStatus := nOpenStatus;
UserEngine.AddUserOpenInfo(UserOpenInfo);
Result := True;
end;
end;
function TFrontEngine.InSaveRcdList(sAccount, sChrName: string): Boolean;
var
I: Integer;
begin
Result := False;
EnterCriticalSection(m_UserCriticalSection);
try
for I := 0 to m_SaveRcdList.Count - 1 do begin
if (pTSaveRcd(m_SaveRcdList.Items[I]).sAccount = sAccount) and
(pTSaveRcd(m_SaveRcdList.Items[I]).sChrName = sChrName) then begin
Result := True;
Break;
end;
end;
finally
LeaveCriticalSection(m_UserCriticalSection);
end;
end;
procedure TFrontEngine.AddChangeGoldList(sGameMasterName, sGetGoldUserName: string;
nGold: Integer);
var
GoldInfo: pTGoldChangeInfo;
begin
New(GoldInfo);
GoldInfo.sGameMasterName := sGameMasterName;
GoldInfo.sGetGoldUser := sGetGoldUserName;
GoldInfo.nGold := nGold;
m_ChangeGoldList.Add(GoldInfo);
end;
procedure TFrontEngine.AddToSaveRcdList(SaveRcd: pTSaveRcd);
begin
EnterCriticalSection(m_UserCriticalSection);
try
m_SaveRcdList.Add(SaveRcd);
finally
LeaveCriticalSection(m_UserCriticalSection);
end;
end;
function TFrontEngine.GetSaveRcd(sAccount, sCharName: string): pTSaveRcd;
var
I: Integer;
SaveRcd: pTSaveRcd;
begin
Result := nil;
EnterCriticalSection(m_UserCriticalSection);
try
for I := 0 to m_SaveRcdList.Count - 1 do begin
SaveRcd := pTSaveRcd(m_SaveRcdList.Items[I]);
if (SaveRcd.sAccount = sAccount) and
(SaveRcd.sChrName = sCharName) then begin
Result := SaveRcd;
Break;
end;
end;
finally
LeaveCriticalSection(m_UserCriticalSection);
end;
end;
function TFrontEngine.UpDataSaveRcdList(SaveRcd: pTSaveRcd): Boolean; //2005-11-12 增加
var
I: Integer;
HumanRcd: pTSaveRcd;
begin
Result := False;
EnterCriticalSection(m_UserCriticalSection);
try
for I := m_SaveRcdList.Count - 1 downto 0 do begin
HumanRcd := pTSaveRcd(m_SaveRcdList.Items[I]);
if (HumanRcd.sAccount = SaveRcd.sAccount) and
(HumanRcd.sChrName = SaveRcd.sChrName) then begin
HumanRcd.HumanRcd := SaveRcd.HumanRcd;
Result := True;
//m_SaveRcdList.Delete(I);
//DisPoseAndNil(SaveRcd);
Exit;
end;
end;
m_SaveRcdList.Add(SaveRcd);
finally
LeaveCriticalSection(m_UserCriticalSection);
end;
end;
procedure TFrontEngine.DeleteHuman(nGateIndex, nSocket: Integer);
var
I: Integer;
LoadRcdInfo: pTLoadDBInfo;
begin
EnterCriticalSection(m_UserCriticalSection);
try
for I := m_LoadRcdList.Count - 1 downto 0 do begin
if m_LoadRcdList.Count <= 0 then Break;
LoadRcdInfo := m_LoadRcdList.Items[I];
if (LoadRcdInfo.nGateIdx = nGateIndex) and (LoadRcdInfo.nSocket = nSocket) then begin
m_LoadRcdList.Delete(I);
Dispose(LoadRcdInfo);
Break;
end;
end;
finally
LeaveCriticalSection(m_UserCriticalSection);
end;
end;
function TFrontEngine.ChangeUserGoldInDB(GoldChangeInfo: pTGoldChangeInfo): Boolean;
var
HumanRcd: THumDataInfo;
begin
Result := False;
if LoadHumRcdFromDB('1', GoldChangeInfo.sGetGoldUser, '1', HumanRcd, 1) then begin
if ((HumanRcd.Data.nGold + GoldChangeInfo.nGold) > 0) and ((HumanRcd.Data.nGold + GoldChangeInfo.nGold) < 2000000000) then begin
Inc(HumanRcd.Data.nGold, GoldChangeInfo.nGold);
if SaveHumRcdToDB('1', GoldChangeInfo.sGetGoldUser, 1, False, HumanRcd) then begin
UserEngine.sub_4AE514(GoldChangeInfo);
Result := True;
end;
end;
end;
end;
procedure TFrontEngine.Run;
begin
ProcessGameDate();
GetGameTime();
end;
end.
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -