From ca4cedac152f6de34e3f612003ea784c0cceca3f Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 23 八月 2024 11:16:08 +0800
Subject: [PATCH] 10229 【越南】【主干】【港台】【砍树】古神战场修改(修复查询玩家相关队伍返回的队伍信息申请数据为空的bug;)

---
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerXMZZ.py |   71 +++++++++++------------------------
 1 files changed, 23 insertions(+), 48 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerXMZZ.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerXMZZ.py
index 75f7fc5..283e6b7 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerXMZZ.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerXMZZ.py
@@ -34,13 +34,12 @@
 import PlayerUniversalGameRec
 
 import random
-import json
 import math
+import json
 
 RecType = ShareDefine.Def_UniversalGameRecType_XMZZStageRecord
 RecType1 = ShareDefine.Def_UniversalGameRecType_XMZZPKInfoRecord
 #strValue3 {投注索引:结果,..}
-g_playerPowerDict = {} #玩家战力缓存
 g_historyPKDict = {} #历史对手ID缓存
 
 (
@@ -89,10 +88,8 @@
 
 def XMZZOndayEx():
     #过天
-    global g_playerPowerDict
     global g_historyPKDict
     PyDataManager.GetXMZZManager().ResetXMZZ()
-    g_playerPowerDict = {} #玩家战力缓存
     g_historyPKDict = {} #历史对手ID缓存
     return
 
@@ -228,7 +225,7 @@
 class XMZZManager(object):
        
     def __init__(self):
-        self.XMZZPlayerDict = {}     # {playerid:data, ...} PyGameDataStruct.tagDBPySealDemonRecord
+        self.XMZZPlayerDict = {}     # {playerid:data, ...} PyGameDataStruct.tagDBPyXMZZ
         self.XMZZFactionDict = {Faction_1:[0, 0], Faction_2:[0, 0]}    # {faction:[积分, 人数]}
         self.XMZZTopScore = 0 #积分王积分
         self.XMZZTopPlayerName = '' #积分王名
@@ -262,18 +259,15 @@
         if playerID not in self.vsPlayerIDDict:
             return
         pkPlayerID = self.vsPlayerIDDict[playerID]
-        curCache = PlayerViewCache.ViewCacheMgr.FindCache(pkPlayerID)
+        curCache = PlayerViewCache.FindViewCache(pkPlayerID)
         if not curCache:
             return
-        PropData, ItemData = curCache.GetPropData(), curCache.GetItemData()
         
         packData = ChPyNetSendPack.tagGCXMZZFightInfo()
         packData.Clear()
         packData.PlayerID = pkPlayerID
-        packData.PropData = PropData
+        packData.PropData = curCache.PropData
         packData.PropDataSize = len(packData.PropData)
-        packData.ItemData = ItemData
-        packData.ItemDataSize = len(packData.ItemData)
         NetPackCommon.SendFakePack(curPlayer, packData)
         return
     
@@ -483,7 +477,7 @@
         #阵营奖励
         winAward = IpyGameDataPY.GetFuncEvalCfg('XMZZAward', 3)
         LoseAward = IpyGameDataPY.GetFuncEvalCfg('XMZZAward', 4)
-        dogfallAward = IpyGameDataPY.GetFuncEvalCfg('XMZZAward', 5)
+        dogfallAward = IpyGameDataPY.GetFuncCfg('XMZZAward', 5)
         result = self.GetXMZZCurResult()
         if result == Faction_1:
             SavePKRecord('XMZZ_Victory', [result], True)          
@@ -499,9 +493,8 @@
             faction_2_Score = self.XMZZFactionDict.get(Faction_2, [0, 0])[0]
             if faction_1_Score + faction_2_Score >= XMZZDogFallLimit:
                 SavePKRecord('XMZZ_Draw', [], True)
-                
-                PlayerCompensation.SendMailByKey('XMZZDogfall', Faction_2_IDList + Faction_1_IDList, [], goldPaper=dogfallAward)
-                #PlayerControl.MergeWorldNotify(0, '', [])
+                if dogfallAward:
+                    PlayerCompensation.SendMailByKey('XMZZDogfall', Faction_2_IDList + Faction_1_IDList, [], goldPaper=dogfallAward)
         
         PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_XMZZIsOver, 1)
         self.NotifyXMZZInfo()
@@ -581,7 +574,7 @@
             cnt += 1
             savaData += XMZZData.getBuffer()
                 
-        GameWorld.Log("SaveXMZZ cnt :%s" % cnt)
+        GameWorld.Log("SaveXMZZ cnt :%s len=%s" % (cnt, len(savaData)))
         return CommFunc.WriteDWORD(cntData, cnt) + savaData
     
     # 从数据库载入数据
@@ -611,7 +604,6 @@
 
 def RandomBattler(curPlayer, overInfo=[]):
     #筛选对手 根据连胜次数一定几率随机到高级机器人,否则每5个的第1个低于自己战力 先从小范围随机,再大范围随机,没有则用NPC
-    global g_playerPowerDict
     global g_historyPKDict
     myPlayerID = curPlayer.GetID()
     GameWorld.DebugLog('    仙魔之争开始筛选对手', myPlayerID)
@@ -626,7 +618,6 @@
         
     pkPlayerID = 0 # 默认低级机器人
     isRobotNPC = True
-    pkDataDict = {}
     conWinCnt = XMZZPlayerDict[myPlayerID].ConWinCnt #参数
     XMZZSpecialNPCRate = eval(IpyGameDataPY.GetFuncCompileCfg('XMZZSpecialNPCRate'))
     XMZZSuperNPCRate = eval(IpyGameDataPY.GetFuncCompileCfg('XMZZSpecialNPCRate', 2))
@@ -647,24 +638,18 @@
         if isByLVPower:
             worldLv = PlayerDBGSEvent.GetDBGSTrig_ByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv)
             ipyData = IpyGameDataPY.GetIpyGameData('PlayerLV', worldLv)
-            myPower = ipyData.GetReFightPower() if ipyData else curPlayer.GetFightPower() 
+            myPower = ipyData.GetReFightPower() if ipyData else PlayerControl.GetFightPower(curPlayer) 
         else:
-            myPower = curPlayer.GetFightPower()
+            myPower = PlayerControl.GetFightPower(curPlayer)
         XMZZPKPowerRange = IpyGameDataPY.GetFuncEvalCfg('XMZZPKPowerRange')
         minPower1, maxPower1 = myPower * (100 - XMZZPKPowerRange[0][0]) / 100, myPower * (100 + XMZZPKPowerRange[0][1]) / 100
         minPower2, maxPower2 = myPower * (100 - XMZZPKPowerRange[1][0]) / 100, myPower * (100 + XMZZPKPowerRange[1][1]) / 100
         underList1, aboveList1 = [], [] #小范围
         underList2, aboveList2 = [], [] #大范围
         
-        ViewCacheMgr = GameWorld.GameWorldData.GetPlayerViewCacheMgr()
-        for i in xrange(ViewCacheMgr.GetCount()):
-            curCache = ViewCacheMgr.At(i)
-            itemData = PlayerViewCache.GetItemData(curCache)
-            if not itemData:
-                #没有装备信息
-                continue
-            playerID = curCache.GetPlayerID()
-            
+        pyViewCacheMgr = PyDataManager.GetPlayerViewCachePyManager()
+        playerViewCachePyDict = pyViewCacheMgr.playerViewCachePyDict
+        for playerID, curCache in playerViewCachePyDict.items():
             if myPlayerID == playerID:
                 #不和自己pk
                 continue
@@ -675,14 +660,9 @@
                 #已匹配过的跳过
                 continue
             
-            if playerID in g_playerPowerDict:
-                power = g_playerPowerDict[playerID]
-            else:
-                propDataDict = eval(curCache.GetPropData())
-                power = propDataDict.get('FightPower', 0)
-                g_playerPowerDict[playerID] = power
+            propDataDict = PlayerViewCache.GetCachePropDataDict(curCache)
+            power = propDataDict.get('FightPower', 0)
             
-            pkDataDict[playerID] = [curCache.GetPropData(), curCache.GetItemData()]
             #GameWorld.DebugLog('    筛选对手 playerID=%s,power=%s' % (playerID, power))
             if minPower1 < power < myPower:
                 underList1.append(playerID)
@@ -694,7 +674,7 @@
                 aboveList2.append(playerID)
         GameWorld.DebugLog('    筛选对手 myPower=%s,underList1=%s, aboveList1=%s,underList2=%s, aboveList2=%s' % (myPower, underList1, aboveList1, underList2, aboveList2), myPlayerID)
 
-        if conWinCnt % 5 == 0: #每5个匹配战力低的对手
+        if conWinCnt % 5 == 0 or conWinCnt <= IpyGameDataPY.GetFuncCfg('XMZZPKPowerRange', 3): #每5个匹配战力低的对手
             if underList1:
                 pkPlayerID = underList1[0]
             elif underList2:
@@ -716,35 +696,30 @@
     if isRobotNPC:
         #机器人, 职业随机
         openJob = IpyGameDataPY.GetFuncEvalCfg("OpenJob")
-        PropData = str({"Job":random.choice(openJob), "LV":curPlayer.GetLV()})
-        ItemData = "" # 前端自己根据职业及NPC等级处理
+        pkPlayerPropData = {"Job":random.choice(openJob), "LV":curPlayer.GetLV()}
     else:
         if myPlayerID in g_historyPKDict:
             g_historyPKDict[myPlayerID].append(pkPlayerID)
         else:
             g_historyPKDict[myPlayerID] = [pkPlayerID]
             
-        PropData, ItemData = pkDataDict.get(pkPlayerID, ["", ""])
+        pkPlayerCache = PlayerViewCache.FindViewCache(pkPlayerID)
+        pkPlayerPropData = {} if not pkPlayerCache else PlayerViewCache.GetCachePropDataDict(pkPlayerCache)
     XMZZManager.vsPlayerIDDict[myPlayerID] = pkPlayerID
 
-    GameWorld.DebugLog('   仙魔之争匹配对手信息 pkPlayerID=%s, PropData=%s, overInfo=%s' % (pkPlayerID, PropData, overInfo), myPlayerID)
+    GameWorld.DebugLog('   仙魔之争匹配对手信息 pkPlayerID=%s, pkPlayerPropData=%s, overInfo=%s' % (pkPlayerID, pkPlayerPropData, overInfo), myPlayerID)
     
     #通知前端
     packData = ChPyNetSendPack.tagGCXMZZFightInfo()
     packData.Clear()
     packData.PlayerID = pkPlayerID
-    packData.PropData = PropData
+    packData.PropData = json.dumps(pkPlayerPropData, ensure_ascii=False)
     packData.PropDataSize = len(packData.PropData)
-    packData.ItemData = ItemData
-    packData.ItemDataSize = len(packData.ItemData)
     NetPackCommon.SendFakePack(curPlayer, packData)
     
     #通知地图
-    pkPlayerPropData = {}
-    if PropData:
-        pkPlayerPropData = eval(PropData)
-    else:
-        GameWorld.ErrLog("仙魔之争没有匹配到对手信息!fightPower=%s" % curPlayer.GetFightPower(), myPlayerID)
+    if not pkPlayerPropData:
+        GameWorld.ErrLog("仙魔之争没有匹配到对手信息!fightPower=%s" % PlayerControl.GetFightPower(curPlayer), myPlayerID)
     vsPlayerInfo = [pkPlayerID, pkPlayerPropData]
     XMZZManager.MapServer_XMZZPKInfo(curPlayer, overInfo, vsPlayerInfo)
     return True

--
Gitblit v1.8.0