From ba42a47ca88381ef4762e56a8c39fa167aaad3b0 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期二, 15 一月 2019 21:47:09 +0800
Subject: [PATCH] 5512 子 【开发】【1.4】跨服竞技场 / 【后端】【1.4】跨服竞技场开发 -- 玩家数据 buff即时通知

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script.ini                       |    8 ++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py        |    4 ++
 ServerPython/CoreServerGroup/GameServer/Script/IPY_ServerDefine.py                            |    2 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_ServerDefine.py       |    2 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_GameObj.py            |    2 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossPlayerData.py |   96 ++++++++++++++++++++++++++++++++++++++++++++++++
 6 files changed, 114 insertions(+), 0 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/IPY_ServerDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/IPY_ServerDefine.py
index 15a1946..da036c6 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/IPY_ServerDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/IPY_ServerDefine.py
@@ -312,6 +312,7 @@
 gmQueryNewGuyCardState = _IPY_ServerDefine.gmQueryNewGuyCardState
 gmUpdateNewGuyCardState = _IPY_ServerDefine.gmUpdateNewGuyCardState
 gmReChargePush = _IPY_ServerDefine.gmReChargePush
+gmMergePlayerData = _IPY_ServerDefine.gmMergePlayerData
 mgMapInit = _IPY_ServerDefine.mgMapInit
 mgMapInitOK = _IPY_ServerDefine.mgMapInitOK
 mgPlayerIsBattle = _IPY_ServerDefine.mgPlayerIsBattle
@@ -509,6 +510,7 @@
 gstFinishRecharge = _IPY_ServerDefine.gstFinishRecharge
 gstSendDBMergeClientMsg = _IPY_ServerDefine.gstSendDBMergeClientMsg
 gstSendDBMergeClientListMsg = _IPY_ServerDefine.gstSendDBMergeClientListMsg
+gstMergePlayerData = _IPY_ServerDefine.gstMergePlayerData
 gstMax = _IPY_ServerDefine.gstMax
 btgServerSupport = _IPY_ServerDefine.btgServerSupport
 btgLineID = _IPY_ServerDefine.btgLineID
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script.ini
index 4dd4ed1..e41bdee 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script.ini
@@ -148,6 +148,14 @@
 ClassName = DB_PushRecharge
 FuncName = PushRecharge
 
+[CrossPlayerData]
+ScriptName = Player\CrossPlayerData.py
+Writer = alee
+Releaser = alee
+RegType = 1
+ClassName = DM_MergePlayerData
+FuncName = OnMergePlayerData
+
 ;;;;;;;;;;;;;;;;;;;;;;类初始化
 [InitNPC]
 ScriptName = NPC\ChNPC.py
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_GameObj.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_GameObj.py
index b8d7728..d203c93 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_GameObj.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_GameObj.py
@@ -1903,10 +1903,12 @@
     def GetOrderAmount(self): return _IPY_GameObj.IPY_Player_GetOrderAmount(self)
     def SendDBFinishRecharge(self, *args): return _IPY_GameObj.IPY_Player_SendDBFinishRecharge(self, *args)
     def SendDBQueryRecharge(self): return _IPY_GameObj.IPY_Player_SendDBQueryRecharge(self)
+    def GetMergePlayerData(self): return _IPY_GameObj.IPY_Player_GetMergePlayerData(self)
     def SendMergeRegisterPlayer(self, selectMapID = 0, selectDataMapID = 0, selectCopyMapID = 0, 
     selectPosX = 0, selectPosY = 0): return _IPY_GameObj.IPY_Player_SendMergeRegisterPlayer(self, selectMapID, selectDataMapID, selectCopyMapID, selectPosX, 
     selectPosY)
     def SendMergeRegisterPlayerAfterChange(self, *args): return _IPY_GameObj.IPY_Player_SendMergeRegisterPlayerAfterChange(self, *args)
+    def SendMergePlayerData(self, *args): return _IPY_GameObj.IPY_Player_SendMergePlayerData(self, *args)
     def SendMergeQueryNewAccount(self): return _IPY_GameObj.IPY_Player_SendMergeQueryNewAccount(self)
     def SetPlayerName(self, *args): return _IPY_GameObj.IPY_Player_SetPlayerName(self, *args)
     def UpdatePlayerNameResult(self, *args): return _IPY_GameObj.IPY_Player_UpdatePlayerNameResult(self, *args)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_ServerDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_ServerDefine.py
index d6b3247..6232569 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_ServerDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_ServerDefine.py
@@ -313,6 +313,7 @@
 gmQueryNewGuyCardState = _IPY_ServerDefine.gmQueryNewGuyCardState
 gmUpdateNewGuyCardState = _IPY_ServerDefine.gmUpdateNewGuyCardState
 gmReChargePush = _IPY_ServerDefine.gmReChargePush
+gmMergePlayerData = _IPY_ServerDefine.gmMergePlayerData
 mgMapInit = _IPY_ServerDefine.mgMapInit
 mgMapInitOK = _IPY_ServerDefine.mgMapInitOK
 mgPlayerIsBattle = _IPY_ServerDefine.mgPlayerIsBattle
@@ -510,6 +511,7 @@
 gstFinishRecharge = _IPY_ServerDefine.gstFinishRecharge
 gstSendDBMergeClientMsg = _IPY_ServerDefine.gstSendDBMergeClientMsg
 gstSendDBMergeClientListMsg = _IPY_ServerDefine.gstSendDBMergeClientListMsg
+gstMergePlayerData = _IPY_ServerDefine.gstMergePlayerData
 gstMax = _IPY_ServerDefine.gstMax
 btgServerSupport = _IPY_ServerDefine.btgServerSupport
 btgLineID = _IPY_ServerDefine.btgLineID
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossPlayerData.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossPlayerData.py
new file mode 100644
index 0000000..7eadb42
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossPlayerData.py
@@ -0,0 +1,96 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#
+##@package
+#
+# @todo: 
+#
+# @author: Alee
+# @date 2019-1-14 下午11:30:12
+# @version 1.0
+#
+# @note: 
+#
+#---------------------------------------------------------------------
+import GameWorld
+import CommFunc
+import PlayerControl
+import IPY_GameWorld
+import BuffSkill
+import SkillCommon
+import base64
+import ChConfig
+
+# 发送格式: 类型+(数量)+数据
+# 向跨服发送的数据类型
+(
+MergeData_Player,   # 对比处理
+MergeData_Item,     # 对比处理 只算属性的背包 装备 宠物 
+MergeData_Skill,    # 只处理ID
+MergeData_Buff,     # 即时发送
+) = range(0, 4)
+
+# 发送主服玩家数据给跨服
+
+def SendMergeData_Buff(curPlayer, buffID, plusValueList):
+    if buffID in [ChConfig.Def_SkillID_LimitSuperBuff,
+                  ChConfig.Def_SkillID_TJGSuperBuff]:
+        # 不需要处理的buff
+        return
+    if curPlayer.GetGameObjType() != IPY_GameWorld.gotPlayer:
+        return
+    
+    if GameWorld.IsCrossServer():
+        # 非主服
+        return
+    
+    if not PlayerControl.GetCrossMapID(curPlayer):
+        # 非跨服中
+        return
+
+    data = ''
+    data = CommFunc.WriteBYTE(data, MergeData_Buff)
+    data = CommFunc.WriteDWORD(data, buffID)
+    data = CommFunc.WriteBYTE(data, len(plusValueList))
+    for value in plusValueList:
+        data = CommFunc.WriteDWORD(data, value)
+
+    
+    #直接用字节流会报错
+    data = base64.b64encode(data)
+    curPlayer.SendMergePlayerData(data)
+    return
+
+
+# 接收子服玩家数据
+def OnMergePlayerData(index, tick):
+    if not GameWorld.IsCrossServer():
+        # 非跨服
+        return
+    
+    # 跨服服务器处理
+    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+    pdata = base64.b64decode(curPlayer.GetMergePlayerData())
+    
+    pos = 0
+    dataType, pos = CommFunc.ReadBYTE(pdata, pos)
+    if dataType == MergeData_Buff:
+        buffID, pos = CommFunc.ReadDWORD(pdata, pos)
+        curSkill = GameWorld.GetGameData().GetSkillBySkillID(buffID)
+        if not curSkill:
+            return
+        
+        plusValueList = []
+        cnt, pos = CommFunc.ReadBYTE(pdata, pos)
+        for i in range(cnt):
+            value, pos = CommFunc.ReadDWORD(pdata, pos)
+            plusValueList.append(value)
+            
+        buffType = SkillCommon.GetBuffType(curSkill)
+        BuffSkill.AddBuffNoRefreshState(curPlayer, buffType, curSkill, tick, plusValueList)
+
+        
+    return
+
+
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py
index 61b0f3b..ca17209 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py
@@ -25,6 +25,7 @@
 import PlayerTJG
 import OperControlManager
 import GameObj
+import CrossPlayerData
 #---------------------------------------------------------------------
 
 #---------------------------------------------------------------------
@@ -156,6 +157,9 @@
     #用于BUFF满的时候处理刷新逻辑
     isDelRefresh = False
     
+    # 向跨服发送数据
+    CrossPlayerData.SendMergeData_Buff(curObj, curSkillID, plusValueList)
+    
     # buff层级
     layerMaxCnt = 0
     layerCalc = 0

--
Gitblit v1.8.0