From e74b2fdd8a052d7c40adfeab9b881d7cb2cc8369 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 18 十二月 2024 15:41:47 +0800
Subject: [PATCH] 10297 【越南】【英语】【砍树】【tqxbqy】轮回殿-服务端(增加GM命令: Lunhui)

---
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerSocial.py |   52 ++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 50 insertions(+), 2 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerSocial.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerSocial.py
index 6b70901..778d090 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 重复")
@@ -329,6 +332,8 @@
         if not curPlayer:
             return nowIntimacy
         
+        self.__SyncMapServerCoupleIntimacy(curPlayer, tagID)
+        
         tagName = ""
         socialPlayer = PyDataManager.GetPersonalSocialManager().GetSocialPlayer(tagID)
         if socialPlayer:
@@ -349,8 +354,31 @@
             return 0
         intimacyObj.Intimacy = setValue
         if curPlayer:
+            self.__SyncMapServerCoupleIntimacy(curPlayer, tagID)
             self.Sync_SocialsInfo(curPlayer, [tagID])
         return intimacyObj.Intimacy
+    
+    def __SyncMapServerCoupleIntimacy(self, curPlayer, tagID):
+        ## 同步地图玩家伴侣亲密度
+        playerID = curPlayer.GetPlayerID()
+        couple = PyDataManager.GetDBPyCoupleManager().GetCouple(playerID)
+        if not couple:
+            return
+        if couple.GetCoupleID(playerID) != tagID:
+            return
+        self.SyncMapServerIntimacy(curPlayer, tagID)
+        return
+    
+    def SyncMapServerIntimacy(self, curPlayer, tagID):
+        ## 同步地图玩家伴侣亲密度
+        playerID = curPlayer.GetPlayerID()
+        intimacyValue = 0
+        intimacyObj = self.GetIntimacyObj(tagID)
+        if intimacyObj:
+            intimacyValue = intimacyObj.Intimacy
+        cmdInfo = ["SyncMapServerIntimacy", [tagID, intimacyValue]]
+        PlayerControl.MapServer_QueryPlayer_DoLogic(curPlayer, "Love", cmdInfo, playerID)
+        return
     
 # 整个游戏的亲密管理
 class IntimacyManager(object):
@@ -399,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]
@@ -810,6 +841,8 @@
         self.playerInfo.LV = curPlayer.GetLV()
         self.playerInfo.RealmLV = curPlayer.GetOfficialRank()
         self.playerInfo.OnlineType = 1      # 0 不在线  1 在线 2 脱机在线  
+        self.playerInfo.Face = curPlayer.GetFace()
+        self.playerInfo.FacePic = curPlayer.GetFacePic()
         if not self.playerInfo.RefCount:
             self.playerInfo.RefCount = 1
         return
@@ -822,6 +855,8 @@
         packStruct.LV = self.playerInfo.LV
         packStruct.RealmLV = self.playerInfo.RealmLV
         packStruct.OnlineType = self.playerInfo.OnlineType
+        packStruct.Face = self.playerInfo.Face
+        packStruct.FacePic = self.playerInfo.FacePic
         return packStruct
     
     # 更新玩家数据引用, 根据需求是否更新玩家数据
@@ -869,6 +904,8 @@
             playerSocial.LV = 1
             playerSocial.RealmLV = 1
             playerSocial.OnlineType = ChConfig.Def_Offline
+            playerSocial.Face = 0
+            playerSocial.FacePic = 0
         else:
             cacheDict = PlayerViewCache.GetCachePropDataDict(curCache)
     
@@ -879,6 +916,8 @@
             playerSocial.LV = cacheDict["LV"]
             playerSocial.RealmLV = cacheDict["RealmLV"]
             playerSocial.OnlineType = ChConfig.Def_Offline
+            playerSocial.Face = cacheDict.get("Face", 0)
+            playerSocial.FacePic = cacheDict.get("FacePic", 0)
             
         self.SocialInfo[playerID] = SocialPlayerData(playerSocial)
         socialPlayer = self.SocialInfo[playerID]
@@ -925,7 +964,10 @@
         savaData = ""
         cntData = ""
         cnt = 0
-        for socialPlayer in self.SocialInfo.values():
+        for playerID, socialPlayer in self.SocialInfo.items():
+            if PyGameData.g_dbPlayerIDMap and not PlayerControl.GetDBPlayerAccIDByID(playerID):
+                GameWorld.ErrLog("非本服社交玩家,不存档! playerID=%s" % playerID)
+                continue
             cnt += 1
             savaData += socialPlayer.playerInfo.getBuffer()
         
@@ -1047,7 +1089,13 @@
         socialPlayer.playerInfo.RealmLV = value
     elif notifyType == IPY_PlayerDefine.CDBPlayerRefresh_PlayerName:
         socialPlayer.playerInfo.PlayerName = value
-        
+    elif notifyType == IPY_PlayerDefine.CDBPlayerRefresh_Face:
+        socialPlayer.playerInfo.Face = value
+    elif notifyType == IPY_PlayerDefine.CDBPlayerRefresh_HairColor:
+        socialPlayer.playerInfo.FacePic = value
+    else:
+        return
+    
     Notify_All(playerID, notifyType, value)
     return
 

--
Gitblit v1.8.0