| | |
| | | import base64
|
| | | import ChConfig
|
| | | import PyGameData
|
| | | import PlayerDienstgrad
|
| | | import IpyGameDataPY
|
| | | import PlayerHorse
|
| | | import PlayerPet
|
| | | import traceback
|
| | | import ShareDefine
|
| | |
| | | MergeData_Skill, # 只处理ID
|
| | | MergeData_Buff, # 即时发送
|
| | | CrossData_PetState, # 即时发送 宠物出战
|
| | | CrossData_HorseChange, # 即时发送 骑乘坐骑变更
|
| | | CrossData_RideHorse, # 即时发送 上下马
|
| | | ) = range(0, 7)
|
| | | ) = range(0, 5)
|
| | |
|
| | | ## 写数据类型定义
|
| | | (
|
| | |
| | |
|
| | | CrossDataInfo = {
|
| | | CrossData_PetState:[[WDT_DWORD, WDT_BYTE, WDT_BYTE], lambda curObj, valueList:PlayerPet.CrossServer_DoChangePetState(curObj, valueList)],
|
| | | CrossData_HorseChange:[[WDT_DWORD], lambda curObj, valueList:PlayerHorse.CrossServer_ChangeHorse(curObj, valueList)],
|
| | | CrossData_RideHorse:[[WDT_BYTE], lambda curObj, valueList:PlayerHorse.CrossServer_RideHorse(curObj, valueList)],
|
| | | }
|
| | |
|
| | | # 影响跨服战力属性列表
|
| | |
| | | return
|
| | |
|
| | | # 不需要处理的跨服地图
|
| | | if crossMapID in [ChConfig.Def_FBMapID_CrossRealmPK]:
|
| | | if crossMapID in []:
|
| | | return
|
| | |
|
| | | if not IpyGameDataPY.GetFuncCfg("CrossSyncPlayerData", 1):
|
| | |
| | | PyGameData.g_crossRegPlayerAttrDict.pop(playerID, None)
|
| | | PyGameData.g_crossSyncTickDict.pop(playerID, None)
|
| | | PyGameData.g_crossPlayerDictChangeInfo.pop(playerID, None)
|
| | | PyGameData.g_crossPlayerDienstgradChangeInfo.pop(playerID, None)
|
| | | PyGameData.g_crossPlayerItemsChangeInfo.pop(playerID, None)
|
| | | PyGameData.g_crossPlayerSkillsChangeInfo.pop(playerID, None)
|
| | | GameWorld.DebugLog("清除同步跨服数据的临时缓存", playerID)
|
| | |
| | | # curItem2 = curPack.GetAt(2)
|
| | | # curItem2.AssignItem(curSingleItem)
|
| | | #===============================================================================
|
| | | |
| | | def OnDienstgradChange(curPlayer, dienstgradID, state):
|
| | | ## 称号变更
|
| | | if not IsNeedProcessCrossPlayer(curPlayer):
|
| | | return
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | dienstgradStateDict = PyGameData.g_crossPlayerDienstgradChangeInfo.get(playerID, {})
|
| | | dienstgradStateDict[dienstgradID] = state
|
| | | PyGameData.g_crossPlayerDienstgradChangeInfo[playerID] = dienstgradStateDict
|
| | | return
|
| | |
|
| | | def OnPlayerFightPowerChange(curPlayer):
|
| | | ## 玩家战力变更时
|
| | |
| | | data = CommFunc.WriteBYTE(data, MergeData_Player)
|
| | | data = __WriteSyncPlayerAttrData(curPlayer, data) # 玩家属性
|
| | | data = __WriteSyncPlayerDictData(curPlayer, data) # 字典
|
| | | data = __WriteSyncPlayerDienstgradData(curPlayer, data) # 称号
|
| | | data = __WriteSyncPlayerItems(curPlayer, data)# 物品
|
| | | data = __WriteSyncPlayerSkills(curPlayer, data)# 技能
|
| | |
|
| | |
| | |
|
| | | pos = __ReadSyncPlayerAttrData(curPlayer, pdata, pos) # 玩家属性
|
| | | pos = __ReadSyncPlayerDictData(curPlayer, pdata, pos) # 字典
|
| | | pos = __ReadSyncPlayerDienstgradData(curPlayer, pdata, pos) # 称号
|
| | | pos = __ReadSyncPlayerItems(curPlayer, pdata, pos) # 物品
|
| | | pos = __ReadSyncPlayerSkills(curPlayer, pdata, pos)# 技能
|
| | |
|
| | |
| | | PlayerControl.NomalDictSetProperty(curPlayer, key, value, dType)
|
| | | GameWorld.DebugLog(" key=%s, value=%s, dType=%s" % (key, value, dType))
|
| | |
|
| | | return pos
|
| | |
|
| | | def __WriteSyncPlayerDienstgradData(curPlayer, data):
|
| | | ## 写入需要同步的玩家称号
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | if playerID not in PyGameData.g_crossPlayerDienstgradChangeInfo:
|
| | | return CommFunc.WriteBYTE(data, 0)
|
| | | changeDienstgradDict = PyGameData.g_crossPlayerDienstgradChangeInfo.pop(playerID)
|
| | | |
| | | count = len(changeDienstgradDict)
|
| | | GameWorld.DebugLog("变更的玩家称号个数: %s" % count)
|
| | | data = CommFunc.WriteBYTE(data, count)
|
| | | for dienstgradID, state in changeDienstgradDict.items():
|
| | | data = CommFunc.WriteDWORD(data, dienstgradID)
|
| | | data = CommFunc.WriteBYTE(data, state)
|
| | | GameWorld.DebugLog(" dienstgradID=%s, state=%s" % (dienstgradID, state))
|
| | | |
| | | return data
|
| | |
|
| | | def __ReadSyncPlayerDienstgradData(curPlayer, pdata, pos):
|
| | | ## 读取同步的玩家称号
|
| | | pdata = base64.b64decode(pdata)
|
| | | count, pos = CommFunc.ReadBYTE(pdata, pos)
|
| | | GameWorld.DebugLog("变更的玩家称号个数: %s" % count)
|
| | | for _ in xrange(count):
|
| | | dienstgradID, pos = CommFunc.ReadDWORD(pdata, pos)
|
| | | state, pos = CommFunc.ReadBYTE(pdata, pos)
|
| | | GameWorld.DebugLog(" dienstgradID=%s, state=%s" % (dienstgradID, state))
|
| | | if state:
|
| | | PlayerDienstgrad.PlayerAddDienstgrad(curPlayer, dienstgradID, isRefreshAttr=False)
|
| | | else:
|
| | | PlayerDienstgrad.PlayerDelDienstgrad(curPlayer, dienstgradID, False)
|
| | | |
| | | return pos
|
| | |
|
| | | def __WriteSyncPlayerItems(curPlayer, data):
|