📄 usrengn.~pas
字号:
if not canwalk then begin // Envir.CanWalk(PlayObject.m_nCurrX,PlayObject.m_nCurrY,True)
// MainOutMessage(format(sChangeServerFail2,[nServerIndex,PlayObject.m_nServerIndex,PlayObject.m_sMapName]));
{ MainOutMessage('chg-server-fail-2 [' +
IntToStr(nServerIndex) +
'] -> [' +
IntToStr(PlayObject.m_nServerIndex) +
'] [' +
PlayObject.m_sMapName +
']');}
PlayObject.m_sMapName:=g_Config.sHomeMap;
Envir:=g_MapManager.FindMap(g_Config.sHomeMap);
PlayObject.m_nCurrX:=g_Config.nHomeX;
PlayObject.m_nCurrY:=g_Config.nHomeY;
end;
PlayObject.m_PEnvir:=Envir;
if PlayObject.m_PEnvir = nil then begin
MainOutMessage(sErrorEnvirIsNil);
goto ReGetMap;
end else begin
PlayObject.m_boReadyRun:=False;
end;
end else begin //004B0561
GetHumData(PlayObject,UserOpenInfo.HumanRcd);
PlayObject.m_sMapName:=SwitchDataInfo.sMap;
PlayObject.m_nCurrX:=SwitchDataInfo.wX;
PlayObject.m_nCurrY:=SwitchDataInfo.wY;
PlayObject.m_Abil:=SwitchDataInfo.Abil;
PlayObject.m_WAbil:=SwitchDataInfo.Abil;
LoadSwitchData(SwitchDataInfo,PlayObject);
DelSwitchData(SwitchDataInfo);
Envir:=g_MapManager.GetMapInfo(nServerIndex,PlayObject.m_sMapName);
if Envir <> nil then begin
MainOutMessage(format(sChangeServerFail3,[nServerIndex,PlayObject.m_nServerIndex,PlayObject.m_sMapName]));
{MainOutMessage('chg-server-fail-3 [' +
IntToStr(nServerIndex) +
'] -> [' +
IntToStr(PlayObject.m_nServerIndex) +
'] [' +
PlayObject.m_sMapName +
']');}
PlayObject.m_sMapName:=g_Config.sHomeMap;
Envir:=g_MapManager.FindMap(g_Config.sHomeMap);
PlayObject.m_nCurrX:=g_Config.nHomeX;
PlayObject.m_nCurrY:=g_Config.nHomeY;
end else begin
if not Envir.CanWalk(PlayObject.m_nCurrX,PlayObject.m_nCurrY,True) then begin
MainOutMessage(format(sChangeServerFail4,[nServerIndex,PlayObject.m_nServerIndex,PlayObject.m_sMapName]));
{MainOutMessage('chg-server-fail-4 [' +
IntToStr(nServerIndex) +
'] -> [' +
IntToStr(PlayObject.m_nServerIndex) +
'] [' +
PlayObject.m_sMapName +
']');}
PlayObject.m_sMapName:=g_Config.sHomeMap;
Envir:=g_MapManager.FindMap(g_Config.sHomeMap);
PlayObject.m_nCurrX:=g_Config.nHomeX;
PlayObject.m_nCurrY:=g_Config.nHomeY;
end;
PlayObject.AbilCopyToWAbil();
PlayObject.m_PEnvir:=Envir;
if PlayObject.m_PEnvir = nil then begin
MainOutMessage(sErrorEnvirIsNil);
goto ReGetMap;
end else begin
PlayObject.m_boReadyRun:=False;
PlayObject.m_boLoginNoticeOK:=True;
PlayObject.bo6AB:=True;
end;
end;
end;//004B085C
PlayObject.m_sUserID:=UserOpenInfo.LoadUser.sAccount;
PlayObject.m_sIPaddr:=UserOpenInfo.LoadUser.sIPaddr;
PlayObject.m_sIPLocal:=GetIPLocal(PlayObject.m_sIPaddr);
PlayObject.m_nSocket:=UserOpenInfo.LoadUser.nSocket;
PlayObject.m_nGSocketIdx:=UserOpenInfo.LoadUser.nGSocketIdx;
PlayObject.m_nGateIdx:=UserOpenInfo.LoadUser.nGateIdx;
PlayObject.m_nSessionID:=UserOpenInfo.LoadUser.nSessionID;
PlayObject.m_nPayMent:=UserOpenInfo.LoadUser.nPayMent;
PlayObject.m_nPayMode:=UserOpenInfo.LoadUser.nPayMode;
PlayObject.m_dwLoadTick:=UserOpenInfo.LoadUser.dwNewUserTick;
// PlayObject.m_nSoftVersionDate:=UserOpenInfo.HumInfo.nSoftVersionDate;
PlayObject.m_nSoftVersionDateEx:=GetExVersionNO(UserOpenInfo.LoadUser.nSoftVersionDate,PlayObject.m_nSoftVersionDate);
Result:=PlayObject;
except
MainOutMessage(sExceptionMsg);
end;
end;
var
dwUsrRotTime :LongWord;
dwCheckTime :LongWord; //0x10
dwCurTick :LongWord;
nCheck30 :Integer; //0x30
boCheckTimeLimit :Boolean; //0x31
nIdx :Integer;
PlayObject,hum :TPlayObject;
I :Integer;
UserOpenInfo :pTUserOpenInfo;
GoldChangeInfo :pTGoldChangeInfo;
LineNoticeMsg :String;
// nx,ny:integer;
ResourceString
sExceptionMsg1 = '[Exception] TUserEngine::ProcessHumans -> Ready, Save, Load... Code:=%d';
sExceptionMsg2 = '[Exception] TUserEngine::ProcessHumans ClosePlayer.Delete - Free';
sExceptionMsg3 = '[Exception] TUserEngine::ProcessHumans ClosePlayer.Delete';
sExceptionMsg4 = '[Exception] TUserEngine::ProcessHumans RunNotice';
sExceptionMsg5 = '[Exception] TUserEngine::ProcessHumans Human.Operate Code: %d';
sExceptionMsg6 = '[Exception] TUserEngine::ProcessHumans Human.Finalize Code: %d';
sExceptionMsg7 = '[Exception] TUserEngine::ProcessHumans RunSocket.CloseUser Code: %d';
sExceptionMsg8 = '[Exception] TUserEngine::ProcessHumans Code: %d';
begin
nCheck30:=0;
dwCheckTime:=GetTickCount();
if (GetTickCount - m_dwProcessLoadPlayTick) > 200 then begin
m_dwProcessLoadPlayTick:=GetTickCount();
try
EnterCriticalSection(m_LoadPlaySection);
try
for i:=0 to m_LoadPlayList.Count -1 do begin
if not FrontEngine.IsFull and not IsLogined(m_LoadPlayList.Strings[i]) then begin
UserOpenInfo:=pTUserOpenInfo(m_LoadPlayList.Objects[i]);
PlayObject:=MakeNewHuman(UserOpenInfo);
if PlayObject <> nil then begin
//PlayObject.m_boClientFlag:=UserOpenInfo.LoadUser.boClinetFlag; //将客户端标志传到人物数据中
m_PlayObjectList.AddObject(m_LoadPlayList.Strings[i],PlayObject);
SendServerGroupMsg(SS_201,nServerIndex,PlayObject.m_sCharName);
m_NewHumanList.Add(PlayObject);
end;
end else begin//004B0BF9
KickOnlineUser(m_LoadPlayList.Strings[i]);
UserOpenInfo:=pTUserOpenInfo(m_LoadPlayList.Objects[i]);
m_ListOfGateIdx.Add(Pointer(UserOpenInfo.LoadUser.nGateIdx)); //004B0C39
m_ListOfSocket.Add(Pointer(UserOpenInfo.LoadUser.nSocket));
end;
Dispose(pTUserOpenInfo(m_LoadPlayList.Objects[I]));
end;//004B0C96
m_LoadPlayList.Clear;
for I:=0 to m_ChangeHumanDBGoldList.Count -1 do begin
GoldChangeInfo:=m_ChangeHumanDBGoldList.Items[I];
PlayObject:=GeTPlayObject(GoldChangeInfo.sGameMasterName);
if PlayObject <> nil then begin
PlayObject.GoldChange(GoldChangeInfo.sGetGoldUser,GoldChangeInfo.nGold);
end;
Dispose(GoldChangeInfo);
end;
m_ChangeHumanDBGoldList.Clear;
finally
LeaveCriticalSection(m_LoadPlaySection);
end;
//004B0D4A
for I:=0 to m_NewHumanList.Count -1 do begin
PlayObject:=TPlayObject(m_NewHumanList.Items[I]);
RunSocket.SetGateUserList(PlayObject.m_nGateIdx,PlayObject.m_nSocket,PlayObject);
end;
m_NewHumanList.Clear;
for i:=0 to m_ListOfGateIdx.Count -1 do begin
RunSocket.CloseUser(Integer(m_ListOfGateIdx.Items[i]),Integer(m_ListOfSocket.Items[i]));//GateIdx,nSocket
// MainOutMessage('xjs:close3 then RunSocket.CloseUser');
end;
m_ListOfGateIdx.Clear;
m_ListOfSocket.Clear;
except
on e: Exception do begin
MainOutMessage(format(sExceptionMsg1,[0]));
MainOutMessage(E.Message); raise;
end;
end;
end;//004B0E1E
try
for I := 0 to m_PlayObjectFreeList.Count - 1 do begin
PlayObject:=TPlayObject(m_PlayObjectFreeList.Items[i]);
if (GetTickCount - PlayObject.m_dwGhostTick) > g_Config.dwHumanFreeDelayTime {5 * 60 * 1000} then begin
try
TPlayObject(m_PlayObjectFreeList.Items[i]).Free;
except
MainOutMessage(sExceptionMsg2);
end;
m_PlayObjectFreeList.Delete(i);
break;
end else begin
if PlayObject.m_boSwitchData and (PlayObject.m_boRcdSaved) then begin
if SendSwitchData(PlayObject,PlayObject.m_nServerIndex) or (PlayObject.m_nWriteChgDataErrCount > 20) then begin
PlayObject.m_boSwitchData:=False;
PlayObject.m_boSwitchDataSended:=True;
PlayObject.m_dwChgDataWritedTick:=GetTickCount();
end else Inc(PlayObject.m_nWriteChgDataErrCount);
end;
if PlayObject.m_boSwitchDataSended and ((GetTickCount - PlayObject.m_dwChgDataWritedTick) > 100) then begin
PlayObject.m_boSwitchDataSended:=False;
SendChangeServer(PlayObject,PlayObject.m_nServerIndex);
end;
end;
end;
except
MainOutMessage(sExceptionMsg3);
end;//004B0F91
boCheckTimeLimit:=False;//004B0F91
try
dwCurTick:=GetTickCount();
nIdx:=m_nProcHumIDx;
while True do begin
if m_PlayObjectList.Count <= nIdx then break;
PlayObject:=TPlayObject(m_PlayObjectList.Objects[nIdx]);
if Integer(dwCurTick - PlayObject.m_dwRunTick) > PlayObject.m_nRunTime then begin
PlayObject.m_dwRunTick:=dwCurTick;
if (PlayObject.m_boDeath) or (PlayObject.m_boGhost) then begin
if not PlayObject.m_boDeathRcdSaved then begin
SaveHumanRcd(PlayObject);
PlayObject.m_boDeathRcdSaved:=true;
end;
end;
if not PlayObject.m_boGhost then begin
if not PlayObject.m_boLoginNoticeOK then begin
{$IF CATEXCEPTION = TRYEXCEPTION}
try
{$IFEND} // PlayObject.SendLogon ;
PlayObject.RunNotice();
{$IF CATEXCEPTION = TRYEXCEPTION}
except
MainOutMessage(sExceptionMsg4);
end;
{$IFEND}
end else begin//004B1058
try
if not PlayObject.m_boReadyRun then begin
PlayObject.m_boReadyRun:=True;//004B1075
if PlayObject.sYsnameMaster<>'' then begin //说明是元神
hum:=nil;
// hum:=UserEngine.GetPlayObjectEx(PlayObject.sYsnameMaster);
hum:=PlayObject.ysmasterplayer;
if hum<>nil then begin
{ PlayObject.m_PEnvir:= hum.m_PEnvir ;
hum.GetFrontPosition(nX,nY);
PlayObject.m_nCurrX:=nx;
PlayObject.m_nCurry:=ny;
PlayObject.m_bMaxBagitem:=40;
PlayObject.m_PEnvir.DeleteFromMap(mon.m_nCurrX,mon.m_nCurrY,OS_MOVINGOBJECT,mon);
mon.m_nCurrX:=nx;
mon.m_nCurrY:=ny;
mon.m_PEnvir:= playObject.m_PEnvir;
mon.SetTargetCreat(nil);
p28:=playObject.m_PEnvir.AddToMap(mon.m_nCurrX,mon.m_nCurrY,OS_MOVINGOBJECT,mon); // ,500
if p28<>nil then mon.SendRefMsg(RM_TURN,GetNextDirection(mon.m_nCurrX,mon.m_nCurrY,playObject.m_nCurrX,playObject.m_nCurrY) ,mon.m_nCurrX,mon.m_nCurrY,0,mon.GetShowName);
}
PlayObject.SendDefMessage(1809,0,0,0,0,'');
PlayObject.SendDefMessage(38292,integer(PlayObject),0,40,0,''); //背包的大小
PlayObject.SendDefMessage(38294,0,0,0,0,''); //任务列表
PlayObject.SendDefMessage(21292,
Integer(PlayObject),
8,//makeword(8,PlayObject.m_nfenghaolevel),
PlayObject.GetYSfenghao(PlayObject.M_YSfenghao), // 0 1 2 3 4
0,
''); // PlayObject.m_sfenghao
// PlayObject.SendDefMessage(38294,PlayObject.m_btGender,PlayObject.m_btGender,PlayObject.m_btGender,PlayObject.m_btGender,'');
PlayObject.nyuanqi:=0;
PlayObject.SendDefMessage(38417,0,0,100,0,'');
PlayObject.m_boStartshow :=true;
inc(hum.m_nYsCallcount);
end; //hum<>nil
end; // PlayObject.sYsnameMaster<>''
PlayObject.UserLogon; //BaseObject.0FFFEh;
end else begin
if (GetTickCount() - PlayObject.m_dwSearchTick) > PlayObject.m_dwSearchTime then begin
PlayObject.m_dwSearchTick:=GetTickCount();
PlayObject.SearchViewRange;
PlayObject.GameTimeChanged;
end;//004B10C4
///////////// 广告
if PlayObject.sYsnameMaster='' then begin
if (GetTickCount- PlayObject.m_dwShowBannerNoticeTime > g_Config.HideBannerNoticeTime) and (not PlayObject.m_boshowBanner) then begin
PlayObject.m_dwShowBannerNoticeTime:= GetTickCount();
// PlayObject.m_dwHideBannerNoticeTime:= GetTickCount();
if BannerNotice.Count > PlayObject.m_nShowBannerNoticeIdx then begin
LineNoticeMsg:=g_ManageNPC.GetLineVariableText(PlayObject,BannerNotice.Strings[PlayObject.m_nShowBannerNoticeIdx]);
PlayObject.SendDefMessage(100,0,38656,10,768,LineNoticeMsg); //广告 显示
PlayObject.m_boshowBanner:=true;
end;
Inc(PlayObject.m_nShowBannerNoticeIdx);
if (BannerNotice.Count <= PlayObject.m_nShowBannerNoticeIdx) then
PlayObject.m_nShowBannerNoticeIdx:=0;
end;
if (GetTickCount- PlayObject.m_dwShowBannerNoticeTime > g_Config.ShowBannerNoticeTime) and (PlayObject.m_boshowBanner) then begin
// PlayObject.m_dwHideBannerNoticeTime:= GetTickCount();
PlayObject.m_dwShowBannerNoticeTime:= GetTickCount();
PlayObject.SendDefMessage(100,0,38656,10,768,''); //广告 隐藏
PlayObject.m_boshowBanner:=false;
end;
end; // if PlayObject.sYsnameMaster='' then begin
///////////////
if (GetTickCount() - PlayObject.m_dwShowLineNoticeTick) > g_Config.dwShowLineNoticeTime then begin
PlayObject.m_dwShowLineNoticeTick:=GetTickCount();
if LineNoticeList.Count > PlayObject.m_nShowLineNoticeIdx then begin
LineNoticeMsg:=g_ManageNPC.GetLineVariableText(PlayObject,LineNoticeList.Strings[PlayObject.m_nShowLineNoticeIdx]);
//PlayObject.SysMsg(g_Config.sLineNoticePreFix + ' '+ LineNoticeList.Strings[PlayObject.m_nShowLineNoticeIdx],g_nLineNoticeColor);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -