From 2014b1be37a38d75d8b5f97311f9a0b07e27cfd1 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期六, 11 一月 2020 16:31:29 +0800 Subject: [PATCH] 8346 【恺英】【后端】协助系统(增加同步推出协助原因包B008) --- ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py | 71 ++++++++++++++++++++++++++++++++--- 1 files changed, 64 insertions(+), 7 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py index 578cae2..2e6964a 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py @@ -44,7 +44,7 @@ #import PlayerFamilyStore import PlayerSocial import PlayerFamilyParty -import PlayerSealDemon +#import PlayerSealDemon import PlayerBillboard import PlayerLVAward import PlayerDuJie @@ -54,6 +54,7 @@ import PlayerGeTui import PlayerStore import GameWorldActionControl +import GameWorldFamilyWar import PlayerFBHelpBattle import GMT_CTG import PyGameData @@ -61,6 +62,7 @@ import IPY_PlayerDefine import CrossRealmPK import AuctionHouse +import PlayerAssist import PlayerFB #--------------------------------------------------------------------- @@ -127,6 +129,7 @@ #玩家队伍初始化 PlayerTeam.OnPlayerLoginRefreshTeam(curPlayer, tick) PlayerCompensation.NotifyPlayerCompensation(curPlayer) + __UpdOnedayJobPlayerLoginoffTime(curPlayer) if not PlayerControl.GetIsTJG(curPlayer): # 只有通知逻辑的应该放此处减少IO,如有逻辑处理存储等不可放在此处 @@ -157,7 +160,7 @@ #仙盟宴会 PlayerFamilyParty.OnPlayerLogin(curPlayer) #封魔坛 - PlayerSealDemon.OnPlayerLogin(curPlayer) + #PlayerSealDemon.OnPlayerLogin(curPlayer) #仙魔之争 PlayerXMZZ.OnXMZZOnLogin(curPlayer) #等级奖励 @@ -173,20 +176,56 @@ #守卫人皇 PlayerFamilySWRH.OnLogin(curPlayer) PlayerTalk.LoginChatMi(curPlayer) + PlayerTalk.NotifyTalkCache(curPlayer) PlayerGeTui.CleanNewGuyCallBackGeTui(curPlayer.GetID()) #活动 GameWorldActionControl.OnPlayerLogin(curPlayer) #玩家等级记录 PyGameData.g_todayPlayerLVDict[curPlayer.GetID()] = curPlayer.GetLV() - #副本助战 - PlayerFBHelpBattle.OnHelpPlayerLogin(curPlayer) #跨服PK CrossRealmPK.OnPlayerLogin(curPlayer) #诛仙BOSS PlayerZhuXianBoss.OnPlayerLogin(curPlayer) #骑宠boss状态通知 PlayerHorsePetBoss.OnLogin(curPlayer) + #协助 + PlayerAssist.OnPlayerLogin(curPlayer, False) GMT_CTG.OnPlayerLogin(curPlayer) + + else: + #协助 + PlayerAssist.OnPlayerLogin(curPlayer, True) + + return + +def __UpdOnedayJobPlayerLoginoffTime(curPlayer): + ## 更新一天内职业对应玩家登录、离线时间 + job = curPlayer.GetJob() + playerID = curPlayer.GetPlayerID() + if job not in PyGameData.g_onedayJobPlayerLoginoffTimeDict: + PyGameData.g_onedayJobPlayerLoginoffTimeDict[job] = {} + playerLoginoffTimeDict = PyGameData.g_onedayJobPlayerLoginoffTimeDict[job] + playerLoginoffTimeDict[playerID] = int(time.time()) + #GameWorld.DebugLog("更新职业对应玩家登录离线时间: %s" % PyGameData.g_onedayJobPlayerLoginoffTimeDict) + return + +def CheckOnedayJobPlayerLoginoffTimeout(): + ## 检查一天内职业对应玩家登录、离线时间超时玩家,每小时检查一次 + + maxTime = 24 * 3600 # 暂定24小时 + curTime = int(time.time()) + #GameWorld.DebugLog("处理24小时内在线的角色职业玩家: curTime=%s,maxTime=%s, %s" % (curTime, maxTime, PyGameData.g_onedayJobPlayerLoginoffTimeDict)) + + playerManager = GameWorld.GetPlayerManager() + for playerDict in PyGameData.g_onedayJobPlayerLoginoffTimeDict.values(): + for playerID, loginoffTime in playerDict.items(): + if playerManager.FindPlayerByID(playerID): + #GameWorld.DebugLog(" 在线不处理, playerID=%s" % playerID) + continue + if curTime - loginoffTime > maxTime: + playerDict.pop(playerID) + #GameWorld.DebugLog(" 超时玩家,移除! playerID=%s,loginoffTime=%s" % (playerID, loginoffTime)) + #GameWorld.DebugLog(" 处理完毕,剩余玩家! %s" % PyGameData.g_onedayJobPlayerLoginoffTimeDict) return ## 增加高手玩家上线广播 @@ -503,13 +542,21 @@ PlayerFamily.PlayerLogoffRefreshFamily(curPlayer, tick) PlayerFriend.OnPlayerDisconnect(curPlayer, tick) + __UpdOnedayJobPlayerLoginoffTime(curPlayer) PlayerGeTui.NewGuyCallBackGeTui(curPlayer, tick) # 设置家族成员离线时间 SetPlayerOfflineTime(curPlayer) #拍卖行 AuctionHouse.OnPlayerLeaveServer(curPlayer) + #协助 + PlayerAssist.OnLeaveServer(curPlayer) #------------镖车逻辑 #TruckPlayerDisconnectProcess(curPlayer, tick) + + if not PlayerControl.GetIsTJG(curPlayer): + playerID = curPlayer.GetPlayerID() + PyGameData.g_unTJLogoffTime[playerID] = int(time.time()) + return ## 设置玩家离线时间 @@ -579,6 +626,10 @@ PlayerControl.SetGMForbidenTalk(curPlayer, packValue) return + if packType == ShareDefine.CDBPlayerRefresh_ExAttr17: + PlayerControl.SetPlayerAccState(curPlayer, packValue) + return + if packType == IPY_GameServer.CDBPlayerRefresh_State: # 脱机在线 PlayerControl.SetIsTJG(curPlayer, packValue) @@ -600,6 +651,14 @@ if packType == IPY_GameServer.CDBPlayerRefresh_ExAttr2: #队伍相关相关审核开关状态 PlayerTeam.SetTeamCheckState(curPlayer, packValue) + return + + #if packType == IPY_GameServer.CDBPlayerRefresh_ExAttr1: + # PlayerControl.SetAssistTagPlayerID(curPlayer, packValue) + # return + + if packType == IPY_GameServer.CDBPlayerRefresh_ExAttr3: + PlayerControl.SetFBFuncLineID(curPlayer, packValue) return #---常规逻辑处理--- @@ -645,9 +704,6 @@ 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_ExAttr13: PlayerControl.SetPlayerServerGroupID(curPlayer, packValue) @@ -684,6 +740,7 @@ GameWorldBoss.OnPlayerChangeMap(curPlayer) PlayerFamily.OnPlayerChangeMap(curPlayer, tick) PlayerFamilyParty.OnPlayerChangeMap(curPlayer, tick) + GameWorldFamilyWar.OnPlayerChangeMap(curPlayer) return ## 玩家切换真实地图 -- Gitblit v1.8.0