From f98a3ff88d6ac63e1971e77051324c39422e84b5 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 05 七月 2021 18:32:36 +0800
Subject: [PATCH] 9043 【主干】【BT2】【BT3】增加玩家地图登录成功后的逻辑处理;优化仙盟boss活动状态通知时机;
---
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py | 7 +++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 75 ++++++++++++++++++++++++++++++++++---
ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py | 17 +++++++-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameServerRefresh.py | 1
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 1
5 files changed, 93 insertions(+), 8 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
index ac304ce..02d43f0 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
@@ -169,8 +169,6 @@
PlayerStore.OnPlayerLogin(curPlayer)
#通知世界boss信息
GameWorldBoss.OnPlayerLogin(curPlayer)
- #家族副本boss状态通知
- PlayerFamilyBoss.OnLogin(curPlayer)
#渡劫
PlayerDuJie.OnPlayerLogin(curPlayer)
#守卫人皇
@@ -202,6 +200,21 @@
return
+def DoPlayerRealLoginOK(curPlayer, tick):
+ ''' 玩家最终登录成功处理, 由 MapServer DoPlayerRealLoginOK 通知
+ 该函数为地图最终登录成功才会执行到,以后一些功能类的登录处理建议均写到这里
+ 旧的功能先不动( __DoPlayerLoginServer 函数中的功能),如果有登录相关的bug再考虑是否移动到此函数
+ '''
+
+ GameWorld.Log("GameServer->DoPlayerRealLoginOK", curPlayer.GetPlayerID())
+
+ if not PlayerControl.GetIsTJG(curPlayer):
+ #家族副本boss状态通知
+ PlayerFamilyBoss.OnLogin(curPlayer)
+
+
+ return
+
def __UpdOnedayJobPlayerLoginoffTime(curPlayer):
## 更新一天内职业对应玩家登录、离线时间
job = curPlayer.GetJob()
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py
index e684816..6aac47a 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py
@@ -498,6 +498,13 @@
callName = pack.GetCallName()
resultName = pack.GetResultName() #[queryid, 人气值, 物品ID]
+ if callName == "PlayerRealLoginOK":
+ curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
+ if not curPlayer:
+ return
+ ChPlayer.DoPlayerRealLoginOK(curPlayer, tick)
+ return
+
if callName == "SendMail":
title, content, getDays, playerIDList, addItemList, gold, goldPaper, silver, detail, moneySource = eval(resultName)
limitTime = str(GameWorld.GetDatetimeByDiffDays(getDays))
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 990d379..d00779e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3379,6 +3379,7 @@
Def_Player_Dict_PlayerFromPID = "PlayerFromPID" # pid
Def_Player_Dict_Account_Type = "account_type" # account_type
Def_Player_Dict_FirstLogin = "FirstLogin" # 首登标记 0-未首登; 1-首登过
+Def_Player_Dict_RealLoginOK = "RealLoginOK" # 真正登录成功标记
Def_GuideStateKeyCount = 8 # 引导状态key最大个数
Def_Player_Dict_GuideState = "GuideState_%s" # 引导状态记录,参数为key个数编号
Def_Player_Dict_VersionFix = "VersionFix_%s" # 版本修正标记,参数为key个数编号, 支持n个版本修正标记,每个key支持31个
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
index 3aa90f2..2eee068 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -388,6 +388,55 @@
return
#---------------------------------------------------------------------
+'''
+登录流程
+MapServer
+ ChPlayer:def PlayerLogin(index, tick)
+ DoPlayerLogin
+ curPlayer.Sync_ClientPlayerLogin()
+ curPlayer.Sync_GameServer_MapID() #同步GameServer自己的地图ID
+ curPlayer.BalanceServer_PlayerLoginInitOK()
+
+GameServer
+ ChPlayer:def PlayerLoadMapState(index, tick) pack.GetLoadState()=0 此时的 LoadState 为0
+ curPlayer.SetIsLoadMap(True) 设置在加载地图
+
+ ChPlayer:def PlayerLogin(index, tick)
+ curPlayer.MapServer_InitOK() 通知地图自己OK了
+
+MapServer
+ PlayerEventCounter:def GameServer_InitOK(index, tick)
+ curPlayer.SendToBServerServerInitOK() #通知BServer自己OK了
+ ChPlayer:def OnAllServerInitOK(curPlayer, tick)
+
+ ChPlayer:def LoadMapOK(curPlayer, tick)
+ curPlayer.GameServer_SetLoadMapState(1) #通知GameServer切换地图停止
+ curPlayer.SetMapLoadOK(True)
+ curPlayer.SetInitOK(True)
+ curPlayer.EndLoadMap()
+
+GameServer
+ ChPlayer:def PlayerLoadMapState(index, tick) pack.GetLoadState()=1 此时的 LoadState 为1
+ PlayerLoginLoadMapOK
+ curPlayer.SetInitOK(True)
+ curPlayer.MapServer_GameServerRefreshOK() #通知地图服务器玩家初始化成功
+ curPlayer.SetIsLoadMap(False)
+
+MapServer
+ GameServerRefresh:GameSever_PlayerInitOK curPlayer.GetGameServerInitOK()=0
+ curPlayer.SetGameServerInitOK(True)
+
+后续补充流程
+MapServer
+ ChPlayer:def DoPlayerRealLoginOK(curPlayer, tick)
+ 玩家真正登录成功处理,用于替换 __DoPlayerLoginServer 中的功能登录逻辑
+ 通知GameServer地图最终登录成功了
+
+GameServer
+ ChPlayer:def DoPlayerRealLoginOK(curPlayer, tick)
+ 玩家真正登录成功处理,用于替换 __DoPlayerLoginServer 中的功能登录逻辑
+'''
+
##玩家登陆游戏逻辑处理
#@param curPlayer 玩家实例
#@param tick 时间戳
@@ -396,6 +445,8 @@
def DoPlayerLogin(curPlayer, tick):
#这里只做初始化逻辑
curPlayer.SetDict(ChConfig.Def_PlayerKey_LoadMapIsLogin, 1)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_RealLoginOK, 0) # 每次登录重置
+
#通知时间
Sync_PyServerDataTimeToClient(curPlayer)
Sync_OpenServerDay(curPlayer)
@@ -418,6 +469,8 @@
curPlayer.SetForbiddenSyncClientState(False)
PlayerControl.SetCrossMapID(curPlayer, curPlayer.GetMapID()) # 因为主服上传数据之前该值为0,所以登录跨服后在跨服服务器要设置为对应地图
+ #通知运行成功
+ curPlayer.BalanceServer_PlayerLoginInitOK()
return
def __DoPlayerLoginServer(curPlayer, tick):
@@ -445,9 +498,6 @@
PlayerFamily.FamilyPlayerOnLoginCross(curPlayer)
PlayerTeam.OnPlayerLoginCrossServer(curPlayer)
-
- #通知运行成功
- curPlayer.BalanceServer_PlayerLoginInitOK()
return
leaveServerSecond = PlayerControl.GetPlayerLeaveServerSecond(curPlayer)
@@ -588,9 +638,6 @@
#角色改名次数
UpdatePlayerName.Sync_UpdatePlayerNameCount(curPlayer)
-
- #通知运行成功
- curPlayer.BalanceServer_PlayerLoginInitOK()
# 坐骑相关通知
PlayerHorse.PlayerHorseLogin(curPlayer)
@@ -791,6 +838,22 @@
return
+def DoPlayerRealLoginOK(curPlayer, tick):
+ ''' 玩家最终登录成功处理, 由 GameServerRefresh GameSever_PlayerInitOK 调用
+ 该函数为地图最终登录成功才会执行到,以后一些功能类的登录处理建议均写到这里
+ 旧的功能先不动( __DoPlayerLoginServer 函数中的功能),如果有登录相关的bug再考虑是否移动到此函数
+ '''
+
+ if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_RealLoginOK):
+ #切地图的不处理,切地图的也会触发该函数
+ return
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_RealLoginOK, 1)
+ GameWorld.Log("MapServer->DoPlayerRealLoginOK", curPlayer.GetPlayerID())
+
+ # 通知GameServer地图最终登录成功了
+ msg = ""
+ GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "PlayerRealLoginOK", msg, len(msg))
+ return
## 玩家扩展信息同步
# @param curPlayer
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameServerRefresh.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameServerRefresh.py
index 4ac6ffe..00976bb 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameServerRefresh.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameServerRefresh.py
@@ -448,6 +448,7 @@
#PlayerDienstgrad.RefreshBillBoardDienstgrad(curPlayer)
GameWorld.Log('GameSever_PlayerInitOK' , curPlayer.GetID())
+ ChPlayer.DoPlayerRealLoginOK(curPlayer, tick)
return
#---------------------------------------------------------------------
## 保存OnHour
--
Gitblit v1.8.0