From 2b86c7b9ca3a719dc0f25ce3df11296b87795ef2 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 23 五月 2022 17:00:20 +0800
Subject: [PATCH] 9415 【BT】【后端】古神战场(采集阵营buff时每个在线阵营玩家增加个人开奖贡献)
---
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerXMZZ.py | 66 ++++++++++----------------------
1 files changed, 21 insertions(+), 45 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerXMZZ.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerXMZZ.py
index 992ecc5..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
@@ -499,8 +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)
+ if dogfallAward:
+ PlayerCompensation.SendMailByKey('XMZZDogfall', Faction_2_IDList + Faction_1_IDList, [], goldPaper=dogfallAward)
PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_XMZZIsOver, 1)
self.NotifyXMZZInfo()
@@ -580,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
# 从数据库载入数据
@@ -610,7 +604,6 @@
def RandomBattler(curPlayer, overInfo=[]):
#筛选对手 根据连胜次数一定几率随机到高级机器人,否则每5个的第1个低于自己战力 先从小范围随机,再大范围随机,没有则用NPC
- global g_playerPowerDict
global g_historyPKDict
myPlayerID = curPlayer.GetID()
GameWorld.DebugLog(' 仙魔之争开始筛选对手', myPlayerID)
@@ -625,7 +618,6 @@
pkPlayerID = 0 # 默认低级机器人
isRobotNPC = True
- pkDataDict = {}
conWinCnt = XMZZPlayerDict[myPlayerID].ConWinCnt #参数
XMZZSpecialNPCRate = eval(IpyGameDataPY.GetFuncCompileCfg('XMZZSpecialNPCRate'))
XMZZSuperNPCRate = eval(IpyGameDataPY.GetFuncCompileCfg('XMZZSpecialNPCRate', 2))
@@ -646,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
@@ -674,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)
@@ -715,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