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