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