From de17a057f7a93fe8c9ccb04dd44023b4c8ed1161 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 26 五月 2025 18:35:49 +0800
Subject: [PATCH] 16 卡牌服务端(仙盟珍宝阁支持;仙盟行为数据查询通知;去除特殊时间5点过天、过周、过月逻辑,统一保留0点触发;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py |  127 +++++++++++++++++-------------------------
 1 files changed, 52 insertions(+), 75 deletions(-)

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 abc747b..706101a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -100,7 +100,6 @@
 import PassiveBuffEffMng
 import PlayerDiceEx
 import QuestCommon
-import PlayerTJG
 import GameLogic_XMZZ
 import PlayerFlashSale
 import PlayerFlashGiftbag
@@ -145,7 +144,6 @@
 import PlayerArena
 import PyGameData
 import PlayerCoin
-import PlayerGeTui
 import PlayerCharm
 import PlayerDogz
 import PlayerCoat
@@ -174,11 +172,17 @@
 import PlayerActTask
 import PlayerMail
 import DBDataMgr
+import GameServerRefresh
+import IPY_ServerDefine
+import CommFunc
+from PyMongoDB import RecvPackToMapDB
+import PlayerTalk
 
 import datetime
 import time
 import math
 import re
+import base64
 #---------------------------------------------------------------------
 
 #---------------------------------------------------------------------
@@ -203,10 +207,6 @@
     #初始化玩家的时钟个数
     if curPlayer.GetTickTypeCount() == 0:
         curPlayer.SetTickTypeCount(ChConfig.TYPE_Player_Tick_Count)
-    
-    #初始化玩家聊天频道
-    if curPlayer.GetMaxChannelCount() == 0:
-        curPlayer.SetMaxChannelCount(ChConfig.Def_PlayerTalkChannelMaxCount)
         
 #===============================================================================
 #    #初始化玩家鉴定管理器物品最大个数
@@ -483,51 +483,28 @@
 #---------------------------------------------------------------------
 '''
 登录流程
+UserCrtlDB
+    onAuthentication  玩家登录 :验证账号-若没有角色则创角-返回角色信息-通知Map C++
+    Map C++调用 PlayerLogin
 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)
+        DoPlayerLogin
+            curPlayer.Sync_ClientPlayerLogin()  #01 02 玩家初始化#tagCDBPlayer
+            curPlayer.BalanceServer_PlayerLoginInitOK() #向route设置玩家在map中的索引
+            
+            curPlayer.SendToBServerServerInitOK()   #通知route登录成功 ,route向客户端发送//01 09 服务器准备就绪#tagServerPrepareOK
+            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
+            ChPlayer:def __Func_LoadMapOK(curPlayer, tick)  #!!!直接调用不等待客户端封包 //01 07 地图读取OK#tagCInitMapOK
+            curPlayer.SetMapLoadOK(True)
             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  中的功能登录逻辑
+            curPlayer.EndLoadMap()  #通知客户端 04 03 玩家登录数据发送完毕OK#tagPlayerLoginLoadOK
+
+            GameServerRefresh:GameSever_PlayerInitOK
+            curPlayer.SetGameServerInitOK(True)
+
+            ChPlayer:def DoPlayerRealLoginOK(curPlayer, tick) 玩家真正登录成功处理,用于替换  __DoPlayerLoginServer  中的功能登录逻辑
+
 '''
 
 ##玩家登陆游戏逻辑处理
@@ -544,10 +521,7 @@
     Sync_PyServerDataTimeToClient(curPlayer)
     Sync_OpenServerDay(curPlayer)
     #通知玩家基本信息
-    curPlayer.Sync_ClientPlayerLogin()
-    
-    #同步GameServer自己的地图ID
-    curPlayer.Sync_GameServer_MapID()
+    curPlayer.Sync_ClientPlayerLogin()  #01 02 玩家初始化#tagCDBPlayer
     
     # 屏蔽跨服下关闭和子服重复的数据的发送 pushsend接口, notifyall正常发送
     # !!!必要发送的数据要注意位置
@@ -563,7 +537,7 @@
         PlayerControl.SetCrossMapID(curPlayer, curPlayer.GetMapID()) # 因为主服上传数据之前该值为0,所以登录跨服后在跨服服务器要设置为对应地图
         
     #通知运行成功
-    curPlayer.BalanceServer_PlayerLoginInitOK()
+    curPlayer.BalanceServer_PlayerLoginInitOK() #向route设置玩家在map中的索引
     return
 
 def __DoPlayerLoginServer(curPlayer, tick):
@@ -663,9 +637,6 @@
     
     #大师
     PlayerGreatMaster.MasterOnLogin(curPlayer)
-    
-    # 推送提醒
-    PlayerGeTui.LoginNotifySetting(curPlayer)
     
     #通知VIP
     PlayerVip.DoOnLogin(curPlayer, tick)
@@ -866,8 +837,6 @@
     PlayerEquipDecompose.PlayerLogin(curPlayer)
     #防沉迷
     PlayerGameWallow.DoLogic_CheckWallow(curPlayer, tick)
-    # 通知脱机挂信息
-    #PlayerTJG.NotifyTJGInfo(curPlayer)
     # 协助
     PlayerAssist.OnPlayerLogin(curPlayer)
     # 极品白拿
@@ -985,10 +954,7 @@
         
     curPlayer.SetState(0)   # 脱机挂恢复为正常上线
     curPlayer.SetCountryLastWeekHornor(0) # 通知数据库是否保存还是下线,做一次恢复,1为保存 0为正常下线
-    #tjgTime = PlayerTJG.GetTJGTime(curPlayer)
-    #if tjgTime:
-    #    PlayerControl.SendGameServerRefreshState(curPlayer, IPY_GameWorld.CDBPlayerRefresh_HappyPoint, tjgTime)
-        
+    
     PlayerControl.DoGMForbidenTalkOnLogin(curPlayer)
     DataRecordPack.DR_PlayerLogin(curPlayer) # 放最后,记录等级、经验等信息
     return
@@ -1019,6 +985,7 @@
         PlayerMineArea.OnPlayerLogin(curPlayer)
         PlayerGuaji.OnPlayerLogin(curPlayer)
         PlayerActFamilyGCZ.OnPlayerLogin(curPlayer)
+        PlayerTalk.OnPlayerLogin(curPlayer)
         
         # 上线查询一次充值订单
         curPlayer.SendDBQueryRecharge()
@@ -1298,7 +1265,6 @@
     #---等级限制---
     if GameWorld.IsCrossServer():
         return
-    #PlayerTJG.TJGDeadOffline(curPlayer)
     
 #===============================================================================
 #    #---等级限制---
@@ -1345,7 +1311,7 @@
 #@remarks 玩家在地图服务器中登录ok,初始化自己
 def DoPlayerLoginInMap(curPlayer, tick):
     #通知GameServer切换地图开始
-    curPlayer.GameServer_SetLoadMapState(0)
+    #curPlayer.GameServer_SetLoadMapState(0)
     #在玩家切换场景的时候, 不会调用到这里
     curPlayer.SetCanMove(False)
     curPlayer.SetInitOK(False)
@@ -1471,13 +1437,18 @@
         
         #锁住玩家, 等到读取地图成功, 再解锁
         curPlayer.SetCanMove(False)
-        
-        #登陆发图形验证码
-        PlayerAutoCheckOnline.PlayerLoginCaptcha(curPlayer, tick)
+
+        curPlayer.SendToBServerServerInitOK()   #通知route登录成功 ,route向客户端发送0109包
+        OnAllServerInitOK(curPlayer, tick)
+        #到此处已经可以保存数据,即使客户端不回包断线
+        #原 //01 07 地图读取OK#tagCInitMapOK 逻辑 直接调用
+        __Func_LoadMapOK(index, tick)
+        GameServerRefresh.GameSever_PlayerInitOK(index, tick)
     except:
         curPlayer.Kick(IPY_GameWorld.disWaitForPlayerLoinError)
         import traceback
         GameWorld.RaiseException("玩家上线逻辑错误\r\n%s" % traceback.format_exc())
+    
     return
     
     
@@ -1540,9 +1511,6 @@
         #更改镖车记录的部分主人信息
         PlayerTruck.ChangeTruckNoteInfo(curPlayer)
         
-        #更新镖车进排行榜
-        PlayerBillboard.UpdateBillboardPlayerTruck(curPlayer.GetPlayerID(), curPlayer.GetName(), curPlayer.GetOperateInfo(),
-                                                   curPlayer.GetLV(), truckLv, curPlayer.GetMapID())
 
     #---初始化自己的召唤兽---
     #===========================================================================
@@ -1563,7 +1531,7 @@
     PetControl.Sync_PetInfo_ChangeMap(curPlayer, tick)
 
     #通知GameServer自己现在的地图
-    curPlayer.Sync_GameServer_MapID()
+    #curPlayer.Sync_GameServer_MapID()
     
     #如果本地图是副本的话, 则通知GameServer玩家进入副本
     if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtTeam:
@@ -1678,7 +1646,9 @@
 #@return 返回值无意义
 #@remarks C++封包触发, 切换地图成功( 目标地图 )
 def LoadMapOK(index, tick):
-    GameWorld.GetPsycoFunc(__Func_LoadMapOK)(index, tick)
+    #不需要等待客户端,以前有视野客户端未加载成功会被偷袭的问题,可以通过加x秒无敌BUFF解决,不应该增加流程
+    # GameWorld.GetPsycoFunc(__Func_LoadMapOK)(index, tick)
+    # GameServerRefresh.GameSever_PlayerInitOK(index, tick)
     return
 
 #---------------------------------------------------------------------
@@ -1722,7 +1692,7 @@
     GameWorld.Log("地图读取成功" , curPlayer.GetPlayerID())
     
     #通知GameServer切换地图停止
-    curPlayer.GameServer_SetLoadMapState(1)
+    #curPlayer.GameServer_SetLoadMapState(1)
     curPlayer.SetMapLoadOK(True)
     
     #将玩家放置在这个地图上
@@ -3114,10 +3084,19 @@
     except:
         import traceback
         GameWorld.RaiseException("玩家下线逻辑错误\r\n%s" % traceback.format_exc())
-        
+    RecvPackToMapDB.MapCallDB(GetPackSaveData(curPlayer))
     #调用底层使玩家下线
     curPlayer.DoDisconnect(tick)
     
+# 简化c++的保存数据封包
+def GetPackSaveData(curPlayer):
+    roleSaveData = base64.b64decode(curPlayer.GetPackData())  # base64加密了
+    allData = ""
+    allData = CommFunc.WriteBYTE(allData, IPY_ServerDefine.gstUpdate)
+    allData = CommFunc.WriteString(allData, len(roleSaveData), roleSaveData)
+    return  allData
+
+
 ##玩家正常下线
 #@param curPlayer 玩家索引
 #@param tick 时间戳
@@ -3171,8 +3150,6 @@
     
     #下线召回宠物
     PetControl.ReCallFightPet(curPlayer)
-    
-    #PlayerTJG.CalcPlayerTJG(curPlayer, tick)
     
     #离线session
     EventReport.WriteEvent_session(curPlayer)

--
Gitblit v1.8.0