From 835c5fad7ad4e723c34be7f5fc073eeb7104e3f4 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期六, 27 四月 2019 11:14:44 +0800
Subject: [PATCH] 6628 【2.0】【后端】查看玩家装备和查看玩家战力功能
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py | 9
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerViewCache.py | 323 ++++++--------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py | 8
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py | 1
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py | 8
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py | 1
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyAction.py | 3
ServerPython/CoreServerGroup/GameServer/Script/ChMapToGamePyPack.py | 280 +++++++++++-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChMapToGamePyPack.py | 280 +++++++++++-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py | 286 +++++++------
11 files changed, 799 insertions(+), 402 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChMapToGamePyPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChMapToGamePyPack.py
index 2a4c50f..a6c89e4 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChMapToGamePyPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChMapToGamePyPack.py
@@ -612,6 +612,7 @@
("SubCmd", c_ubyte),
("PlayerID", c_int), #玩家ID
("FindPlayerID", c_int), #要查询的玩家ID
+ ("EquipClassLV", c_ubyte), #大于0为查看指定境界阶装备信息, 0为查看默认信息
]
def __init__(self):
@@ -630,6 +631,7 @@
self.SubCmd = 0x02
self.PlayerID = 0
self.FindPlayerID = 0
+ self.EquipClassLV = 0
return
def GetLength(self):
@@ -643,13 +645,15 @@
Cmd:%s,
SubCmd:%s,
PlayerID:%d,
- FindPlayerID:%d
+ FindPlayerID:%d,
+ EquipClassLV:%d
'''\
%(
self.Cmd,
self.SubCmd,
self.PlayerID,
- self.FindPlayerID
+ self.FindPlayerID,
+ self.EquipClassLV
)
return DumpString
@@ -665,14 +669,42 @@
Head = tagHead()
PlayerID = 0 #(DWORD PlayerID)//玩家ID
PlayerLV = 0 #(WORD PlayerLV)//玩家等级
- PropDataSize = 0 #(DWORD PropDataSize)
- PropData = "" #(String PropData)//属性记录
- ItemDataSize = 0 #(DWORD ItemDataSize)
- ItemData = "" #(String ItemData)//物品记录
- PlusDataSize = 0 #(DWORD PlusDataSize)
- PlusData = "" #(String PlusData)//扩展记录
IsLogouting = 0 #(BYTE IsLogouting)//本次是否为下线同步
OffTime = 0 #(DWORD OffTime)// 下线时间戳
+ PropDataSize = 0 #(WORD PropDataSize)
+ PropData = "" #(String PropData)//属性记录
+ PlusDataSize = 0 #(WORD PlusDataSize)
+ PlusData = "" #(String PlusData)//扩展记录
+ ItemDataSize1 = 0 #(WORD ItemDataSize1)
+ ItemData1 = "" #(String ItemData1)//1阶装备数据
+ ItemDataSize2 = 0 #(WORD ItemDataSize2)
+ ItemData2 = "" #(String ItemData2)
+ ItemDataSize3 = 0 #(WORD ItemDataSize3)
+ ItemData3 = "" #(String ItemData3)
+ ItemDataSize4 = 0 #(WORD ItemDataSize4)
+ ItemData4 = "" #(String ItemData4)
+ ItemDataSize5 = 0 #(WORD ItemDataSize5)
+ ItemData5 = "" #(String ItemData5)
+ ItemDataSize6 = 0 #(WORD ItemDataSize6)
+ ItemData6 = "" #(String ItemData6)
+ ItemDataSize7 = 0 #(WORD ItemDataSize7)
+ ItemData7 = "" #(String ItemData7)
+ ItemDataSize8 = 0 #(WORD ItemDataSize8)
+ ItemData8 = "" #(String ItemData8)
+ ItemDataSize9 = 0 #(WORD ItemDataSize9)
+ ItemData9 = "" #(String ItemData9)
+ ItemDataSize10 = 0 #(WORD ItemDataSize10)
+ ItemData10 = "" #(String ItemData10)
+ ItemDataSize11 = 0 #(WORD ItemDataSize11)
+ ItemData11 = "" #(String ItemData11)
+ ItemDataSize12 = 0 #(WORD ItemDataSize12)
+ ItemData12 = "" #(String ItemData12)
+ ItemDataSize13 = 0 #(WORD ItemDataSize13)
+ ItemData13 = "" #(String ItemData13)
+ ItemDataSize14 = 0 #(WORD ItemDataSize14)
+ ItemData14 = "" #(String ItemData14)
+ ItemDataSize15 = 0 #(WORD ItemDataSize15)
+ ItemData15 = "" #(String ItemData15)
data = None
def __init__(self):
@@ -686,14 +718,42 @@
_pos = self.Head.ReadData(_lpData, _pos)
self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
self.PlayerLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
- self.PropDataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.PropData,_pos = CommFunc.ReadString(_lpData, _pos,self.PropDataSize)
- self.ItemDataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.ItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize)
- self.PlusDataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.PlusData,_pos = CommFunc.ReadString(_lpData, _pos,self.PlusDataSize)
self.IsLogouting,_pos = CommFunc.ReadBYTE(_lpData, _pos)
self.OffTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.PropDataSize,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.PropData,_pos = CommFunc.ReadString(_lpData, _pos,self.PropDataSize)
+ self.PlusDataSize,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.PlusData,_pos = CommFunc.ReadString(_lpData, _pos,self.PlusDataSize)
+ self.ItemDataSize1,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ItemData1,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize1)
+ self.ItemDataSize2,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ItemData2,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize2)
+ self.ItemDataSize3,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ItemData3,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize3)
+ self.ItemDataSize4,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ItemData4,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize4)
+ self.ItemDataSize5,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ItemData5,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize5)
+ self.ItemDataSize6,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ItemData6,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize6)
+ self.ItemDataSize7,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ItemData7,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize7)
+ self.ItemDataSize8,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ItemData8,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize8)
+ self.ItemDataSize9,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ItemData9,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize9)
+ self.ItemDataSize10,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ItemData10,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize10)
+ self.ItemDataSize11,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ItemData11,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize11)
+ self.ItemDataSize12,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ItemData12,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize12)
+ self.ItemDataSize13,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ItemData13,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize13)
+ self.ItemDataSize14,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ItemData14,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize14)
+ self.ItemDataSize15,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ItemData15,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize15)
return _pos
def Clear(self):
@@ -703,14 +763,42 @@
self.Head.SubCmd = 0x01
self.PlayerID = 0
self.PlayerLV = 0
- self.PropDataSize = 0
- self.PropData = ""
- self.ItemDataSize = 0
- self.ItemData = ""
- self.PlusDataSize = 0
- self.PlusData = ""
self.IsLogouting = 0
self.OffTime = 0
+ self.PropDataSize = 0
+ self.PropData = ""
+ self.PlusDataSize = 0
+ self.PlusData = ""
+ self.ItemDataSize1 = 0
+ self.ItemData1 = ""
+ self.ItemDataSize2 = 0
+ self.ItemData2 = ""
+ self.ItemDataSize3 = 0
+ self.ItemData3 = ""
+ self.ItemDataSize4 = 0
+ self.ItemData4 = ""
+ self.ItemDataSize5 = 0
+ self.ItemData5 = ""
+ self.ItemDataSize6 = 0
+ self.ItemData6 = ""
+ self.ItemDataSize7 = 0
+ self.ItemData7 = ""
+ self.ItemDataSize8 = 0
+ self.ItemData8 = ""
+ self.ItemDataSize9 = 0
+ self.ItemData9 = ""
+ self.ItemDataSize10 = 0
+ self.ItemData10 = ""
+ self.ItemDataSize11 = 0
+ self.ItemData11 = ""
+ self.ItemDataSize12 = 0
+ self.ItemData12 = ""
+ self.ItemDataSize13 = 0
+ self.ItemData13 = ""
+ self.ItemDataSize14 = 0
+ self.ItemData14 = ""
+ self.ItemDataSize15 = 0
+ self.ItemData15 = ""
return
def GetLength(self):
@@ -718,14 +806,42 @@
length += self.Head.GetLength()
length += 4
length += 2
- length += 4
- length += len(self.PropData)
- length += 4
- length += len(self.ItemData)
- length += 4
- length += len(self.PlusData)
length += 1
length += 4
+ length += 2
+ length += len(self.PropData)
+ length += 2
+ length += len(self.PlusData)
+ length += 2
+ length += len(self.ItemData1)
+ length += 2
+ length += len(self.ItemData2)
+ length += 2
+ length += len(self.ItemData3)
+ length += 2
+ length += len(self.ItemData4)
+ length += 2
+ length += len(self.ItemData5)
+ length += 2
+ length += len(self.ItemData6)
+ length += 2
+ length += len(self.ItemData7)
+ length += 2
+ length += len(self.ItemData8)
+ length += 2
+ length += len(self.ItemData9)
+ length += 2
+ length += len(self.ItemData10)
+ length += 2
+ length += len(self.ItemData11)
+ length += 2
+ length += len(self.ItemData12)
+ length += 2
+ length += len(self.ItemData13)
+ length += 2
+ length += len(self.ItemData14)
+ length += 2
+ length += len(self.ItemData15)
return length
@@ -734,14 +850,42 @@
data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
data = CommFunc.WriteDWORD(data, self.PlayerID)
data = CommFunc.WriteWORD(data, self.PlayerLV)
- data = CommFunc.WriteDWORD(data, self.PropDataSize)
- data = CommFunc.WriteString(data, self.PropDataSize, self.PropData)
- data = CommFunc.WriteDWORD(data, self.ItemDataSize)
- data = CommFunc.WriteString(data, self.ItemDataSize, self.ItemData)
- data = CommFunc.WriteDWORD(data, self.PlusDataSize)
- data = CommFunc.WriteString(data, self.PlusDataSize, self.PlusData)
data = CommFunc.WriteBYTE(data, self.IsLogouting)
data = CommFunc.WriteDWORD(data, self.OffTime)
+ data = CommFunc.WriteWORD(data, self.PropDataSize)
+ data = CommFunc.WriteString(data, self.PropDataSize, self.PropData)
+ data = CommFunc.WriteWORD(data, self.PlusDataSize)
+ data = CommFunc.WriteString(data, self.PlusDataSize, self.PlusData)
+ data = CommFunc.WriteWORD(data, self.ItemDataSize1)
+ data = CommFunc.WriteString(data, self.ItemDataSize1, self.ItemData1)
+ data = CommFunc.WriteWORD(data, self.ItemDataSize2)
+ data = CommFunc.WriteString(data, self.ItemDataSize2, self.ItemData2)
+ data = CommFunc.WriteWORD(data, self.ItemDataSize3)
+ data = CommFunc.WriteString(data, self.ItemDataSize3, self.ItemData3)
+ data = CommFunc.WriteWORD(data, self.ItemDataSize4)
+ data = CommFunc.WriteString(data, self.ItemDataSize4, self.ItemData4)
+ data = CommFunc.WriteWORD(data, self.ItemDataSize5)
+ data = CommFunc.WriteString(data, self.ItemDataSize5, self.ItemData5)
+ data = CommFunc.WriteWORD(data, self.ItemDataSize6)
+ data = CommFunc.WriteString(data, self.ItemDataSize6, self.ItemData6)
+ data = CommFunc.WriteWORD(data, self.ItemDataSize7)
+ data = CommFunc.WriteString(data, self.ItemDataSize7, self.ItemData7)
+ data = CommFunc.WriteWORD(data, self.ItemDataSize8)
+ data = CommFunc.WriteString(data, self.ItemDataSize8, self.ItemData8)
+ data = CommFunc.WriteWORD(data, self.ItemDataSize9)
+ data = CommFunc.WriteString(data, self.ItemDataSize9, self.ItemData9)
+ data = CommFunc.WriteWORD(data, self.ItemDataSize10)
+ data = CommFunc.WriteString(data, self.ItemDataSize10, self.ItemData10)
+ data = CommFunc.WriteWORD(data, self.ItemDataSize11)
+ data = CommFunc.WriteString(data, self.ItemDataSize11, self.ItemData11)
+ data = CommFunc.WriteWORD(data, self.ItemDataSize12)
+ data = CommFunc.WriteString(data, self.ItemDataSize12, self.ItemData12)
+ data = CommFunc.WriteWORD(data, self.ItemDataSize13)
+ data = CommFunc.WriteString(data, self.ItemDataSize13, self.ItemData13)
+ data = CommFunc.WriteWORD(data, self.ItemDataSize14)
+ data = CommFunc.WriteString(data, self.ItemDataSize14, self.ItemData14)
+ data = CommFunc.WriteWORD(data, self.ItemDataSize15)
+ data = CommFunc.WriteString(data, self.ItemDataSize15, self.ItemData15)
return data
def OutputString(self):
@@ -749,27 +893,83 @@
Head:%s,
PlayerID:%d,
PlayerLV:%d,
+ IsLogouting:%d,
+ OffTime:%d,
PropDataSize:%d,
PropData:%s,
- ItemDataSize:%d,
- ItemData:%s,
PlusDataSize:%d,
PlusData:%s,
- IsLogouting:%d,
- OffTime:%d
+ ItemDataSize1:%d,
+ ItemData1:%s,
+ ItemDataSize2:%d,
+ ItemData2:%s,
+ ItemDataSize3:%d,
+ ItemData3:%s,
+ ItemDataSize4:%d,
+ ItemData4:%s,
+ ItemDataSize5:%d,
+ ItemData5:%s,
+ ItemDataSize6:%d,
+ ItemData6:%s,
+ ItemDataSize7:%d,
+ ItemData7:%s,
+ ItemDataSize8:%d,
+ ItemData8:%s,
+ ItemDataSize9:%d,
+ ItemData9:%s,
+ ItemDataSize10:%d,
+ ItemData10:%s,
+ ItemDataSize11:%d,
+ ItemData11:%s,
+ ItemDataSize12:%d,
+ ItemData12:%s,
+ ItemDataSize13:%d,
+ ItemData13:%s,
+ ItemDataSize14:%d,
+ ItemData14:%s,
+ ItemDataSize15:%d,
+ ItemData15:%s
'''\
%(
self.Head.OutputString(),
self.PlayerID,
self.PlayerLV,
+ self.IsLogouting,
+ self.OffTime,
self.PropDataSize,
self.PropData,
- self.ItemDataSize,
- self.ItemData,
self.PlusDataSize,
self.PlusData,
- self.IsLogouting,
- self.OffTime
+ self.ItemDataSize1,
+ self.ItemData1,
+ self.ItemDataSize2,
+ self.ItemData2,
+ self.ItemDataSize3,
+ self.ItemData3,
+ self.ItemDataSize4,
+ self.ItemData4,
+ self.ItemDataSize5,
+ self.ItemData5,
+ self.ItemDataSize6,
+ self.ItemData6,
+ self.ItemDataSize7,
+ self.ItemData7,
+ self.ItemDataSize8,
+ self.ItemData8,
+ self.ItemDataSize9,
+ self.ItemData9,
+ self.ItemDataSize10,
+ self.ItemData10,
+ self.ItemDataSize11,
+ self.ItemData11,
+ self.ItemDataSize12,
+ self.ItemData12,
+ self.ItemDataSize13,
+ self.ItemData13,
+ self.ItemDataSize14,
+ self.ItemData14,
+ self.ItemDataSize15,
+ self.ItemData15
)
return DumpString
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
index 1d77aca..5c15b7e 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
@@ -5606,6 +5606,7 @@
("Cmd", c_ubyte),
("SubCmd", c_ubyte),
("PlayerID", c_int),
+ ("EquipClassLV", c_ubyte), #大于0为查看指定境界阶装备信息, 0为查看默认信息
]
def __init__(self):
@@ -5623,6 +5624,7 @@
self.Cmd = 0xA2
self.SubCmd = 0x12
self.PlayerID = 0
+ self.EquipClassLV = 0
return
def GetLength(self):
@@ -5635,12 +5637,14 @@
DumpString = '''//A2 12 查看玩家详细信息//tagCMViewPlayerInfo:
Cmd:%s,
SubCmd:%s,
- PlayerID:%d
+ PlayerID:%d,
+ EquipClassLV:%d
'''\
%(
self.Cmd,
self.SubCmd,
- self.PlayerID
+ self.PlayerID,
+ self.EquipClassLV
)
return DumpString
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyAction.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyAction.py
index a8fc787..0cf2590 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyAction.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyAction.py
@@ -583,7 +583,8 @@
#GameWorld.DebugLog("普通成员不记录家族官员模型装备信息!")
return
- modelEquipInfoList = PlayerViewCache.GetPlayerCacheEquipView(playerID)
+ modelEquipInfoList = []
+ #modelEquipInfoList = PlayerViewCache.GetPlayerCacheEquipView(playerID)
if not modelEquipInfoList:
#GameWorld.DebugLog("找不到家族官员模型装备信息, 不记录!familyID=%s,playerID=%s" % (familyID, playerID))
return
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerViewCache.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerViewCache.py
index 72ccc54..9709ed7 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerViewCache.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerViewCache.py
@@ -16,17 +16,18 @@
# @change: "2016-05-18 16:00" hxp 战盟有官员成员缓存不清除
#---------------------------------------------------------------------
#"""Version = 2016-05-18 16:00"""
-#------------------------------------------------------------------------------
+#---------------------------------------------------------------------
+
import GameWorld
-import ChPyNetSendPack
import PlayerControl
import NetPackCommon
+import ChPyNetSendPack
import PlayerFBHelpBattle
+import PyGameDataStruct
import IpyGameDataPY
-import ShareDefine
+import PyDataManager
import ChConfig
-import time
import json
ViewCacheMgr = GameWorld.GameWorldData.GetPlayerViewCacheMgr()
@@ -47,91 +48,21 @@
return result
-##更新缓存数据
-# @param PlayerID, PropData, ItemData, PlusData, isSaveDB
-# @return None
-def UpdatePlayerCache(PlayerID, PropData, ItemData, PlusData, isSaveDB=False, packData=None):
- curCache = ViewCacheMgr.FindCache(PlayerID)
- if not curCache:
- curCache = ViewCacheMgr.AddNewCache(PlayerID)
- if packData:
- curCache.SetPlayerLV(packData.PlayerLV)
- curCache.SetOffTime(packData.OffTime)
-
-
- GameWorld.DebugLog('ViewCache### UpdatePlayerCache PlayerID %s, \
- PropData(len %s): %s, \
- ItemData(len %s): %s, \
- PlusData(len %s): %s'%
- (PlayerID, len(PropData), PropData,len(ItemData), ItemData, len(PlusData), PlusData)
- )
- #2017-12-21 由于保存数据库的数据(realtime)过多根据需求分SetItemData和SetItemDataNoSave
- # 关服尽量只保存基础数据,默认使用不保存接口 SetItemDataNoSave
-
- curCache.SetPropData(PropData,len(PropData))
- if curCache.GetItemData() or (isSaveDB and IsNeedSaveViewCacheAllInfo(PlayerID)):
- curCache.SetItemData(ItemData,len(ItemData))
- curCache.SetPlusData(PlusData,len(PlusData))
- curCache.SetItemDataNoSave("",0) # 避免占用内存
- curCache.SetPlusDataNoSave("",0)
- else:
- # 低级号不处理保存
- curCache.SetItemDataNoSave(ItemData,len(ItemData))
- curCache.SetPlusDataNoSave(PlusData,len(PlusData))
- curCache.SetNeedSaveDB(isSaveDB) #设置需要保存到数据库
-
- # 同步更新助战信息
- if PlayerFBHelpBattle.IsInHelpBattleCheckInList(PlayerID):
- PropDataDict = eval(PropData)
- fightPower = PropDataDict.get("FightPower", 0)
- familyID = PropDataDict.get("FamilyID", 0)
- playerName = PropDataDict.get("Name", "")
- PlayerFBHelpBattle.UpdateCheckInPlayerInfo(PlayerID, fightPower, familyID, playerName)
-
- #暂时关闭
- #===========================================================================
- # FamilyIDKey = "FamilyID"
- # if FamilyIDKey in PropData:
- # PropDataDict = eval(PropData)
- # familyID = PropDataDict[FamilyIDKey]
- # if familyID > 0:
- # PlayerFamilyAction.UpdFamilyOfficerModelEquip(familyID, PlayerID)
- #===========================================================================
- return
-
-
-##玩家下线缓存数据
-# @param PlayerID, PlayerLV, PropData, ItemData, PlusData
-# @return None
-def OnPlayerLogout(curPackData):
- PlayerID = curPackData.PlayerID
- PlayerLV = curPackData.PlayerLV
- #不需要保存离线数据的,直接删除缓存数据
- if not IsNeedSaveLogoutPlayer(PlayerID, PlayerLV):
- ViewCacheMgr.DeleteCache(PlayerID)
- return
- #更新数据,并设置需要保存数据库
- UpdatePlayerCache(PlayerID, curPackData.PropData, curPackData.ItemData, curPackData.PlusData, True, packData=curPackData)
- return
-
-## 根据规则判定是否需要继续保存离线玩家数据
-# @param PlayerID, PlayerLV
-# @return None
-def IsNeedSaveLogoutPlayer(PlayerID, PlayerLV):
- if PlayerFBHelpBattle.IsInHelpBattleCheckInList(PlayerID):
+def IsSaveDBViewCache(playerID, playerLV):
+ ## 是否保存基本的缓存数据
+ if PlayerFBHelpBattle.IsInHelpBattleCheckInList(playerID):
return True
SaveDBLimitLV = IpyGameDataPY.GetFuncCfg("PlayerViewCache", 1)
#校验玩家等级
- if PlayerLV < SaveDBLimitLV:
+ if playerLV < SaveDBLimitLV:
return False
return True
-# 上榜用户
-def IsNeedSaveViewCacheAllInfo(PlayerID):
- if PlayerFBHelpBattle.IsInHelpBattleCheckInList(PlayerID):
- return True
+def IsSaveAllViewCache(playerID):
+ ## 是否保存所有缓存数据
+
NeedCheckBillBoardType = IpyGameDataPY.GetFuncEvalCfg("PlayerViewCache", 2)
#校验玩家是否上排行榜
billboardMgr = GameWorld.GetBillboard()
@@ -139,108 +70,149 @@
curBillboard = billboardMgr.FindBillboard(BillBoardType)
if not curBillboard:
continue
- if curBillboard.FindByID(PlayerID):
+ if curBillboard.FindByID(playerID):
return True
-
+
return False
-
-# #校验玩家是否上排行榜
-# billboardMgr = GameWorld.GetBillboard()
-# for BillBoardType in NeedCheckBillBoardType:
-# curBillboard = billboardMgr.FindBillboard(BillBoardType)
-# if not curBillboard:
-# continue
-# if curBillboard.FindByID(PlayerID):
-# return True
-#
-# curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(PlayerID)
-# if curPlayer:
-# # 非普通成员需保存
-# if PlayerFamily.GetPlayerFamilyMemberLV(curPlayer) != IPY_GameServer.fmlMember:
-# return True
-#
-# return False
-
-
-## //04 01 地图同步玩家数据到GameServer#tagMGUpdatePlayerCache
-# @param routeIndex, mapID, curPackData, tick
-# @return None
-def OnMGUpdatePlayerCache(routeIndex, mapID, curPackData, tick):
- GameWorld.DebugLog('ViewCache### OnMGUpdatePlayerCache in %s'%curPackData.OutputString())
- PlayerID = curPackData.PlayerID
- PlayerLV = curPackData.PlayerLV
- if curPackData.IsLogouting:
- OnPlayerLogout(curPackData)
- else:
- # 此处保存设置为True是为安全防范,比如突然断电,宕机等情况 导致误以为不保存,故等级可设置高一点
- UpdatePlayerCache(PlayerID, curPackData.PropData, \
- curPackData.ItemData, curPackData.PlusData, True if PlayerLV > 150 else False, packData=curPackData)
- GameWorld.DebugLog('ViewCache### OnMGUpdatePlayerCache out')
+def DeleteViewCache(playerID):
+ ## 删除玩家缓存
+ pyViewCacheMgr = PyDataManager.GetPlayerViewCachePyManager()
+ playerViewCachePyDict = pyViewCacheMgr.playerViewCachePyDict
+ playerViewCachePyDict.pop(playerID)
+ GameWorld.DebugLog("删除查看缓存!", playerID)
return
-## //04 02 地图查询玩家缓存数据#tagMGQueryPlayerCache
-# @param routeIndex, mapID, curPackData, tick
-# @return None
+def FindViewCache(playerID, isAddNew=False):
+ ## 查找玩家缓存
+ curCache = None
+ pyViewCacheMgr = PyDataManager.GetPlayerViewCachePyManager()
+ playerViewCachePyDict = pyViewCacheMgr.playerViewCachePyDict
+ if playerID in playerViewCachePyDict:
+ curCache = playerViewCachePyDict[playerID]
+ elif isAddNew:
+ curCache = PyGameDataStruct.tagPlayerViewCachePy()
+ curCache.PlayerID = playerID
+ playerViewCachePyDict[playerID] = curCache
+ return curCache
+
+#//04 01 地图同步玩家缓存数据到GameServer#tagMGUpdatePlayerCache
+#
+#struct tagMGUpdatePlayerCache
+#{
+# tagHead Head;
+# DWORD PlayerID; //玩家ID
+# WORD PlayerLV; //玩家等级
+# BYTE IsLogouting; //本次是否为下线同步
+# DWORD OffTime; // 下线时间戳
+# WORD PropDataSize;
+# char PropData[PropDataSize]; //属性记录
+# WORD PlusDataSize;
+# char PlusData[PlusDataSize]; //扩展记录
+# WORD ItemDataSize1;
+# char ItemData1[ItemDataSize1]; //1阶装备数据
+# ... ...
+# WORD ItemDataSize15;
+# char ItemData15[ItemDataSize15];
+#};
+def OnMGUpdatePlayerCache(routeIndex, mapID, curPackData, tick):
+ playerID = curPackData.PlayerID
+ playerLV = curPackData.PlayerLV
+ isLogout = curPackData.IsLogouting
+ GameWorld.DebugLog('ViewCache### OnMGUpdatePlayerCache isLogout=%s' % isLogout, playerID)
+ isSaveAll = True # 是否保存所有数据
+ if isLogout:
+ #不需要保存离线数据的,直接删除缓存数据
+ if not IsSaveDBViewCache(playerID, playerLV):
+ DeleteViewCache(playerID)
+ return
+ isSaveAll = IsSaveAllViewCache(playerID)
+ GameWorld.DebugLog(" isSaveAll=%s" % isSaveAll, playerID)
+
+ curCache = FindViewCache(playerID, True)
+ if not curCache:
+ return
+ curCache.LV = curPackData.PlayerLV
+ curCache.OffTime = curPackData.OffTime
+ if isLogout:
+ curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)
+ if curPlayer:
+ curCache.GeTuiID = curPlayer.GetGeTuiClientID()
+ curCache.GeTuiIDSize = len(curCache.GeTuiID)
+
+ curCache.PropData = curPackData.PropData
+ curCache.PropDataSize = curPackData.PropDataSize
+ curCache.PlusData = curPackData.PlusData
+ curCache.PlusDataSize = curPackData.PlusDataSize
+
+ #GameWorld.DebugLog(" 更新Prop数据: size=%s, %s" % (curCache.PropDataSize, curCache.PropData), playerID)
+ #GameWorld.DebugLog(" 更新Plus数据: size=%s, %s" % (curCache.PlusDataSize, curCache.PlusData), playerID)
+
+ # 装备数据存储,不保存装备数据的话则清空
+ for classLV in xrange(1, 15 + 1):
+ if not isSaveAll:
+ itemDataSize = 0
+ itemData = ""
+ else:
+ itemDataSize = getattr(curPackData, "ItemDataSize%s" % classLV)
+ if not itemDataSize:
+ continue
+ itemData = getattr(curPackData, "ItemData%s" % classLV)
+ setattr(curCache, "ItemData%s" % classLV, itemData)
+ setattr(curCache, "ItemDataSize%s" % classLV, itemDataSize)
+ #GameWorld.DebugLog(" 更新Item数据: classLV=%s,size=%s, %s" % (classLV, itemDataSize, itemData), playerID)
+
+ #GameWorld.DebugLog(" %s" % curCache.outputString())
+ # 同步更新助战信息
+ if PlayerFBHelpBattle.IsInHelpBattleCheckInList(playerID):
+ #PropDataDict = json.loads(curCache.PropData)
+ PropDataDict = eval(curCache.PropData)
+ fightPower = PropDataDict.get("FightPower", 0)
+ familyID = PropDataDict.get("FamilyID", 0)
+ playerName = PropDataDict.get("Name", "")
+ PlayerFBHelpBattle.UpdateCheckInPlayerInfo(playerID, fightPower, familyID, playerName)
+
+ return
+
+#//04 02 地图查询玩家缓存数据#tagMGQueryPlayerCache
+#struct tagMGQueryPlayerCache
+#{
+# tagHead Head;
+# DWORD PlayerID; //玩家ID
+# DWORD FindPlayerID; //要查询的玩家ID
+# BYTE EquipClassLV; //大于0为查看指定境界阶装备信息, 0为查看默认信息
+#};
def OnMGQueryPlayerCache(routeIndex, mapID, curPackData, tick):
- GameWorld.DebugLog('ViewCache### OnMGQueryPlayerCache in')
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(curPackData.PlayerID)
findPlayerID = curPackData.FindPlayerID
- curCache = ViewCacheMgr.FindCache(findPlayerID)
+ equipClassLV = curPackData.EquipClassLV
+ curCache = FindViewCache(findPlayerID)
if not curCache:
PlayerControl.NotifyCode(curPlayer, "ViewPlayer_OffLine")
+ return
+
+ if equipClassLV:
+ itemData = ""
+ if hasattr(curCache, "ItemDataSize%s" % equipClassLV):
+ itemData = getattr(curCache, "ItemData%s" % equipClassLV)
+ sendPack = ChPyNetSendPack.tagSCPlayerEquipCacheResult()
+ sendPack.PlayerID = findPlayerID
+ sendPack.EquipClassLV = equipClassLV
+ sendPack.ItemData = itemData
+ sendPack.ItemDataSize = len(sendPack.ItemData)
+ NetPackCommon.SendFakePack(curPlayer, sendPack)
return
#回包客户端
sendPack = ChPyNetSendPack.tagSCQueryPlayerCacheResult()
sendPack.PlayerID = findPlayerID
- if not curCache:
- #失败回包 空数据
- GameWorld.DebugLog("PlayerCache## OnMGQueryPlayerCache %s no found"%findPlayerID)
- sendPack.PropData = ""
- sendPack.PropDataSize = len(sendPack.PropData)
- sendPack.ItemData = ""
- sendPack.ItemDataSize = len(sendPack.ItemData)
- sendPack.PlusData = ""
- sendPack.PlusDataSize = len(sendPack.PlusData)
- else:
- #成功回包 缓存数据
- sendPack.PropData = curCache.GetPropData()
- sendPack.PropDataSize = len(sendPack.PropData)
- sendPack.ItemData = GetItemData(curCache)
- sendPack.ItemDataSize = len(sendPack.ItemData)
- sendPack.PlusData = GetPlusData(curCache)
- sendPack.PlusDataSize = len(sendPack.PlusData)
-
+ sendPack.PropData = curCache.PropData
+ sendPack.PropDataSize = len(sendPack.PropData)
+ sendPack.PlusData = curCache.PlusData
+ sendPack.PlusDataSize = len(sendPack.PlusData)
NetPackCommon.SendFakePack(curPlayer, sendPack)
- GameWorld.DebugLog('ViewCache### OnMGQueryPlayerCache out')
+ #GameWorld.DebugLog('ViewCache### OnMGQueryPlayerCache out')
return
-
-## 获取玩家缓存模型装备信息
-def GetPlayerCacheEquipView(findPlayerID):
- curCache = ViewCacheMgr.FindCache(findPlayerID)
- if not curCache:
- return
-
- itemData = GetItemData(curCache)
- if not itemData:
- return
-
- playerEquipList = []
- equipItemList = eval(itemData)
- for equipItemDict in equipItemList:
- equipIndex = equipItemDict["ItemIndex"]
- if equipIndex not in ShareDefine.RoleEquipType:
- continue
-
- itemID = equipItemDict["ItemID"]
- if not itemID:
- continue
-
- playerEquipList.append([itemID, equipIndex, equipItemDict.get("StarLV", 0), 0])
-
- return playerEquipList
-
#===============================================================================
# //B3 06 查询玩家的简短信息 #tagCGViewPlayerShortInfo
@@ -256,7 +228,7 @@
answerPack = ChPyNetSendPack.tagGCAnswerPlayerShortInfo()
answerPack.Clear()
if not tagPlayer:
- curCache = ViewCacheMgr.FindCache(clientPack.PlayerID)
+ curCache = FindViewCache(clientPack.PlayerID)
if not curCache:
# 实在找不到设置为初始化数据
answerPack.PlayerID = clientPack.PlayerID
@@ -267,8 +239,7 @@
answerPack.OnlineType = ChConfig.Def_Offline
answerPack.ServerGroupID = 0
else:
- cacheDict = eval(curCache.GetPropData())
-
+ cacheDict = eval(curCache.PropData)
answerPack.PlayerID = clientPack.PlayerID
answerPack.PlayerName = cacheDict["Name"]
answerPack.Job = cacheDict["Job"]
@@ -276,7 +247,6 @@
answerPack.RealmLV = cacheDict["RealmLV"]
answerPack.OnlineType = ChConfig.Def_Offline
answerPack.ServerGroupID = cacheDict.get("ServerGroupID", 0)
-
else:
answerPack.PlayerID = clientPack.PlayerID
answerPack.PlayerName = tagPlayer.GetName()
@@ -293,17 +263,14 @@
def OnPlayerFamilyChange(playerID, familyID, familyName):
GameWorld.DebugLog("ViewCache->OnPlayerFamilyChange", playerID)
- curCache = ViewCacheMgr.FindCache(playerID)
+ curCache = FindViewCache(playerID)
if not curCache:
return
- PropData = eval(curCache.GetPropData())
+ PropData = eval(curCache.PropData)
PropData["FamilyID"] = familyID
PropData["FamilyName"] = familyName
- playerLV = PropData["LV"]
-
- PropData = json.dumps(PropData, ensure_ascii=False)
- ItemData = GetItemData(curCache)
- PlusData = GetPlusData(curCache)
- UpdatePlayerCache(playerID, PropData, ItemData, PlusData, True if playerLV > 150 else False)
+ PropData = json.dumps(PropData, ensure_ascii=False).replace(" ", "")
+ curCache.PropData = PropData
+ curCache.PropDataSize = len(curCache.PropData)
return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index de283ea..4773f9f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3445,7 +3445,7 @@
Def_PDict_OnlinePrizeNote = "OnlinePrizeNote%s" # 当日在线奖励领取信息,记录信息 参数天数
-
+Def_PDict_EquipViewCacheState = "EquipViewCacheState" # 本次上线是否同步过装备缓存
Def_PDict_DayOnlineTime = "OnlineTime" # 当日在线时长
Def_PDict_OnlineStartTick = "OnlineStartTime" # 在线计算时间
Def_PDict_LVAwardGetRecord = "LVAwardGetRecord" # 等级奖励领取信息记录,按二进制位标示
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChMapToGamePyPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChMapToGamePyPack.py
index 2a4c50f..a6c89e4 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChMapToGamePyPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChMapToGamePyPack.py
@@ -612,6 +612,7 @@
("SubCmd", c_ubyte),
("PlayerID", c_int), #玩家ID
("FindPlayerID", c_int), #要查询的玩家ID
+ ("EquipClassLV", c_ubyte), #大于0为查看指定境界阶装备信息, 0为查看默认信息
]
def __init__(self):
@@ -630,6 +631,7 @@
self.SubCmd = 0x02
self.PlayerID = 0
self.FindPlayerID = 0
+ self.EquipClassLV = 0
return
def GetLength(self):
@@ -643,13 +645,15 @@
Cmd:%s,
SubCmd:%s,
PlayerID:%d,
- FindPlayerID:%d
+ FindPlayerID:%d,
+ EquipClassLV:%d
'''\
%(
self.Cmd,
self.SubCmd,
self.PlayerID,
- self.FindPlayerID
+ self.FindPlayerID,
+ self.EquipClassLV
)
return DumpString
@@ -665,14 +669,42 @@
Head = tagHead()
PlayerID = 0 #(DWORD PlayerID)//玩家ID
PlayerLV = 0 #(WORD PlayerLV)//玩家等级
- PropDataSize = 0 #(DWORD PropDataSize)
- PropData = "" #(String PropData)//属性记录
- ItemDataSize = 0 #(DWORD ItemDataSize)
- ItemData = "" #(String ItemData)//物品记录
- PlusDataSize = 0 #(DWORD PlusDataSize)
- PlusData = "" #(String PlusData)//扩展记录
IsLogouting = 0 #(BYTE IsLogouting)//本次是否为下线同步
OffTime = 0 #(DWORD OffTime)// 下线时间戳
+ PropDataSize = 0 #(WORD PropDataSize)
+ PropData = "" #(String PropData)//属性记录
+ PlusDataSize = 0 #(WORD PlusDataSize)
+ PlusData = "" #(String PlusData)//扩展记录
+ ItemDataSize1 = 0 #(WORD ItemDataSize1)
+ ItemData1 = "" #(String ItemData1)//1阶装备数据
+ ItemDataSize2 = 0 #(WORD ItemDataSize2)
+ ItemData2 = "" #(String ItemData2)
+ ItemDataSize3 = 0 #(WORD ItemDataSize3)
+ ItemData3 = "" #(String ItemData3)
+ ItemDataSize4 = 0 #(WORD ItemDataSize4)
+ ItemData4 = "" #(String ItemData4)
+ ItemDataSize5 = 0 #(WORD ItemDataSize5)
+ ItemData5 = "" #(String ItemData5)
+ ItemDataSize6 = 0 #(WORD ItemDataSize6)
+ ItemData6 = "" #(String ItemData6)
+ ItemDataSize7 = 0 #(WORD ItemDataSize7)
+ ItemData7 = "" #(String ItemData7)
+ ItemDataSize8 = 0 #(WORD ItemDataSize8)
+ ItemData8 = "" #(String ItemData8)
+ ItemDataSize9 = 0 #(WORD ItemDataSize9)
+ ItemData9 = "" #(String ItemData9)
+ ItemDataSize10 = 0 #(WORD ItemDataSize10)
+ ItemData10 = "" #(String ItemData10)
+ ItemDataSize11 = 0 #(WORD ItemDataSize11)
+ ItemData11 = "" #(String ItemData11)
+ ItemDataSize12 = 0 #(WORD ItemDataSize12)
+ ItemData12 = "" #(String ItemData12)
+ ItemDataSize13 = 0 #(WORD ItemDataSize13)
+ ItemData13 = "" #(String ItemData13)
+ ItemDataSize14 = 0 #(WORD ItemDataSize14)
+ ItemData14 = "" #(String ItemData14)
+ ItemDataSize15 = 0 #(WORD ItemDataSize15)
+ ItemData15 = "" #(String ItemData15)
data = None
def __init__(self):
@@ -686,14 +718,42 @@
_pos = self.Head.ReadData(_lpData, _pos)
self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
self.PlayerLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
- self.PropDataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.PropData,_pos = CommFunc.ReadString(_lpData, _pos,self.PropDataSize)
- self.ItemDataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.ItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize)
- self.PlusDataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos)
- self.PlusData,_pos = CommFunc.ReadString(_lpData, _pos,self.PlusDataSize)
self.IsLogouting,_pos = CommFunc.ReadBYTE(_lpData, _pos)
self.OffTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.PropDataSize,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.PropData,_pos = CommFunc.ReadString(_lpData, _pos,self.PropDataSize)
+ self.PlusDataSize,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.PlusData,_pos = CommFunc.ReadString(_lpData, _pos,self.PlusDataSize)
+ self.ItemDataSize1,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ItemData1,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize1)
+ self.ItemDataSize2,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ItemData2,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize2)
+ self.ItemDataSize3,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ItemData3,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize3)
+ self.ItemDataSize4,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ItemData4,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize4)
+ self.ItemDataSize5,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ItemData5,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize5)
+ self.ItemDataSize6,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ItemData6,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize6)
+ self.ItemDataSize7,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ItemData7,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize7)
+ self.ItemDataSize8,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ItemData8,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize8)
+ self.ItemDataSize9,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ItemData9,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize9)
+ self.ItemDataSize10,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ItemData10,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize10)
+ self.ItemDataSize11,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ItemData11,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize11)
+ self.ItemDataSize12,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ItemData12,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize12)
+ self.ItemDataSize13,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ItemData13,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize13)
+ self.ItemDataSize14,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ItemData14,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize14)
+ self.ItemDataSize15,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ItemData15,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize15)
return _pos
def Clear(self):
@@ -703,14 +763,42 @@
self.Head.SubCmd = 0x01
self.PlayerID = 0
self.PlayerLV = 0
- self.PropDataSize = 0
- self.PropData = ""
- self.ItemDataSize = 0
- self.ItemData = ""
- self.PlusDataSize = 0
- self.PlusData = ""
self.IsLogouting = 0
self.OffTime = 0
+ self.PropDataSize = 0
+ self.PropData = ""
+ self.PlusDataSize = 0
+ self.PlusData = ""
+ self.ItemDataSize1 = 0
+ self.ItemData1 = ""
+ self.ItemDataSize2 = 0
+ self.ItemData2 = ""
+ self.ItemDataSize3 = 0
+ self.ItemData3 = ""
+ self.ItemDataSize4 = 0
+ self.ItemData4 = ""
+ self.ItemDataSize5 = 0
+ self.ItemData5 = ""
+ self.ItemDataSize6 = 0
+ self.ItemData6 = ""
+ self.ItemDataSize7 = 0
+ self.ItemData7 = ""
+ self.ItemDataSize8 = 0
+ self.ItemData8 = ""
+ self.ItemDataSize9 = 0
+ self.ItemData9 = ""
+ self.ItemDataSize10 = 0
+ self.ItemData10 = ""
+ self.ItemDataSize11 = 0
+ self.ItemData11 = ""
+ self.ItemDataSize12 = 0
+ self.ItemData12 = ""
+ self.ItemDataSize13 = 0
+ self.ItemData13 = ""
+ self.ItemDataSize14 = 0
+ self.ItemData14 = ""
+ self.ItemDataSize15 = 0
+ self.ItemData15 = ""
return
def GetLength(self):
@@ -718,14 +806,42 @@
length += self.Head.GetLength()
length += 4
length += 2
- length += 4
- length += len(self.PropData)
- length += 4
- length += len(self.ItemData)
- length += 4
- length += len(self.PlusData)
length += 1
length += 4
+ length += 2
+ length += len(self.PropData)
+ length += 2
+ length += len(self.PlusData)
+ length += 2
+ length += len(self.ItemData1)
+ length += 2
+ length += len(self.ItemData2)
+ length += 2
+ length += len(self.ItemData3)
+ length += 2
+ length += len(self.ItemData4)
+ length += 2
+ length += len(self.ItemData5)
+ length += 2
+ length += len(self.ItemData6)
+ length += 2
+ length += len(self.ItemData7)
+ length += 2
+ length += len(self.ItemData8)
+ length += 2
+ length += len(self.ItemData9)
+ length += 2
+ length += len(self.ItemData10)
+ length += 2
+ length += len(self.ItemData11)
+ length += 2
+ length += len(self.ItemData12)
+ length += 2
+ length += len(self.ItemData13)
+ length += 2
+ length += len(self.ItemData14)
+ length += 2
+ length += len(self.ItemData15)
return length
@@ -734,14 +850,42 @@
data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
data = CommFunc.WriteDWORD(data, self.PlayerID)
data = CommFunc.WriteWORD(data, self.PlayerLV)
- data = CommFunc.WriteDWORD(data, self.PropDataSize)
- data = CommFunc.WriteString(data, self.PropDataSize, self.PropData)
- data = CommFunc.WriteDWORD(data, self.ItemDataSize)
- data = CommFunc.WriteString(data, self.ItemDataSize, self.ItemData)
- data = CommFunc.WriteDWORD(data, self.PlusDataSize)
- data = CommFunc.WriteString(data, self.PlusDataSize, self.PlusData)
data = CommFunc.WriteBYTE(data, self.IsLogouting)
data = CommFunc.WriteDWORD(data, self.OffTime)
+ data = CommFunc.WriteWORD(data, self.PropDataSize)
+ data = CommFunc.WriteString(data, self.PropDataSize, self.PropData)
+ data = CommFunc.WriteWORD(data, self.PlusDataSize)
+ data = CommFunc.WriteString(data, self.PlusDataSize, self.PlusData)
+ data = CommFunc.WriteWORD(data, self.ItemDataSize1)
+ data = CommFunc.WriteString(data, self.ItemDataSize1, self.ItemData1)
+ data = CommFunc.WriteWORD(data, self.ItemDataSize2)
+ data = CommFunc.WriteString(data, self.ItemDataSize2, self.ItemData2)
+ data = CommFunc.WriteWORD(data, self.ItemDataSize3)
+ data = CommFunc.WriteString(data, self.ItemDataSize3, self.ItemData3)
+ data = CommFunc.WriteWORD(data, self.ItemDataSize4)
+ data = CommFunc.WriteString(data, self.ItemDataSize4, self.ItemData4)
+ data = CommFunc.WriteWORD(data, self.ItemDataSize5)
+ data = CommFunc.WriteString(data, self.ItemDataSize5, self.ItemData5)
+ data = CommFunc.WriteWORD(data, self.ItemDataSize6)
+ data = CommFunc.WriteString(data, self.ItemDataSize6, self.ItemData6)
+ data = CommFunc.WriteWORD(data, self.ItemDataSize7)
+ data = CommFunc.WriteString(data, self.ItemDataSize7, self.ItemData7)
+ data = CommFunc.WriteWORD(data, self.ItemDataSize8)
+ data = CommFunc.WriteString(data, self.ItemDataSize8, self.ItemData8)
+ data = CommFunc.WriteWORD(data, self.ItemDataSize9)
+ data = CommFunc.WriteString(data, self.ItemDataSize9, self.ItemData9)
+ data = CommFunc.WriteWORD(data, self.ItemDataSize10)
+ data = CommFunc.WriteString(data, self.ItemDataSize10, self.ItemData10)
+ data = CommFunc.WriteWORD(data, self.ItemDataSize11)
+ data = CommFunc.WriteString(data, self.ItemDataSize11, self.ItemData11)
+ data = CommFunc.WriteWORD(data, self.ItemDataSize12)
+ data = CommFunc.WriteString(data, self.ItemDataSize12, self.ItemData12)
+ data = CommFunc.WriteWORD(data, self.ItemDataSize13)
+ data = CommFunc.WriteString(data, self.ItemDataSize13, self.ItemData13)
+ data = CommFunc.WriteWORD(data, self.ItemDataSize14)
+ data = CommFunc.WriteString(data, self.ItemDataSize14, self.ItemData14)
+ data = CommFunc.WriteWORD(data, self.ItemDataSize15)
+ data = CommFunc.WriteString(data, self.ItemDataSize15, self.ItemData15)
return data
def OutputString(self):
@@ -749,27 +893,83 @@
Head:%s,
PlayerID:%d,
PlayerLV:%d,
+ IsLogouting:%d,
+ OffTime:%d,
PropDataSize:%d,
PropData:%s,
- ItemDataSize:%d,
- ItemData:%s,
PlusDataSize:%d,
PlusData:%s,
- IsLogouting:%d,
- OffTime:%d
+ ItemDataSize1:%d,
+ ItemData1:%s,
+ ItemDataSize2:%d,
+ ItemData2:%s,
+ ItemDataSize3:%d,
+ ItemData3:%s,
+ ItemDataSize4:%d,
+ ItemData4:%s,
+ ItemDataSize5:%d,
+ ItemData5:%s,
+ ItemDataSize6:%d,
+ ItemData6:%s,
+ ItemDataSize7:%d,
+ ItemData7:%s,
+ ItemDataSize8:%d,
+ ItemData8:%s,
+ ItemDataSize9:%d,
+ ItemData9:%s,
+ ItemDataSize10:%d,
+ ItemData10:%s,
+ ItemDataSize11:%d,
+ ItemData11:%s,
+ ItemDataSize12:%d,
+ ItemData12:%s,
+ ItemDataSize13:%d,
+ ItemData13:%s,
+ ItemDataSize14:%d,
+ ItemData14:%s,
+ ItemDataSize15:%d,
+ ItemData15:%s
'''\
%(
self.Head.OutputString(),
self.PlayerID,
self.PlayerLV,
+ self.IsLogouting,
+ self.OffTime,
self.PropDataSize,
self.PropData,
- self.ItemDataSize,
- self.ItemData,
self.PlusDataSize,
self.PlusData,
- self.IsLogouting,
- self.OffTime
+ self.ItemDataSize1,
+ self.ItemData1,
+ self.ItemDataSize2,
+ self.ItemData2,
+ self.ItemDataSize3,
+ self.ItemData3,
+ self.ItemDataSize4,
+ self.ItemData4,
+ self.ItemDataSize5,
+ self.ItemData5,
+ self.ItemDataSize6,
+ self.ItemData6,
+ self.ItemDataSize7,
+ self.ItemData7,
+ self.ItemDataSize8,
+ self.ItemData8,
+ self.ItemDataSize9,
+ self.ItemData9,
+ self.ItemDataSize10,
+ self.ItemData10,
+ self.ItemDataSize11,
+ self.ItemData11,
+ self.ItemDataSize12,
+ self.ItemData12,
+ self.ItemDataSize13,
+ self.ItemData13,
+ self.ItemDataSize14,
+ self.ItemData14,
+ self.ItemDataSize15,
+ self.ItemData15
)
return DumpString
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index 1d77aca..5c15b7e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -5606,6 +5606,7 @@
("Cmd", c_ubyte),
("SubCmd", c_ubyte),
("PlayerID", c_int),
+ ("EquipClassLV", c_ubyte), #大于0为查看指定境界阶装备信息, 0为查看默认信息
]
def __init__(self):
@@ -5623,6 +5624,7 @@
self.Cmd = 0xA2
self.SubCmd = 0x12
self.PlayerID = 0
+ self.EquipClassLV = 0
return
def GetLength(self):
@@ -5635,12 +5637,14 @@
DumpString = '''//A2 12 查看玩家详细信息//tagCMViewPlayerInfo:
Cmd:%s,
SubCmd:%s,
- PlayerID:%d
+ PlayerID:%d,
+ EquipClassLV:%d
'''\
%(
self.Cmd,
self.SubCmd,
- self.PlayerID
+ self.PlayerID,
+ self.EquipClassLV
)
return DumpString
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
index a4dcc0b..3b419c2 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
@@ -171,6 +171,15 @@
#if isRefreshEquipBuff:
# __RefreshPlayerAllEquipBuff(curPlayer)
+
+ if classLV:
+ playerID = curPlayer.GetPlayerID()
+ if playerID not in PyGameData.g_equipChangeClassLVInfo:
+ PyGameData.g_equipChangeClassLVInfo[playerID] = []
+ classLVList = PyGameData.g_equipChangeClassLVInfo[playerID]
+ if classLV not in classLVList:
+ classLVList.append(classLV)
+ #GameWorld.DebugLog("添加装备缓存变更阶: classLV=%s, %s" % (classLV, classLVList), playerID)
return
## 刷新所有装备对人物属性的改变
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
index 5f798dc..432b1aa 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -1241,6 +1241,7 @@
PyGameData.g_zhuXianSkillReducePerDict.pop(playerID, None)
PyGameData.g_playerFuncAttrDict.pop(playerID, None)
PyGameData.g_playerEquipPartAttrDict.pop(playerID, None)
+ PyGameData.g_equipChangeClassLVInfo.pop(playerID, None)
return
##更新保存玩家在线时间
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py
index 4d3572c..d4b43cf 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py
@@ -30,59 +30,134 @@
import ChEquip
import FBCommon
import BossHurtMng
+import ItemCommon
+import PyGameData
+import PlayerTJG
import time
import json
Def_Process_Tick = "ProcessPlayerCache"
-##玩家下线同步
-# @param curPlayer, tick
-# @return None
+
def OnPlayerLogOut(curPlayer, tick):
- #发送通知GameServer 缓存数据
- curPlayer.SetDict(Def_Process_Tick, tick)
- UpdateGameServerPlayerCache(curPlayer, tick, True)
-
+ ##玩家下线同步
+ UpdateGameServerPlayerCache(curPlayer, tick, True)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipViewCacheState, 0)
return
-##玩家在线定时同步
-# @param curPlayer, tick
-# @return None
def ProcessCache(curPlayer, tick):
- if tick - curPlayer.GetDictByKey(Def_Process_Tick) > 5*60*1000:
- UpdateGameServerPlayerCache(curPlayer, tick, False)
+ ##玩家在线定时同步
+ lastTick = curPlayer.GetDictByKey(Def_Process_Tick)
+ if not lastTick:
curPlayer.SetDict(Def_Process_Tick, tick)
+ return
+ if tick - lastTick < 5 * 60 * 1000: # 同步玩家缓存间隔
+ return
+ UpdateGameServerPlayerCache(curPlayer, tick, False)
return
##更新玩家当前详细信息到GameServer
# @param curPlayer, tick
# @return None
-def UpdateGameServerPlayerCache(curPlayer, tick, IsLogouting = False):
- GameWorld.DebugLog('ViewCache### UpdateGameServerPlayerCache in')
+def UpdateGameServerPlayerCache(curPlayer, tick, IsLogouting=False):
+ if PlayerTJG.GetIsTJG(curPlayer):
+ # 脱机不处理
+ return
+ curPlayer.SetDict(Def_Process_Tick, tick)
#获取当前玩家缓存数据
- curPlayerPropData, curPlayerItemData, curPlayerPlusData = GetPlayerCache(curPlayer)
+ PropData, PlusData = GetPlayerPropPlusCache(curPlayer)
+ itemDataDict = __GetPlayerItemDataCache(curPlayer)
#同步发送到GameServer
sendPack = ChMapToGamePyPack.tagMGUpdatePlayerCache()
sendPack.PlayerID = curPlayer.GetPlayerID()
sendPack.PlayerLV = curPlayer.GetLV()
- sendPack.PropData = curPlayerPropData
- sendPack.PropDataSize = len(curPlayerPropData)
- sendPack.ItemData = curPlayerItemData
- sendPack.ItemDataSize = len(curPlayerItemData)
- sendPack.PlusData = curPlayerPlusData
- sendPack.PlusDataSize = len(curPlayerPlusData)
sendPack.IsLogouting = IsLogouting #通知本次同步是否下线前保存
sendPack.OffTime = int(time.time()) # 最后一次发送即当做离线时间
+ sendPack.PropData = PropData
+ sendPack.PropDataSize = len(sendPack.PropData)
+ sendPack.PlusData = PlusData
+ sendPack.PlusDataSize = len(sendPack.PlusData)
+ for classLV, itemData in itemDataDict.items():
+ setattr(sendPack, "ItemData%s" % classLV, itemData)
+ setattr(sendPack, "ItemDataSize%s" % classLV, len(itemData))
+ #GameWorld.DebugLog("同步缓存: %s" % sendPack.OutputString())
NetPackCommon.SendPyPackToGameServer(sendPack)
- GameWorld.DebugLog('ViewCache### UpdateGameServerPlayerCache out')
return
-## 获取玩家数据缓存
-# @param curPlayer
-# @return None
-def GetPlayerCache(curPlayer):
- #-----------
+def __GetPlayerItemDataCache(curPlayer):
+ ## 装备及装备位养成缓存,由于装备位比较多,所以按阶同步,重登第一次同步所有阶
+
+ if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipViewCacheState):
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipViewCacheState, 1)
+ needSyncClassLVList = xrange(1, IpyGameDataPY.GetFuncCfg('EquipMaxClasslv') + 1)
+ else:
+ playerID = curPlayer.GetPlayerID()
+ needSyncClassLVList = PyGameData.g_equipChangeClassLVInfo.pop(playerID, [])
+
+ itemDataDict = {}
+ for classLV in needSyncClassLVList:
+ itemDataDict[classLV] = __GetPlayerEquipClassDataCache(curPlayer, classLV)
+
+ return itemDataDict
+
+def __GetPlayerEquipClassDataCache(curPlayer, classLV):
+ ## 获取境界阶装备缓存数据
+ ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition('EquipPlaceIndexMap', {'ClassLV':classLV}, True)
+ if not ipyDataList:
+ return "{}"
+
+ packType = IPY_GameWorld.rptEquip
+ equipPack = curPlayer.GetItemManager().GetPack(packType)
+ classItemDataDict = {}
+ for ipyData in ipyDataList:
+ index = ipyData.GetGridIndex()
+
+ curEquip = equipPack.GetAt(index)
+ if not curEquip or curEquip.IsEmpty():
+ continue
+
+ itemDict = {}
+ itemDict["ItemID"] = curEquip.GetItemTypeID()
+ userData = curEquip.GetUserData()
+ if userData and userData != "{}":
+ itemDict["UserData"] = userData
+
+ classItemDataDict[index] = itemDict
+ classLV = ItemCommon.GetItemClassLV(curEquip)
+ if not classLV:
+ continue
+
+ #部位升星数据
+ equipStar = ChEquip.GetEquipPartStarByRank(curPlayer, index, curEquip)
+ if equipStar:
+ itemDict["Star"] = equipStar
+
+ #部位强化数据
+ equipPartPlusLV = ChEquip.GetEquipPartPlusLVByRank(curPlayer, packType, index, curEquip)
+ equipPartPlusEvolveLV = ChEquip.GetEquipPartPlusEvolveLVByEquip(curPlayer, packType, index, curEquip)
+ if equipPartPlusLV:
+ itemDict["PlusLV"] = equipPartPlusLV
+ if equipPartPlusEvolveLV:
+ itemDict["EvolveLV"] = equipPartPlusEvolveLV
+
+ #部位宝石数据
+ stoneIDList = Operate_EquipStone.GetEquipIndexStoneIDList(curPlayer, index)
+ if stoneIDList and stoneIDList.count(0) != len(stoneIDList):
+ itemDict["Stone"] = stoneIDList
+
+ #部位洗练数据
+ washLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashLV % index) + 1
+ valueList = []
+ for attrNum in xrange(1, Operate_EquipWash.Def_EquipWashMaxAttrCount + 1):
+ value = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashValue % (index, attrNum))
+ valueList.append(value)
+ if valueList and valueList.count(0) != len(valueList):
+ itemDict["Wash"] = {"LV":washLV, "Value":valueList}
+
+ return json.dumps(classItemDataDict, ensure_ascii=False).replace(" ", "")
+
+def GetPlayerPropPlusCache(curPlayer):
#玩家属性缓存
curPlayerPropDict = {}
curPlayerPropDict["AccID"] = curPlayer.GetAccID()
@@ -96,6 +171,7 @@
curPlayerPropDict["FightPower"] = curPlayer.GetFightPower()
curPlayerPropDict["AppID"] = GameWorld.GetPlayerPlatform(curPlayer)
curPlayerPropDict["EquipShowSwitch"] = curPlayer.GetEquipShowSwitch()
+ curPlayerPropDict["EquipShowID"] = __GetEquipShowIDList(curPlayer)
curPlayerPropDict["ServerGroupID"] = PlayerControl.GetPlayerServerGroupID(curPlayer)
#仙魔之争所需属性
curPlayerPropDict["MinAtk"] = curPlayer.GetMinAtk()
@@ -110,21 +186,18 @@
# 封魔坛剩余次数
enterCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_EnterFbCntDay % ChConfig.Def_FBMapID_SealDemon)
maxCnt = FBCommon.GetEnterFBMaxCnt(curPlayer, ChConfig.Def_FBMapID_SealDemon)
- curPlayerPropDict['CntMark_%s'%ChConfig.Def_FBMapID_SealDemon] = max(maxCnt - enterCnt, 0)
+ curPlayerPropDict['CntMark_%s' % ChConfig.Def_FBMapID_SealDemon] = max(maxCnt - enterCnt, 0)
# 诛仙BOSS剩余次数
enterCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_EnterFbCntDay % ChConfig.Def_FBMapID_ZhuXianBoss)
maxCnt = FBCommon.GetEnterFBMaxCnt(curPlayer, ChConfig.Def_FBMapID_ZhuXianBoss)
- curPlayerPropDict['CntMark_%s'%ChConfig.Def_FBMapID_ZhuXianBoss] = max(maxCnt - enterCnt, 0)
+ curPlayerPropDict['CntMark_%s' % ChConfig.Def_FBMapID_ZhuXianBoss] = max(maxCnt - enterCnt, 0)
# 世界BOSS剩余次数
- curPlayerPropDict['CntMark_%s'%ShareDefine.Def_Boss_Func_World] = BossHurtMng.GetCanKillBossCnt(curPlayer, ShareDefine.Def_Boss_Func_World)
+ curPlayerPropDict['CntMark_%s' % ShareDefine.Def_Boss_Func_World] = BossHurtMng.GetCanKillBossCnt(curPlayer, ShareDefine.Def_Boss_Func_World)
# BOSS之家剩余次数
- curPlayerPropDict['CntMark_%s'%ShareDefine.Def_Boss_Func_Home] = BossHurtMng.GetCanKillBossCnt(curPlayer, ShareDefine.Def_Boss_Func_Home)
+ curPlayerPropDict['CntMark_%s' % ShareDefine.Def_Boss_Func_Home] = BossHurtMng.GetCanKillBossCnt(curPlayer, ShareDefine.Def_Boss_Func_Home)
# 神兽BOSS剩余次数
- curPlayerPropDict['CntMark_%s'%ShareDefine.Def_Boss_Func_Dogz] = BossHurtMng.GetCanKillBossCnt(curPlayer, ShareDefine.Def_Boss_Func_Dogz)
-
- #-----------
- #装备数据打包缓存
- curEquipItemList = __GetPackEquipCacheList(curPlayer, IPY_GameWorld.rptEquip)
+ curPlayerPropDict['CntMark_%s' % ShareDefine.Def_Boss_Func_Dogz] = BossHurtMng.GetCanKillBossCnt(curPlayer, ShareDefine.Def_Boss_Func_Dogz)
+
#-----------
#扩展属性缓存
curPlayerPlusDict = {}
@@ -136,17 +209,6 @@
if fightPower:
fightPowerDict["%s" % mfpType] = fightPower
curPlayerPlusDict["FightPowerDict"] = fightPowerDict
-
- #翅膀信息在翅膀装备位对应装备信息
-
- #部位强化数据
- curPlayerPlusDict["EquipPartStarLV"] = __GetEquipPartPlusLVInfo(curPlayer)
-
- #部位宝石数据
- curPlayerPlusDict["EquipPartStone"] = __GetEquipPartStoneInfo(curPlayer)
-
- #部位洗练数据
- curPlayerPlusDict["EquipWash"] = __GetEquipWashInfo(curPlayer)
#灵宠数据
curPlayerPlusDict["Pet"] = __GetPetInfo(curPlayer)
@@ -166,57 +228,21 @@
#魂石、丹药使用个数
curPlayerPlusDict["Fruit"] = PlayerAttrFruit.GetAttrFruitEatCntDict(curPlayer)
- #-----------
- curPlayerPropData = json.dumps(curPlayerPropDict, ensure_ascii=False)
- curPlayerItemData = json.dumps(curEquipItemList, ensure_ascii=False)
- curPlayerPlusData = json.dumps(__RemoveEmptyDataKey(curPlayerPlusDict), ensure_ascii=False)
- return (curPlayerPropData, curPlayerItemData, curPlayerPlusData)
+ PropData = json.dumps(curPlayerPropDict, ensure_ascii=False).replace(" ", "")
+ PlusData = json.dumps(curPlayerPlusDict, ensure_ascii=False).replace(" ", "")
+ return PropData, PlusData
-def __RemoveEmptyDataKey(dataDict):
- for key in dataDict.keys():
- if not dataDict[key]:
- dataDict.pop(key)
- return dataDict
-
-## 公共部位强化星级信息{部位索引:强化等级, ...}
-def __GetEquipPartPlusLVInfo(curPlayer):
- pType = IPY_GameWorld.rptEquip # 暂时只取装备背包,之后有扩展再修改
- indexList = ChConfig.Pack_EquipPart_CanPlusStar[pType]
- starLVInfoDict = {}
- for i in indexList:
- starLV = ChEquip.GetEquipPartPlusLV(curPlayer, pType, i)
- if starLV:
- starLVInfoDict[i] = starLV
- return starLVInfoDict
-
-## 公共部位宝石信息{部位索引:[宝石ID, ...], ...}
-def __GetEquipPartStoneInfo(curPlayer):
- stoneInfoDict = {}
- stoneCanPlaceList = Operate_EquipStone.GetAllStoneEquipIndexList() # 获得所有可镶嵌宝石装备位
- for equipIndex in stoneCanPlaceList:
- stoneIDList = Operate_EquipStone.GetEquipIndexStoneIDList(curPlayer, equipIndex)
- if stoneIDList and stoneIDList.count(0) != len(stoneIDList):
- stoneInfoDict[equipIndex] = stoneIDList
- return stoneInfoDict
-
-## 公共部位洗练信息[{"Place":部位索引, "LV":洗练等级, "Value":[洗练值1,洗练值2,... ]}, ...]
-def __GetEquipWashInfo(curPlayer):
- stoneInfoList = []
- washPlaceList = Operate_EquipWash.GetAllEquipWashPlace() # 获取所有可洗练的装备位
- for place in washPlaceList:
- washLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashLV % place) + 1
- valueList = []
- hasValue = False
- for attrNum in xrange(1, Operate_EquipWash.Def_EquipWashMaxAttrCount + 1):
- value = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashValue % (place, attrNum))
- if value:
- valueList.append(value)
- hasValue = True
-
- if hasValue:
- stoneInfoList.append({"Place":place, "LV":washLV, "Value":valueList})
- return stoneInfoList
-
+def __GetEquipShowIDList(curPlayer):
+ ## 获取外观装备ID列表
+ equipShowIDList = []
+ indexList = range(10) + PlayerControl.GetFaceEquipIndexList(curPlayer) # 暂写死前10个物品 + 展示的境界装备部位
+ equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
+ for index in indexList:
+ curEquip = equipPack.GetAt(index)
+ if not curEquip or curEquip.IsEmpty():
+ continue
+ equipShowIDList.append(curEquip.GetItemTypeID())
+ return equipShowIDList
## 灵宠信息
def __GetPetInfo(curPlayer):
@@ -251,7 +277,7 @@
def __GetGodWeaponInfo(curPlayer):
godWeaponDict = {}
ipyDataMgr = IpyGameDataPY.IPY_Data()
- maxType = ipyDataMgr.GetGodWeaponByIndex(ipyDataMgr.GetGodWeaponCount()-1).GetType()
+ maxType = ipyDataMgr.GetGodWeaponByIndex(ipyDataMgr.GetGodWeaponCount() - 1).GetType()
for gwType in xrange(1, maxType + 1):
gwLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GodWeaponLV % gwType)
if gwLV:
@@ -283,65 +309,49 @@
mwDict[treasureType] = mwDict.get(treasureType, 0) + 1
return mwDict
-
-## 获取玩家背包类型里的装备信息缓存列表
-def __GetPackEquipCacheList(curPlayer, packType):
- equipPack = curPlayer.GetItemManager().GetPack(packType)
- itemList = []
- for index in xrange(equipPack.GetCount()):
- curEquip = equipPack.GetAt(index)
- if not curEquip or curEquip.IsEmpty():
- continue
- itemDict = {}
- itemDict["ItemIndex"] = curEquip.GetItemPlaceIndex()
- itemDict["ItemID"] = curEquip.GetItemTypeID()
- itemDict["IsAuctionItem"] = int(ItemControler.GetIsAuctionItem(curEquip))
- #itemDict["IsSuite"] = int(curEquip.GetIsSuite())
- userData = curEquip.GetUserData()
- if userData and userData != "{}":
- itemDict["UserData"] = userData
- itemList.append(__RemoveEmptyDataKey(itemDict))
- return itemList
-
-##//A2 12 查看玩家详细信息#tagCMViewPlayerInfo
-# @param curPlayer, tick
-# @return None
+#//A2 12 查看玩家详细信息#tagCMViewPlayerInfo
+#struct tagCMViewPlayerInfo
+#{
+# tagHead Head;
+# DWORD PlayerID;
+# BYTE EquipClassLV; //大于0为查看指定境界阶装备信息, 0为查看默认信息
+#};
def OnCMViewPlayerInfo(index, clientPack, tick):
- GameWorld.DebugLog('ViewCache### OnCMViewPlayerInfo in')
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
findPlayerID = clientPack.PlayerID
+ equipClassLV = clientPack.EquipClassLV
findPlayer = GameWorld.GetPlayerManager().FindPlayerByID(findPlayerID)
if findPlayer:
+ if equipClassLV:
+ sendPack = ChPyNetSendPack.tagSCPlayerEquipCacheResult()
+ sendPack.PlayerID = findPlayerID
+ sendPack.EquipClassLV = equipClassLV
+ sendPack.ItemData = __GetPlayerEquipClassDataCache(curPlayer, equipClassLV)
+ sendPack.ItemDataSize = len(sendPack.ItemData)
+ NetPackCommon.SendFakePack(curPlayer, sendPack)
+ return
+
#本地图玩家直接返回
- curPlayerPropData, curPlayerItemData, curPlayerPlusData = GetPlayerCache(findPlayer)
- #GameWorld.DebugLog("PropData=%s" % curPlayerPropData)
- #GameWorld.DebugLog("ItemData=%s" % curPlayerItemData)
- #GameWorld.DebugLog("PlusData=%s" % curPlayerPlusData)
+ PropData, PlusData = GetPlayerPropPlusCache(curPlayer)
sendPack = ChPyNetSendPack.tagSCQueryPlayerCacheResult()
sendPack.PlayerID = findPlayerID
- sendPack.PropData = curPlayerPropData
- sendPack.PropDataSize = len( sendPack.PropData)
- sendPack.ItemData = curPlayerItemData
+ sendPack.PropData = PropData
+ sendPack.PropDataSize = len(sendPack.PropData)
+ sendPack.ItemData = ""
sendPack.ItemDataSize = len(sendPack.ItemData)
- sendPack.PlusData = curPlayerPlusData
+ sendPack.PlusData = PlusData
sendPack.PlusDataSize = len(sendPack.PlusData)
-
- GameWorld.DebugLog('ViewCache### OnCMViewPlayerInfo len: %s , sendPack: %s'%(sendPack.GetLength(),sendPack.OutputString()))
+ #GameWorld.DebugLog('ViewCache### OnCMViewPlayerInfo len: %s , sendPack: %s' % (sendPack.GetLength(), sendPack.OutputString()))
NetPackCommon.SendFakePack(curPlayer, sendPack)
- GameWorld.DebugLog('ViewCache### OnCMViewPlayerInfo Return MapPlayerInfo out')
return
#发送到GameServer去查询
sendPack = ChMapToGamePyPack.tagMGQueryPlayerCache()
sendPack.PlayerID = curPlayer.GetPlayerID()
sendPack.FindPlayerID = findPlayerID
+ sendPack.EquipClassLV = equipClassLV
NetPackCommon.SendPyPackToGameServer(sendPack)
- GameWorld.DebugLog('ViewCache### OnCMViewPlayerInfo SendToGameServer Query out')
return
-
-
-
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
index cec492f..98c193b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
@@ -24,6 +24,7 @@
g_refreshAttrBillboardFunc = [] # 刷属性后需要触发的同步排行榜函数列表
g_playerFuncAttrDict = {} # 玩家功能点属性 {playerID:{funcIndex:属性列表, ...}, ...}
g_playerEquipPartAttrDict = {} # 玩家装备位养成属性 {playerID:{阶:[强化属性列表, 宝石属性列表, 洗练属性列表], ...}, ...}
+g_equipChangeClassLVInfo = {} # 玩家装备变更的装备阶信息 {playerID:[classLV, ...], ...}
g_filterEquipDict = {} # 按装备条件过滤的装备ID,不分职业 {"classLV_color_star":{(itemJob,itemPlace):itemID, ...}, ...}
--
Gitblit v1.8.0