5512 子 【开发】【1.4】跨服竞技场 / 【后端】【1.4】跨服竞技场开发 -- 玩家数据 buff即时通知
5个文件已修改
1个文件已添加
114 ■■■■■ 已修改文件
ServerPython/CoreServerGroup/GameServer/Script/IPY_ServerDefine.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script.ini 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_GameObj.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IPY_ServerDefine.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossPlayerData.py 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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
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
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)
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
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossPlayerData.py
New file
@@ -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
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