From 0c27822ef5e6c67782ed143a4ff03ecfbdfda1fb Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期一, 23 五月 2022 16:52:58 +0800 Subject: [PATCH] 9415 【BT】【后端】古神战场(副本内功能完整版本) --- ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBattlefield.py | 75 +++++++++++++++++++------------------ 1 files changed, 39 insertions(+), 36 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBattlefield.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBattlefield.py index 0521929..a6dff1b 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBattlefield.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBattlefield.py @@ -4,12 +4,12 @@ # ##@package CrossBattlefield # -# @todo:跨服战场 +# @todo:跨服战场/古神战场 # @author hxp # @date 2022-01-06 # @version 1.0 # -# 详细描述: 跨服战场 +# 详细描述: 跨服战场/古神战场 # #------------------------------------------------------------------------------- #"""Version = 2022-01-06 20:30""" @@ -180,10 +180,13 @@ if not GameWorld.IsCrossServer(): return - enterWeekOrderAwardDict = IpyGameDataPY.GetFuncEvalCfg("CrossBattlefieldBillboard", 3, {}) # 周参与榜名次对应奖励物品列表 {"名次":[[物品ID,个数,是否拍品], ...], ...} , 名次配置支持段配置 - callWeekOrderAwardDict = IpyGameDataPY.GetFuncEvalCfg("CrossBattlefieldBillboard", 4, {}) # 周召集榜名次对应奖励物品列表 {"名次":[[物品ID,个数,是否拍品], ...], ...} , 名次配置支持段配置 - scoreWeekOrderAwardDict = IpyGameDataPY.GetFuncEvalCfg("CrossBattlefieldBillboard", 5, {}) # 周参与榜名次对应奖励物品列表 {"名次":[[物品ID,个数,是否拍品], ...], ...} , 名次配置支持段配置 + enterWeekMoneyItemID = IpyGameDataPY.GetFuncCfg("CrossBattlefieldBillboardJoin", 3) # 周参与榜额外奖励货币物品ID + enterWeekMoneyMultiDict = IpyGameDataPY.GetFuncEvalCfg("CrossBattlefieldBillboardJoin", 4, {}) # 周参与榜额外奖励货币名次对应倍值 + enterWeekOrderAwardDict = IpyGameDataPY.GetFuncEvalCfg("CrossBattlefieldBillboardJoin", 2, {}) # 周参与榜名次对应奖励物品列表 {"名次":[[物品ID,个数,是否拍品], ...], ...} , 名次配置支持段配置 + callWeekOrderAwardDict = IpyGameDataPY.GetFuncEvalCfg("CrossBattlefieldBillboard", 2, {}) # 周召集榜名次对应奖励物品列表 {"名次":[[物品ID,个数,是否拍品], ...], ...} , 名次配置支持段配置 + scoreWeekOrderAwardDict = IpyGameDataPY.GetFuncEvalCfg("CrossBattlefieldBillboard", 3, {}) # 周积分榜名次对应奖励物品列表 {"名次":[[物品ID,个数,是否拍品], ...], ...} , 名次配置支持段配置 + enterWeekMoneyMultiIntDict = {int(k):v for k, v in enterWeekMoneyMultiDict.items()} enterWeekOrderIntAwardDict = {int(k):v for k, v in enterWeekOrderAwardDict.items()} callWeekOrderIntAwardDict = {int(k):v for k, v in callWeekOrderAwardDict.items()} scoreWeekOrderIntAwardDict = {int(k):v for k, v in scoreWeekOrderAwardDict.items()} @@ -209,11 +212,17 @@ if not billboardData: continue playerID = billboardData.ID + cmpValue = billboardData.CmpValue rank = i + 1 awardItemList = GameWorld.GetOrderValueByDict(awardDict, rank) paramList = [rank] + if billboardType == ShareDefine.Def_CBT_BattlefieldWJoin and enterWeekMoneyItemID: + moneyBaseCount, multiValue = GameWorld.GetOrderValueByDict(enterWeekMoneyMultiIntDict, rank) # 奖励货币倍值 + #基础保底值(不同名次可能不一样) + 名次倍率*次数 + awardMoneyCount = int(moneyBaseCount + multiValue * cmpValue) + awardItemList.append([enterWeekMoneyItemID, awardMoneyCount, 0]) PlayerCompensation.SendMailByKey(mailKey, [playerID], awardItemList, paramList, crossMail=True) - + billboardObj.ClearData() return @@ -469,13 +478,8 @@ GameWorld.DebugLog("跨服PK赛季未开启中,跨服战场系统开启广播不处理!") continue - notifyKey = "CrossBattlefieldOpenSys" - paramList = [notifyOpenMinute] - country = 0 - serverGroupIDList = [] - crossNotifyList = [] - crossNotifyList.append([ShareDefine.CrossNotify_World, [country, notifyKey, paramList]]) - PlayerControl.CrossNotifyEx(serverGroupIDList, crossNotifyList) + serverGroupIDList = zoneIpyData.GetServerGroupIDList() + PlayerControl.WorldNotifyCross(serverGroupIDList, 0, "CrossBattlefieldOpenSys", [notifyOpenMinute]) return @@ -503,12 +507,7 @@ matchTickSortList = sorted(buyPlayerInfo.values(), key=operator.attrgetter("buyTime")) buyRec = matchTickSortList[0] - notifyKey = "CrossBattlefieldOpenPlayer" - paramList = [buyRec.playerName, notifyOpenMinute] - country = 0 - crossNotifyList = [] - crossNotifyList.append([ShareDefine.CrossNotify_World, [country, notifyKey, paramList]]) - PlayerControl.CrossNotifyEx(serverGroupIDList, crossNotifyList) + PlayerControl.WorldNotifyCross(serverGroupIDList, 0, "CrossBattlefieldOpenPlayer", [buyRec.playerName, notifyOpenMinute]) return @@ -669,7 +668,7 @@ buyPlayerInfo[playerID] = buyRec # 上榜 - billboardCallCountLimit = IpyGameDataPY.GetFuncCfg("CrossBattlefieldBillboard", 2) # 周召集榜上榜至少次数 + billboardCallCountLimit = IpyGameDataPY.GetFuncCfg("CrossBattlefieldBillboard", 1) # 周召集榜上榜至少次数 groupValue1, dataID, name1, name2 = zoneID, playerID, playerName, "" type2, value1, value2 = job, realmLV, 0 cmpValue = buyOpenCountWeek + 1 @@ -758,9 +757,9 @@ ## 跨服战场地图结算 overTime = int(time.time()) hmNum = GetCrossBattlefieldState() - fbPropertyID, zoneID, funcLineID, winnerFaction, superItemInfo, superItemPlayerID, superItemPlayerName, scoreKingID, scoreKingName, battlePlayerList = msgList - GameWorld.Log("跨服战场地图同步结果: hmNum=%s,zoneID=%s,funcLineID=%s,winnerFaction=%s,superItemInfo=%s,superItemPlayerID=%s,scoreKingID=%s,battlePlayerCount=%s" - % (hmNum, zoneID, funcLineID, winnerFaction, superItemInfo, superItemPlayerID, scoreKingID, len(battlePlayerList)), fbPropertyID) + fbPropertyID, zoneID, funcLineID, winnerFaction, superItemInfo, finalSuperItemPlayerID, finalSuperItemPlayerName, superItemPlayerIDList, scoreKingID, scoreKingName, battlePlayerList = msgList + GameWorld.Log("跨服战场地图同步结果: hmNum=%s,zoneID=%s,funcLineID=%s,winnerFaction=%s,superItemInfo=%s,finalSuperItemPlayerID=%s,superItemPlayerIDList=%s,scoreKingID=%s,battlePlayerCount=%s" + % (hmNum, zoneID, funcLineID, winnerFaction, superItemInfo, finalSuperItemPlayerID, superItemPlayerIDList, scoreKingID, len(battlePlayerList)), fbPropertyID) winnerOrderAwardDict = IpyGameDataPY.GetFuncEvalCfg("CrossBattlefieldAward", 2, {}) # 胜利方名次对应奖励物品列表 {"名次":[[物品ID,个数,是否拍品], ...], ...} , 名次配置支持段配置 loserOrderAwardDict = IpyGameDataPY.GetFuncEvalCfg("CrossBattlefieldAward", 3, {}) # 失败方名次对应奖励物品列表 {"名次":[[物品ID,个数,是否拍品], ...], ...} , 名次配置支持段配置 @@ -770,17 +769,19 @@ winnerOrderIntAwardDict = {int(k):v for k, v in winnerOrderAwardDict.items()} loserOrderIntAwardDict = {int(k):v for k, v in loserOrderAwardDict.items()} - billboardEnterCountLimit = IpyGameDataPY.GetFuncCfg("CrossBattlefieldBillboard", 1) # 周参与榜上榜至少次数 + billboardEnterCountLimit = IpyGameDataPY.GetFuncCfg("CrossBattlefieldBillboardJoin", 1) # 周参与榜上榜至少次数 syncPlayerDataInfo = {} winnerPlayerIDList, loserPlayerIDList = [], [] for playerInfo in battlePlayerList: - faction, rank, playerID, job, realmLV, name, score, highScoreToday, highScoreWeekTotal, enterCountWeek, isCallEnter = playerInfo - - isWinner = 0 + playerID, job, realmLV, name, \ + isWinner, faction, rank, score, highScoreToday, highScoreWeekTotal, enterCountWeek, \ + isCallOpen, isCalled, killCnt, ckillCntInfo, killBossCnt, killScoreKing, killGuardCnt, auraScore, superItemAwardCnt, \ + factionBuffCollCnt, personBuffCollCnt, crystalCollCnt, wallCollCnt \ + = playerInfo + paramList = [rank] if faction == winnerFaction: - isWinner = 1 winnerPlayerIDList.append(playerID) orderAwardMailKey = "CrossBattlefieldOrderWin" orderAwardItemList = GameWorld.GetOrderValueByDict(winnerOrderIntAwardDict, rank) @@ -809,10 +810,12 @@ cmpValue = highScoreWeekTotal CrossBillboard.UpdCrossBillboard(ShareDefine.Def_CBT_BattlefieldWScore, groupValue1, dataID, name1, name2, type2, value1, value2, cmpValue) - GameWorld.Log(" 战场阵营玩家: faction=%s,isWinner=%s,rank=%s,playerID=%s,score=%s,highScoreToday=%s,highScoreWeekTotal=%s,enterCountWeek=%s,isCallEnter=%s" - % (faction, isWinner, rank, playerID, score, highScoreToday, highScoreWeekTotal, enterCountWeek, isCallEnter), fbPropertyID) + GameWorld.Log(" 战场阵营玩家: faction=%s,isWinner=%s,rank=%s,playerID=%s,score=%s,highScoreToday=%s,highScoreWeekTotal=%s,enterCountWeek=%s,isCallOpen=%s,isCalled=%s" + % (faction, isWinner, rank, playerID, score, highScoreToday, highScoreWeekTotal, enterCountWeek, isCallOpen, isCalled), fbPropertyID) - syncPlayerDataInfo[playerID] = [highScoreToday, highScoreWeekTotal, enterCountWeek, isCallEnter] + syncPlayerDataInfo[playerID] = [isWinner, faction, rank, score, highScoreToday, highScoreWeekTotal, enterCountWeek, + isCallOpen, isCalled, killCnt, ckillCntInfo, killBossCnt, killScoreKing, killGuardCnt, auraScore, superItemAwardCnt, + factionBuffCollCnt, personBuffCollCnt, crystalCollCnt, wallCollCnt] # 参与奖励邮件 if winnerPlayerIDList: @@ -822,9 +825,10 @@ # 大奖获得者邮件 superItemID, superItemCount = 0, 0 - if superItemPlayerID and superItemInfo and len(superItemInfo) == 3: + if superItemPlayerIDList and superItemInfo and len(superItemInfo) == 3: superItemID, superItemCount = superItemInfo[0], superItemInfo[1] - PlayerCompensation.SendMailByKey("CrossBattlefieldSuperAward", [superItemPlayerID], [superItemInfo], crossMail=True) + for superItemPlayerID in superItemPlayerIDList: + PlayerCompensation.SendMailByKey("CrossBattlefieldSuperAward", [superItemPlayerID], [superItemInfo], crossMail=True) crossZoneName = GameWorld.GetCrossZoneName() zoneIpyData = IpyGameDataPY.GetIpyGameData("CrossZonePK", crossZoneName, zoneID) @@ -848,7 +852,7 @@ # 本分区全服:XX阵营胜利,xxx为本场积分王,xxx获得了古神大奖XXX,下个场次预计将在XX点开放。 if battlePlayerList: - msgParamList = [winnerFaction, scoreKingName, superItemPlayerName, superItemID, superItemCount, nextBattleTimeStr] + msgParamList = [winnerFaction, scoreKingName, finalSuperItemPlayerName, superItemID, superItemCount, nextBattleTimeStr] PlayerControl.WorldNotifyCross(serverGroupIDList, 0, "CrossBattlefieldOver", msgParamList) return @@ -887,9 +891,8 @@ return for playerID, playerData in syncPlayerDataInfo.items(): - highScoreToday, highScoreWeekTotal, enterCountWeek, isCallEnter = playerData if PlayerControl.GetDBPlayerAccIDByID(playerID): - msgInfo = ["BattlefieldOver", [overTime, highScoreToday, highScoreWeekTotal, enterCountWeek, isCallEnter]] + msgInfo = ["BattlefieldOver", [overTime] + playerData] CrossRealmPlayer.MapServer_QueryCrossPlayerResult(playerID, "CrossBattlefield", msgInfo) return -- Gitblit v1.8.0