From 9bdcc6b36e432272bd79d43b643e3614e73ef0f3 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 14 一月 2019 16:12:44 +0800
Subject: [PATCH] 5722 【后端】【1.5】跨服BOSS开发(本服异兽之地Boss、跨服蓬莱仙境Boss 次数共享支持)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py |   51 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 51 insertions(+), 0 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py
index 13c75db..0b6b448 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py
@@ -61,6 +61,57 @@
     ## 跨服服务器是否开放中
     return GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossServerOpen)
 
+def SetCrossPlayerAttrValue(curPlayer, setDict, isDelay=True):
+    ''' 批量设置玩家属性值
+        @param setDict: 设置属性字典 {attrName:attrValue, ...}
+        @param isDelay: 是否延迟同步,比如OnDay更新的数值,可能多个玩家同时更新多个属性值,所以需要设置延迟统一同步,其他具体根据功能需要选择是否延迟
+    '''
+    if not setDict or not PlayerControl.GetCrossMapID(curPlayer):
+        return
+    playerID = curPlayer.GetPlayerID()
+    setType = "PlayerAttr"
+    msgList = str([playerID, setType, setDict, isDelay])
+    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, "SetCrossPlayerAttrValue", msgList, len(msgList))
+    GameWorld.DebugLog("更新跨服玩家属性: isDelay=%s,%s" % (isDelay, setDict), playerID)
+    return
+
+def SetCrossPlayerNomalDict(curPlayer, setDict, isDelay=True):
+    ''' 批量设置玩家字典值
+        @param setDict: 设置字典, 无 dictType 信息时默认类型0 {dictKey:dictValue, dictKey:[dictValue, dictType], ...}
+        @param isDelay: 是否延迟同步,比如OnDay更新的数值,可能多个玩家同时更新多个属性值,所以需要设置延迟统一同步,其他具体根据功能需要选择是否延迟
+    '''
+    if not setDict or not PlayerControl.GetCrossMapID(curPlayer):
+        return
+    playerID = curPlayer.GetPlayerID()
+    setType = "PlayerDict"
+    msgList = str([playerID, setType, setDict, isDelay])
+    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, "SetCrossPlayerAttrValue", msgList, len(msgList))
+    GameWorld.DebugLog("更新跨服玩家字典: isDelay=%s,%s" % (isDelay, setDict), playerID)
+    return
+
+def ClientServerMsg_SetPlayerAttrValue(curPlayer, playerSetInfoList):
+    ## 收到子服同步的设置跨服玩家属性值
+    playerID = curPlayer.GetPlayerID()
+    GameWorld.DebugLog("收到子服同步的设置跨服玩家属性值: %s" % playerSetInfoList, playerID)
+    for setType, setDict in playerSetInfoList:
+        if setType == "PlayerDict":
+            for dictKey, valeInfo in setDict.items():
+                if isinstance(valeInfo, int):
+                    dictValue, dictType = valeInfo, 0
+                else:                    
+                    dictValue, dictType = valeInfo
+                PlayerControl.NomalDictSetProperty(curPlayer, dictKey, dictValue, dictType)
+                GameWorld.DebugLog("    NomalDictSetProperty dictKey=%s, dictValue=%s, dictType=%s" % (dictKey, dictValue, dictType), playerID)
+        else:
+            for attrName, attrValue in setDict.items():
+                if hasattr(curPlayer, attrName):
+                    getattr(curPlayer, attrName)(attrValue)
+                    GameWorld.DebugLog("    curPlayer.%s(%s)" % (attrName, attrValue))
+                elif hasattr(PlayerControl, attrName):
+                    getattr(PlayerControl, attrName)(curPlayer, attrValue)
+                    GameWorld.DebugLog("    PlayerControl.%s(curPlayer, %s)" % (attrName, attrValue), playerID)
+    return
+
 #// C1 04 主动退出跨服 #tagCMExitCrossRealm
 #
 #struct    tagCMExitCrossRealm

--
Gitblit v1.8.0