From 0582c38c7da3665f8daee4d9f5163c07430618a0 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 17 十二月 2021 16:34:28 +0800
Subject: [PATCH] 5314 【BT3_1.102.1】【BT4】【BT5_1.101.1】【BT5】【主干】社交表数据重复(增加判断是否本服玩家ID逻辑;增加送礼物及提亲对象非本服玩家时提示)

---
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerControl.py            |   16 ++++++++++++++++
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerLove.py               |    8 ++++++++
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py |    1 +
 ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py                      |    2 ++
 ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py                 |    2 ++
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerSocial.py             |    6 ++++++
 6 files changed, 35 insertions(+), 0 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
index 0c54d4e..6c323bc 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
@@ -1218,6 +1218,7 @@
 def InitGameWorld(tick):
     #标记GameWorld初始化完成
     GameWorld.GetGameWorld().SetDict(ChConfig.Def_WorldKey_IsGameWorldInit, int(time.time()))
+    PlayerControl.LoadDBPlayer()
     #初始化游戏时钟
     GameWorld.GetGameWorld().SetTickTypeCount(ChConfig.TYPE_Tick_Count)
     #初始话开服时间、星期几
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
index 17c406e..021313a 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
@@ -216,6 +216,8 @@
     if GameWorld.IsCrossServer():
         return
     
+    PyGameData.g_dbPlayerIDMap[curPlayer.GetPlayerID()] = curPlayer.GetAccID()
+    
     if not PlayerControl.GetIsTJG(curPlayer):
         #家族副本boss状态通知
         PlayerFamilyBoss.OnLogin(curPlayer)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerControl.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerControl.py
index afba519..dc0b47e 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerControl.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerControl.py
@@ -32,6 +32,7 @@
 import IpyGameDataPY
 import CrossRealmMsg
 import ShareDefine
+import PyGameData
 import ChConfig
 import types
 #---------------------------------------------------------------------
@@ -187,7 +188,22 @@
 
     return NotifyCodeList
 
+#------------------------------------------------------------------------------ 
+def LoadDBPlayer():
+    if GameWorld.IsCrossServer():
+        return
+    PlayerDBOper.FindDBOper(PlayerDBOper.Table_DBPlayer, {}, {"PlayerID":1, "AccID":1, "_id":0}, LoadDBPlayerRet)
+    return
 
+def LoadDBPlayerRet(resultSetList, extendValueList):
+    for resultDict in resultSetList:
+        PyGameData.g_dbPlayerIDMap[resultDict["PlayerID"]] = resultDict["AccID"]
+    GameWorld.Log("启动服务器加载DBPlayer玩家账号ID对应关系! %s, %s" % (len(PyGameData.g_dbPlayerIDMap), PyGameData.g_dbPlayerIDMap))
+    return
+
+def GetDBPlayerAccIDByID(playerID):
+    ## 获取玩家表账号ID - 根据玩家ID, 可用于判断是否本服玩家
+    return PyGameData.g_dbPlayerIDMap.get(playerID, "")
 
 #waring:以下使用的扩展属性字段记录的属性类型必须和MapServer一致
 #------------------------------------------------------------------------------ 
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerLove.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerLove.py
index fb555df..8cec51f 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerLove.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerLove.py
@@ -778,6 +778,10 @@
     tagPlayerID = dataMsg[0]
     playerID = curPlayer.GetPlayerID()
     
+    if not PlayerControl.GetDBPlayerAccIDByID(tagPlayerID):
+        PlayerControl.NotifyCode(curPlayer, "NoInDBPlayer")
+        return
+        
     # 黑名单检查
     if PyDataManager.GetBlacklistManager().CheckBlacklistBoth(playerID, tagPlayerID, curPlayer):
         return
@@ -857,6 +861,10 @@
     
     playerID = curPlayer.GetPlayerID()
     
+    if not PlayerControl.GetDBPlayerAccIDByID(tagPlayerID):
+        PlayerControl.NotifyCode(curPlayer, "NoInDBPlayer")
+        return
+    
     # 黑名单检查
     if PyDataManager.GetBlacklistManager().CheckBlacklistBoth(playerID, tagPlayerID, curPlayer):
         return
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerSocial.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerSocial.py
index c723b63..fc8c29a 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerSocial.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerSocial.py
@@ -38,6 +38,9 @@
     
     # 添加社交对象
     def Add(self, tagID, isNotify=True):
+        if not PlayerControl.GetDBPlayerAccIDByID(tagID):
+            GameWorld.ErrLog("试图添加非本服玩家社交对象: tagID=%s,GroupType=%s" % (tagID, self.GroupType))
+            return False
         GameWorld.DebugLog("SocialPlayers----Add %s-%s-%s"%(self.GroupType, self.PlayerID, tagID))
         if tagID in self.SocialDict:
             GameWorld.DebugLog("SocialPlayers----Add 重复")
@@ -424,6 +427,9 @@
     
     # 获取亲密组
     def GetIntimacys(self, playerID):
+        if not PlayerControl.GetDBPlayerAccIDByID(playerID):
+            GameWorld.ErrLog("试图获取非本服玩家亲密组: playerID=%s" % playerID)
+            return
         if playerID not in self.PlayerIntimacys:
             self.PlayerIntimacys[playerID] = Intimacys(playerID)
         return self.PlayerIntimacys[playerID]
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py b/ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py
index debbfe6..dce06af 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py
@@ -12,6 +12,8 @@
 #
 #---------------------------------------------------------------------
 
+g_dbPlayerIDMap = {} # DBPlayer玩家表ID映射关系 {playerID:accID, ...}
+
 g_allMapServerInitOK = False
 
 g_pyGameDataManager = None

--
Gitblit v1.8.0