From d5b67363261409849207d8516b29e34f4726300e Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期四, 25 十月 2018 14:47:12 +0800
Subject: [PATCH] 2215 脱机挂在线时间异常

---
 ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py |   81 ++++++++++++++++++++++++++++++++--------
 1 files changed, 64 insertions(+), 17 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
index d6c0c46..a92f212 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
@@ -63,8 +63,11 @@
 import IpyGameDataPY
 import PlayerTalk
 import PlayerGeTui
+import PlayerStore
 import GameWorldActionControl
 import GMT_CTG
+import PyGameData
+import GMShell
 #---------------------------------------------------------------------
 
 #---------------------------------------------------------------------
@@ -108,8 +111,8 @@
         #通知玩家登陆信息,来自运营方
         #DoLogic_LoginUserData(curPlayer)
     
-        #通知开服天数
-        PlayerEventCounter.Sync_OpenServerDay(curPlayer)
+        #通知开服天数, 登录时改为地图通知,因为GameServer的PlayerLogin在地图之后,前端有些功能处理需要提前得到开服天
+        #PlayerEventCounter.Sync_OpenServerDay(curPlayer)
         # 通知广播信息
         GMCommon.SendBroadCastToClient(curPlayer)
     
@@ -141,7 +144,8 @@
         PlayerXMZZ.OnXMZZOnLogin(curPlayer)
         #等级奖励
         PlayerLVAward.OnPlayerLogin(curPlayer)
-    
+        #商店购买次数
+        PlayerStore.OnPlayerLogin(curPlayer)
         #通知世界boss信息
         GameWorldBoss.OnPlayerLogin(curPlayer)
         #家族副本boss状态通知
@@ -154,7 +158,10 @@
         PlayerGeTui.CleanNewGuyCallBackGeTui(curPlayer.GetID())
         #活动
         GameWorldActionControl.OnPlayerLogin(curPlayer)
+        #玩家等级记录
+        PyGameData.g_todayPlayerLVDict[curPlayer.GetID()] = curPlayer.GetLV()
         
+        GMShell.OnPlayerLogin(curPlayer)
         GMT_CTG.OnPlayerLogin(curPlayer)
         
     #通知地图服务器自己初始化成功
@@ -265,19 +272,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
@@ -620,6 +614,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)
@@ -679,6 +677,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 
 
 ## 玩家切换真实地图
@@ -1114,5 +1114,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