From 8c99cfdef4ee827c08641defb6e0ac1f3c2899e0 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期六, 07 十月 2023 00:45:11 +0800
Subject: [PATCH] 9905 【BT0.1】【主干】新增每周、每月限购

---
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldFamilyWar.py |   41 +++++++++++++++++++++++++++++++++++------
 1 files changed, 35 insertions(+), 6 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldFamilyWar.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldFamilyWar.py
index b48ee91..6d8c627 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldFamilyWar.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldFamilyWar.py
@@ -420,7 +420,9 @@
     PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_AllOver, 0) # 新一轮开始,重置状态
     PlayerFamily.DoFamilySort() # 首轮分组前需要强制刷新一次仙盟排行
     
-    lastFamilyWarMemDict = copy.deepcopy(PyGameData.g_familyWarMemDict)
+    lastFamilyWarMemDict = {}
+    for warPlayerID, recData in PyGameData.g_familyWarMemDict.items():
+        lastFamilyWarMemDict[warPlayerID] = GetFWMemFamilyID(recData)
     PyGameData.g_familyWarMemDict = {}
     PyGameData.g_familyWarFamilyIDList = []
     universalRecMgr = GameWorld.GetUniversalRecMgr()
@@ -1032,16 +1034,23 @@
     if not family:
         return
     
+    familyAllPlayerIDList = []
     familyPlayerIDList = []
     for i in xrange(family.GetCount()):
         member = family.GetAt(i)
         memPlayerID = member.GetPlayerID()
         if memPlayerID not in PyGameData.g_familyWarMemDict:
             continue
+        familyAllPlayerIDList.append(memPlayerID)
         recData = PyGameData.g_familyWarMemDict[memPlayerID]
+        if GetFWMemFamilyID(recData) != familyID:
+            continue
         if not GetFWMemIsJoin(recData):
             continue
         familyPlayerIDList.append(memPlayerID)
+    if not familyPlayerIDList:
+        familyPlayerIDList = familyAllPlayerIDList
+        GameWorld.Log("连胜没有人参赛,收益算仙盟所有人的!familyID=%s,familyAllPlayerIDList=%s" % (familyID, familyAllPlayerIDList))
         
     familyAuctionItemDict = {} # {仙盟ID:[[享受收益的成员ID, ...], [[拍品ID,个数], [拍品ID,个数,是否拍品], ...]], ...}
     familyAuctionItemDict[familyID] = [familyPlayerIDList, familyAuctionItemList]
@@ -1056,20 +1065,33 @@
     ## 给仙盟排名仙盟拍品奖励
         
     warWorldLV = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_StartWorldLV)
-    GameWorld.Log("发放排名仙盟拍品奖励: warWorldLV=%s, familyWarIDRankList=%s" % (warWorldLV, familyWarIDRankList))
-    
-    cfgRankKey = 1
-    cfgRankAuctionItemDict = {}
+    rewardWorldLV = 0
     ipyDataMgr = IpyGameDataPY.IPY_Data()
     for index in xrange(ipyDataMgr.GetFamilyWarRankAwardCount()):
         ipyData = ipyDataMgr.GetFamilyWarRankAwardByIndex(index)
-        if warWorldLV > ipyData.GetWarWorldLV() and cfgRankAuctionItemDict:
+        cfgWorldLV = ipyData.GetWarWorldLV()
+        if warWorldLV <= cfgWorldLV:
+            rewardWorldLV = cfgWorldLV
             break
+        elif warWorldLV > cfgWorldLV:
+            rewardWorldLV = cfgWorldLV
+    GameWorld.Log("发放排名仙盟拍品奖励: warWorldLV=%s, rewardWorldLV=%s, familyWarIDRankList=%s" % (warWorldLV, rewardWorldLV, familyWarIDRankList))
+    
+    rewardIpyDataList = IpyGameDataPY.GetIpyGameDataList("FamilyWarRankAward", rewardWorldLV)
+    if not rewardIpyDataList:
+        GameWorld.ErrLog("找不到仙盟排名对应世界等级奖励!")
+        return
+    
+    cfgRankKey = 1
+    cfgRankAuctionItemDict = {}
+    for ipyData in rewardIpyDataList:
         warRank = ipyData.GetWarRank()
         auctionItemList = ipyData.GetRankAuctionItem()
         for rank in range(cfgRankKey, warRank + 1):
             cfgRankAuctionItemDict[rank] = auctionItemList
         cfgRankKey = warRank + 1
+        
+    GameWorld.Log("对应世界等级奖励: rewardWorldLV=%s, %s" % (rewardWorldLV, cfgRankAuctionItemDict))
         
     familyAuctionItemDict = {} # {仙盟ID:[[享受收益的成员ID, ...], [[拍品ID,个数], [拍品ID,个数,是否拍品], ...]], ...}
     for rank, familyID in enumerate(familyWarIDRankList, 1):
@@ -1082,16 +1104,23 @@
             GameWorld.Log("    rank=%s,familyID=%s,仙盟不存在!" % (rank, familyID))
             continue
         
+        familyAllPlayerIDList = []
         familyPlayerIDList = []
         for i in xrange(family.GetCount()):
             member = family.GetAt(i)
             memPlayerID = member.GetPlayerID()
             if memPlayerID not in PyGameData.g_familyWarMemDict:
                 continue
+            familyAllPlayerIDList.append(memPlayerID)
             recData = PyGameData.g_familyWarMemDict[memPlayerID]
+            if GetFWMemFamilyID(recData) != familyID:
+                continue
             if not GetFWMemIsJoin(recData):
                 continue
             familyPlayerIDList.append(memPlayerID)
+        if not familyPlayerIDList:
+            familyPlayerIDList = familyAllPlayerIDList
+            GameWorld.Log("    排名没有人参赛,收益算仙盟所有人的!familyID=%s,familyAllPlayerIDList=%s" % (familyID, familyAllPlayerIDList))
             
         familyAuctionItemList = cfgRankAuctionItemDict[rank]
         familyAuctionItemDict[familyID] = [familyPlayerIDList, familyAuctionItemList]

--
Gitblit v1.8.0