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