From 776cf3759b9801f3795ee975cd77078f505b90d6 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期六, 06 一月 2024 14:49:08 +0800
Subject: [PATCH] 10071 【后端】灵宠改版

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py |   60 +++++++++++++++++++++++++++---------------------------------
 1 files changed, 27 insertions(+), 33 deletions(-)

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 fa6ba4e..4196229 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py
@@ -35,6 +35,7 @@
 import PyGameData
 import PlayerTJG
 import SkillShell
+import PlayerPet
 import GameObj
 
 import time
@@ -161,6 +162,8 @@
     return json.dumps(classItemDataDict, ensure_ascii=False).replace(" ", "")
 
 def UpdPlayerPropPlusCache(curPlayer):
+    if not curPlayer:
+        return
     curPlayerPropDict = {}
     curPlayerPropDict["AccID"] = curPlayer.GetAccID()
     curPlayerPropDict["LV"] = curPlayer.GetLV()
@@ -247,9 +250,12 @@
     curPlayerPlusDict["TotalStoneLV"] = Operate_EquipStone.GetTotalStoneLV(curPlayer)
     curPlayerPlusDict["TotalEquipWashLV"] = Operate_EquipWash.GetTotalEquipWashLV(curPlayer)
     #主动技能总等级
-    curPlayerPlusDict["TotalSkillLV"] = SkillShell.GetAllSkillLV(curPlayer, ChConfig.Def_SkillFuncType_FbSkill)
+    skillInfo = SkillShell.GetAllSkillInfo(curPlayer, [ChConfig.Def_SkillFuncType_FbSkill, ChConfig.Def_SkillFuncType_NormalAttack])
+    curPlayerPlusDict["SkillInfo"] = skillInfo
+    curPlayerPlusDict["TotalSkillLV"] = sum(skillInfo.get(ChConfig.Def_SkillFuncType_FbSkill, {}).values())
+    
     #灵宠数据
-    curPlayerPlusDict["Pet"] = __GetPetInfo(curPlayer)
+    curPlayerPlusDict["Pet"] = PlayerPet.GetPetCacheInfo(curPlayer)
     
     #坐骑数据
     curPlayerPlusDict["Horse"] = __GetHorseInfo(curPlayer)
@@ -273,16 +279,23 @@
 def GetPlayerPropPlusCache(curPlayer):
     #玩家属性缓存
     UpdPlayerPropPlusCache(curPlayer)
-    return GetPlayerPropPlusCacheByID(curPlayer.GetPlayerID())
+    return GetPlayerPropPlusCacheByID(curPlayer.GetPlayerID(), False)
 
-def GetPlayerPropPlusCacheByID(playerID):
+def GetPlayerPropPlusCacheByID(playerID, checkUpd=False):
     #玩家属性缓存
-    viewCache = PyGameData.g_playerViewCache.get(playerID, {})
-    curPlayerPropDict = viewCache.get("PropData", {})
-    curPlayerPlusDict = viewCache.get("PlusData", {})
-    PropData = json.dumps(curPlayerPropDict, ensure_ascii=False).replace(" ", "")
-    PlusData = json.dumps(curPlayerPlusDict, ensure_ascii=False).replace(" ", "")
+    PropDict, PlusDict = GetPlayerPropPlusDictByID(playerID, checkUpd)
+    PropData = json.dumps(PropDict, ensure_ascii=False).replace(" ", "")
+    PlusData = json.dumps(PlusDict, ensure_ascii=False).replace(" ", "")
     return PropData, PlusData
+
+def GetPlayerPropPlusDictByID(playerID, checkUpd=False):
+    #玩家属性字典
+    if checkUpd:
+        UpdPlayerPropPlusCache(GameWorld.GetPlayerManager().FindPlayerByID(playerID))
+    viewCache = PyGameData.g_playerViewCache.get(playerID, {})
+    PropDict = viewCache.get("PropData", {})
+    PlusDict = viewCache.get("PlusData", {})
+    return PropDict, PlusDict
 
 def __GetEquipShowIDList(curPlayer):
     ## 获取外观装备ID列表
@@ -295,23 +308,6 @@
             continue
         equipShowIDList.append(curEquip.GetItemTypeID())
     return equipShowIDList
-
-## 灵宠信息
-def __GetPetInfo(curPlayer):
-    petInfo = {}
-    petClassLVList = []
-    equipPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptPet)
-    for index in xrange(equipPack.GetCount()):
-        packItem = equipPack.GetAt(index)
-        if not packItem or packItem.IsEmpty():
-            continue
-        petNPCID = packItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
-        classLV = packItem.GetUserAttr(ShareDefine.Def_IudetPet_ClassLV)
-        petClassLVList.append({"id":petNPCID, 'lv':classLV})
-        
-    petInfo["PetLV"] = petClassLVList
-    petInfo["AtkSpeed"] = GameObj.GetAtkSpeed(curPlayer)
-    return petInfo
 
 ## 坐骑信息
 def __GetHorseInfo(curPlayer):
@@ -414,16 +410,14 @@
     NetPackCommon.SendPyPackToGameServer(sendPack)  
     return
 
-def GetPlayerPropData(findPlayerID):
-    ## 获取玩家战斗属性数据  UpdPlayerPropPlusCache
-    viewCache = PyGameData.g_playerViewCache.get(findPlayerID, {})
-    return viewCache.get("PropData", {})
-
-def GetPlayerPropDataCall(curPlayer, findPlayerID, callFunc, callData=None, syncClient=True):
+def GetPlayerPropDataCall(curPlayer, findPlayerID, callFunc, callData=None, syncClient=False):
     ## 获取玩家战斗属性数据 - 支持callback,因为地图可能暂时没有离线玩家缓存数据
+    # @param callFunc: 获取到玩家数据后回调函数,可能地图没有数据,会等向GameServer同步过后再回调
+    # @param callData: 回调函数扩展参数,透传参数
+    # @param syncClient: 是否附带通知前端该玩家数据,一般如果有需要前端配合展示的,需要直接传给前端,如镜像PK类功能
     
     playerID = curPlayer.GetPlayerID()
-    dataDict = GetPlayerPropData(findPlayerID)
+    dataDict = GetPlayerPropPlusDictByID(findPlayerID, True)[0]
     if dataDict:
         if syncClient:
             Sync_PlayerCache(curPlayer, findPlayerID)

--
Gitblit v1.8.0