From e1dbd84e697445ea0c5f73075f56f97e5849ae53 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期五, 08 三月 2019 14:58:15 +0800
Subject: [PATCH] 6328 【后端】优化代码eval - json只适合字符串序列化,并且尽量用于非中文;建议使用cPickle 的dumps 和loads,协议用2,可支持所有类型,缺点为序列化后不可阅读

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

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerXMZZ.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerXMZZ.py
index 992ecc5..1e12485 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerXMZZ.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerXMZZ.py
@@ -36,6 +36,7 @@
 import random
 import json
 import math
+import cPickle
 
 RecType = ShareDefine.Def_UniversalGameRecType_XMZZStageRecord
 RecType1 = ShareDefine.Def_UniversalGameRecType_XMZZPKInfoRecord
@@ -265,14 +266,13 @@
         curCache = PlayerViewCache.ViewCacheMgr.FindCache(pkPlayerID)
         if not curCache:
             return
-        PropData, ItemData = curCache.GetPropData(), curCache.GetItemData()
         
         packData = ChPyNetSendPack.tagGCXMZZFightInfo()
         packData.Clear()
         packData.PlayerID = pkPlayerID
-        packData.PropData = PropData
+        packData.PropData = json.dumps(cPickle.loads(curCache.GetPropData()), ensure_ascii=False)
         packData.PropDataSize = len(packData.PropData)
-        packData.ItemData = ItemData
+        packData.ItemData = json.dumps(cPickle.loads(PlayerViewCache.GetItemData(curCache)), ensure_ascii=False)
         packData.ItemDataSize = len(packData.ItemData)
         NetPackCommon.SendFakePack(curPlayer, packData)
         return
@@ -674,14 +674,15 @@
                 #已匹配过的跳过
                 continue
             
+            propDataDict = cPickle.loads(curCache.GetPropData())
+            itemDataDict = cPickle.loads(itemData)
             if playerID in g_playerPowerDict:
                 power = g_playerPowerDict[playerID]
             else:
-                propDataDict = eval(curCache.GetPropData())
                 power = propDataDict.get('FightPower', 0)
                 g_playerPowerDict[playerID] = power
             
-            pkDataDict[playerID] = [curCache.GetPropData(), curCache.GetItemData()]
+            pkDataDict[playerID] = [propDataDict, itemDataDict]
             #GameWorld.DebugLog('    筛选对手 playerID=%s,power=%s' % (playerID, power))
             if minPower1 < power < myPower:
                 underList1.append(playerID)
@@ -715,15 +716,15 @@
     if isRobotNPC:
         #机器人, 职业随机
         openJob = IpyGameDataPY.GetFuncEvalCfg("OpenJob")
-        PropData = str({"Job":random.choice(openJob), "LV":curPlayer.GetLV()})
-        ItemData = "" # 前端自己根据职业及NPC等级处理
+        PropData = {"Job":random.choice(openJob), "LV":curPlayer.GetLV()}
+        ItemData = {} # 前端自己根据职业及NPC等级处理
     else:
         if myPlayerID in g_historyPKDict:
             g_historyPKDict[myPlayerID].append(pkPlayerID)
         else:
             g_historyPKDict[myPlayerID] = [pkPlayerID]
             
-        PropData, ItemData = pkDataDict.get(pkPlayerID, ["", ""])
+        PropData, ItemData = pkDataDict.get(pkPlayerID, [{}, {}])
     XMZZManager.vsPlayerIDDict[myPlayerID] = pkPlayerID
 
     GameWorld.DebugLog('   仙魔之争匹配对手信息 pkPlayerID=%s, PropData=%s, overInfo=%s' % (pkPlayerID, PropData, overInfo), myPlayerID)
@@ -732,16 +733,16 @@
     packData = ChPyNetSendPack.tagGCXMZZFightInfo()
     packData.Clear()
     packData.PlayerID = pkPlayerID
-    packData.PropData = PropData
+    packData.PropData = json.dumps(PropData, ensure_ascii=False)
     packData.PropDataSize = len(packData.PropData)
-    packData.ItemData = ItemData
+    packData.ItemData = json.dumps(ItemData, ensure_ascii=False)
     packData.ItemDataSize = len(packData.ItemData)
     NetPackCommon.SendFakePack(curPlayer, packData)
     
     #通知地图
     pkPlayerPropData = {}
     if PropData:
-        pkPlayerPropData = eval(PropData)
+        pkPlayerPropData = PropData
     else:
         GameWorld.ErrLog("仙魔之争没有匹配到对手信息!fightPower=%s" % curPlayer.GetFightPower(), myPlayerID)
     vsPlayerInfo = [pkPlayerID, pkPlayerPropData]

--
Gitblit v1.8.0