From 2af64e0aa0a6d8c4aea5fed79986adfa364a1ace Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 25 十二月 2018 19:38:10 +0800
Subject: [PATCH] 5424 【后端】【1.4】跨服竞技场开发(Add: C1 03 跨服PK玩家历史赛季信息 #tagMCCrossRealmPKPlayerHisSeasonInfo)

---
 ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py |  139 ++++++++++++++++++++++++++++++++++-----------
 1 files changed, 104 insertions(+), 35 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
index d6c0c46..148aff8 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
@@ -41,7 +41,6 @@
 import PlayerBourse
 import GameWorldActionTeHui
 import PlayerXMZZ
-import GameWorldMergePK
 import GameWorldShopItem
 import MergeChildMsg
 import PlayerTruck
@@ -63,8 +62,14 @@
 import IpyGameDataPY
 import PlayerTalk
 import PlayerGeTui
+import PlayerStore
 import GameWorldActionControl
+import PlayerFBHelpBattle
 import GMT_CTG
+import PyGameData
+import GMShell
+import IPY_PlayerDefine
+import CrossRealmPK
 #---------------------------------------------------------------------
 
 #---------------------------------------------------------------------
@@ -74,7 +79,15 @@
 #  @return None
 #  @remarks 登陆顺序, PlayerLogin->PlayerLoadMapState(PlayerLoginLoadMapOK), 此处未设置初始化状态
 def PlayerLogin(index, tick):
-    GameWorld.GetPsycoFunc(__Func_PlayerLogin)(index, tick)
+    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+    try:
+        __Func_PlayerLogin(curPlayer, tick)
+    except:
+        curPlayer.Kick(IPY_PlayerDefine.disWaitForPlayerLoinError)
+        import traceback
+        GameWorld.ErrLog("玩家上线逻辑错误~~~~~\r\n%s" % traceback.format_exc())
+        if GameWorld.GetGameWorld().GetDebugLevel():
+            raise Exception("玩家上线逻辑错误~~~~\r\n%s" % traceback.format_exc())
     return
 
 #---------------------------------------------------------------------
@@ -83,10 +96,10 @@
 #  @param tick 当前时间
 #  @return None
 #  @remarks 登陆顺序, PlayerLogin->PlayerLoadMapState(PlayerLoginLoadMapOK), 此处未设置初始化状态
-def __Func_PlayerLogin(index, tick):
+def __Func_PlayerLogin(curPlayer, tick):
     
-    #玩家登录初始化
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+    GameWorld.Log("__Func_PlayerLogin mapID=%s" % curPlayer.GetMapID(), curPlayer.GetPlayerID())
+    curPlayer.SetDict(ChConfig.Def_PDict_LoginMapID, curPlayer.GetMapID())
     #玩家在线时间初始化
     InitPlayerOnLineTime(curPlayer, tick)
     #玩家响应信息初始化
@@ -108,8 +121,8 @@
         #通知玩家登陆信息,来自运营方
         #DoLogic_LoginUserData(curPlayer)
     
-        #通知开服天数
-        PlayerEventCounter.Sync_OpenServerDay(curPlayer)
+        #通知开服天数, 登录时改为地图通知,因为GameServer的PlayerLogin在地图之后,前端有些功能处理需要提前得到开服天
+        #PlayerEventCounter.Sync_OpenServerDay(curPlayer)
         # 通知广播信息
         GMCommon.SendBroadCastToClient(curPlayer)
     
@@ -141,7 +154,8 @@
         PlayerXMZZ.OnXMZZOnLogin(curPlayer)
         #等级奖励
         PlayerLVAward.OnPlayerLogin(curPlayer)
-    
+        #商店购买次数
+        PlayerStore.OnPlayerLogin(curPlayer)
         #通知世界boss信息
         GameWorldBoss.OnPlayerLogin(curPlayer)
         #家族副本boss状态通知
@@ -154,7 +168,14 @@
         PlayerGeTui.CleanNewGuyCallBackGeTui(curPlayer.GetID())
         #活动
         GameWorldActionControl.OnPlayerLogin(curPlayer)
+        #玩家等级记录
+        PyGameData.g_todayPlayerLVDict[curPlayer.GetID()] = curPlayer.GetLV()
+        #副本助战
+        PlayerFBHelpBattle.OnHelpPlayerLogin(curPlayer)
+        #跨服PK
+        CrossRealmPK.OnPlayerLogin(curPlayer)
         
+        GMShell.OnPlayerLogin(curPlayer)
         GMT_CTG.OnPlayerLogin(curPlayer)
         
     #通知地图服务器自己初始化成功
@@ -265,19 +286,6 @@
 def MSGetReward(curPlayer):
     #PlayerCanGetReward.SynClient_CanGetRewardList(curPlayer)
     return
-
-
-## 通知首次开服时间
-#  @param curPlayer: 玩家实例
-#  @return: None
-def Sync_InitOpenServerTime(curPlayer):
-#    initOpenServerTime = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_InitOpenServerTime)
-#    packData = ChPyNetSendPack.tagInitOpenServerTime()
-#    packData.Clear()
-#    packData.Time = initOpenServerTime
-#    NetPackCommon.SendFakePack(curPlayer, packData)
-    return
-    
 
 ## 运营登陆信息处理
 #  @param curPlayer
@@ -489,7 +497,16 @@
 #  @return None
 #  @remarks 函数详细说明.
 def PlayerDisconnect(index, tick):
-    GameWorld.GetPsycoFunc(__Func_PlayerDisconnect)(index, tick)
+    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+    try:
+        __Func_PlayerDisconnect(curPlayer, tick)
+    except:
+        import traceback
+        GameWorld.ErrLog("玩家下线逻辑错误~~~~~\r\n%s" % traceback.format_exc())
+        if GameWorld.GetGameWorld().GetDebugLevel():
+            raise Exception("玩家下线逻辑错误~~~~\r\n%s" % traceback.format_exc())
+    #调用底层下线
+    curPlayer.DoDisconnect()
     return
 
 ## 玩家下线(封包参数)
@@ -497,11 +514,10 @@
 #  @param tick 当前时间
 #  @return None
 #  @remarks 函数详细说明.
-def __Func_PlayerDisconnect(index, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+def __Func_PlayerDisconnect(curPlayer, tick):
     
     #跨服匹配PK
-    #GameWorldMergePK.OnLeaveServer(curPlayer)
+    CrossRealmPK.OnLeaveServer(curPlayer)
     
     #组队玩家离线
     PlayerTeam.DoPlayerLogOffTeamLogic(curPlayer, tick)
@@ -516,8 +532,6 @@
     #MergePlayer.OnPlayerLeaveGotoMergeServer(curPlayer, tick)
     #------------镖车逻辑
     #TruckPlayerDisconnectProcess(curPlayer, tick)
-    #调用底层下线
-    curPlayer.DoDisconnect()
     return
 
 ## 设置玩家离线时间
@@ -605,11 +619,6 @@
         curPlayer.SetFightPower(packValue)
         return
 
-    if packType == IPY_GameServer.CDBPlayerRefresh_ExAttr10:
-        #设置玩家跨服预赛排位
-        PlayerControl.SetMergeWarRank(curPlayer, packValue)
-        return
-
     if packType == IPY_GameServer.CDBPlayerRefresh_ExAttr2:
         #队伍相关相关审核开关状态
         PlayerTeam.SetTeamCheckState(curPlayer, packValue)
@@ -620,6 +629,10 @@
     elif packType == IPY_GameServer.CDBPlayerRefresh_LV:
         curPlayer.SetLV(packValue)
         PlayerSocial.UpdateSocialInfo(curPlayer, packType, packValue)
+        #玩家等级记录
+        playerID = curPlayer.GetID()
+        if playerID in PyGameData.g_todayPlayerLVDict:
+            PyGameData.g_todayPlayerLVDict[playerID] = packValue
 
     elif packType == IPY_GameServer.CDBPlayerRefresh_Job:
         curPlayer.SetJob(packValue)
@@ -649,6 +662,12 @@
     elif packType == IPY_GameServer.CDBPlayerRefresh_ExAttr9:
         PlayerControl.SetVIPExpireTime(curPlayer, packValue)
         
+    elif packType == IPY_GameServer.CDBPlayerRefresh_ExAttr10:
+        PlayerControl.SetChatBubbleBox(curPlayer, packValue)
+        
+    elif packType == IPY_GameServer.CDBPlayerRefresh_ExAttr11:
+        PlayerControl.SetTodayXianyuanCoin(curPlayer, packValue)
+
     elif packType == IPY_GameServer.CDBPlayerRefresh_OperateInfo:
         curPlayer.SetOperateInfo(packValue);
     
@@ -662,7 +681,8 @@
     PlayerTeam.PlayerTeamMemberRefresh(curPlayer, packType, packValue, tick)
     #家族刷新
     PlayerFamily.PlayerRefresh(curPlayer, tick)
-
+    #副本助战
+    PlayerFBHelpBattle.UpdateCheckInPlayerInfoByRefresh(curPlayer, packType, packValue)
     return
 
 ## 玩家切换地图的响应(参数 -> 当前玩家,当前时间)
@@ -679,6 +699,8 @@
     GameWorld.Log("玩家 : %s,%s,FBID=%s 切换地图" % (curPlayer.GetName(), curPlayer.GetRealMapID(), curPlayer.GetFBID()) , curPlayer.GetPlayerID())
     PlayerTeam.OnPlayerChangeMap(curPlayer, tick)
     GameWorldBoss.OnPlayerChangeMap(curPlayer)
+    PlayerFamily.OnPlayerChangeMap(curPlayer, tick)
+    PlayerFamilyParty.OnPlayerChangeMap(curPlayer, tick)
     return 
 
 ## 玩家切换真实地图
@@ -756,7 +778,7 @@
     #改到mapServer登录成功通知
     #Sync_PyServerDataTimeToClient(curPlayer, tick)
     
-    #PlayerTeam.OnPlayerReadMapOK(curPlayer, tick)
+    PlayerTeam.OnPlayerReadMapOK(curPlayer, tick)
     
     #刷新人物日期状态
     PlayerEventCounter.UpdatePlayerLoginTime(curPlayer)
@@ -1114,5 +1136,52 @@
     NetPackCommon.SendFakePack(curPlayer, serverDateTime)
     return
 
+def UpdataPlayerLVInfo():
+    #Onday更新玩家等级信息
+    PyGameData.g_yesterdayPlayerLVDict = PyGameData.g_todayPlayerLVDict
+    PyGameData.g_todayPlayerLVDict = {}
+    playerManager = GameWorld.GetPlayerManager()
+    for i in xrange(playerManager.GetActivePlayerCount()):
+        curPlayer = playerManager.GetActivePlayerAt(i)
+        if curPlayer == None or not curPlayer.GetInitOK():
+            continue
+        if PlayerControl.GetIsTJG(curPlayer):
+            continue
+        PyGameData.g_todayPlayerLVDict[curPlayer.GetID()] = curPlayer.GetLV()
+    return
+
+def LoadPlayerLVData():
+    #服务器开启时加载活跃玩家等级信息
+    universalRecMgr = GameWorld.GetUniversalRecMgr()
+
+    recDataList = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_TodayPlayerLVInfo)
+    allCnt = recDataList.Count()
+    for index in xrange(allCnt):
+        recData = recDataList.At(index)
+        PyGameData.g_todayPlayerLVDict[recData.GetValue1()] = recData.GetValue2()
     
-    
\ No newline at end of file
+    recDataList = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_YesterdayPlayerLVInfo)
+    allCnt = recDataList.Count()
+    for index in xrange(allCnt):
+        recData = recDataList.At(index)
+        PyGameData.g_yesterdayPlayerLVDict[recData.GetValue1()] = recData.GetValue2()
+    GameWorld.DebugLog('    服务器开启时加载活跃玩家等级信息g_todayPlayerLVDict=%s, g_yesterdayPlayerLVDict=%s'%(PyGameData.g_todayPlayerLVDict,PyGameData.g_yesterdayPlayerLVDict))
+    return
+
+def SavePlayerLVData():
+    #服务器关闭前时保存活跃玩家等级信息
+    GameWorld.GetUniversalRecMgr().Delete(ShareDefine.Def_UniversalGameRecType_TodayPlayerLVInfo)
+    GameWorld.GetUniversalRecMgr().Delete(ShareDefine.Def_UniversalGameRecType_YesterdayPlayerLVInfo)
+    universalRecMgr = GameWorld.GetUniversalRecMgr()
+    recDataList = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_TodayPlayerLVInfo)
+    for playerID, lv in PyGameData.g_todayPlayerLVDict.items():
+        recData = recDataList.AddRec()
+        recData.SetValue1(playerID)
+        recData.SetValue2(lv)
+    
+    recDataList = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_YesterdayPlayerLVInfo)
+    for playerID, lv in PyGameData.g_yesterdayPlayerLVDict.items():
+        recData = recDataList.AddRec()
+        recData.SetValue1(playerID)
+        recData.SetValue2(lv)
+    return
\ No newline at end of file

--
Gitblit v1.8.0