From 4d48597d9f5f710edd989161d85bfdf0e3c7cb80 Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期一, 29 十月 2018 19:20:14 +0800
Subject: [PATCH] 4396 【后端】【1.2.0】仙界盛典新增广播提示
---
ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py | 112 +++++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 86 insertions(+), 26 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
index d6c0c46..ec1801a 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
@@ -63,8 +63,12 @@
import IpyGameDataPY
import PlayerTalk
import PlayerGeTui
+import PlayerStore
import GameWorldActionControl
import GMT_CTG
+import PyGameData
+import GMShell
+import IPY_PlayerDefine
#---------------------------------------------------------------------
#---------------------------------------------------------------------
@@ -74,7 +78,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 +95,8 @@
# @param tick 当前时间
# @return None
# @remarks 登陆顺序, PlayerLogin->PlayerLoadMapState(PlayerLoginLoadMapOK), 此处未设置初始化状态
-def __Func_PlayerLogin(index, tick):
+def __Func_PlayerLogin(curPlayer, tick):
- #玩家登录初始化
- curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
#玩家在线时间初始化
InitPlayerOnLineTime(curPlayer, tick)
#玩家响应信息初始化
@@ -108,8 +118,8 @@
#通知玩家登陆信息,来自运营方
#DoLogic_LoginUserData(curPlayer)
- #通知开服天数
- PlayerEventCounter.Sync_OpenServerDay(curPlayer)
+ #通知开服天数, 登录时改为地图通知,因为GameServer的PlayerLogin在地图之后,前端有些功能处理需要提前得到开服天
+ #PlayerEventCounter.Sync_OpenServerDay(curPlayer)
# 通知广播信息
GMCommon.SendBroadCastToClient(curPlayer)
@@ -141,7 +151,8 @@
PlayerXMZZ.OnXMZZOnLogin(curPlayer)
#等级奖励
PlayerLVAward.OnPlayerLogin(curPlayer)
-
+ #商店购买次数
+ PlayerStore.OnPlayerLogin(curPlayer)
#通知世界boss信息
GameWorldBoss.OnPlayerLogin(curPlayer)
#家族副本boss状态通知
@@ -154,7 +165,10 @@
PlayerGeTui.CleanNewGuyCallBackGeTui(curPlayer.GetID())
#活动
GameWorldActionControl.OnPlayerLogin(curPlayer)
+ #玩家等级记录
+ PyGameData.g_todayPlayerLVDict[curPlayer.GetID()] = curPlayer.GetLV()
+ GMShell.OnPlayerLogin(curPlayer)
GMT_CTG.OnPlayerLogin(curPlayer)
#通知地图服务器自己初始化成功
@@ -265,19 +279,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 +490,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,8 +507,7 @@
# @param tick 当前时间
# @return None
# @remarks 函数详细说明.
-def __Func_PlayerDisconnect(index, tick):
- curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+def __Func_PlayerDisconnect(curPlayer, tick):
#跨服匹配PK
#GameWorldMergePK.OnLeaveServer(curPlayer)
@@ -516,8 +525,6 @@
#MergePlayer.OnPlayerLeaveGotoMergeServer(curPlayer, tick)
#------------镖车逻辑
#TruckPlayerDisconnectProcess(curPlayer, tick)
- #调用底层下线
- curPlayer.DoDisconnect()
return
## 设置玩家离线时间
@@ -620,6 +627,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 +690,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 +1127,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