hxp
2025-06-30 388823edfe6308cba6f76ca6dc4f20022c5cb2be
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldFamilyWar.py
@@ -90,6 +90,7 @@
value4        已分配到的连胜次数
value5        终结连胜的奖励次数, 只能获得这一次的连胜奖励,有值才显示,分配后设置为0, 优先分配
strValue1        仙盟名
strValue2        仙盟徽章
'''
def GetFWChampionFamilyID(championRecData): return championRecData.GetValue1()
def SetFWChampionFamilyID(championRecData, familyID): return championRecData.SetValue1(familyID)
@@ -103,6 +104,7 @@
def SetFWChampionEndWinCount(championRecData, endWinCount): return championRecData.SetValue5(endWinCount)
def GetFWChampionFamilyName(championRecData): return championRecData.GetStrValue1()
def SetFWChampionFamilyName(championRecData, familyName): return championRecData.SetStrValue1(familyName)
def SetFWChampionFamilyEmblemID(championRecData, emblemID): return championRecData.SetStrValue2(str(emblemID))
''' 参赛人员 Def_UniversalGameRecType_FamilyWarMember
value1        玩家ID
@@ -420,7 +422,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()
@@ -988,6 +992,7 @@
            championFamilyName = family.GetName()
            SetFWChampionLeaderID(championRecData, family.GetLeaderID())
            SetFWChampionFamilyName(championRecData, championFamilyName)
            SetFWChampionFamilyEmblemID(championRecData, PlayerFamily.GetFamilyEmblemID(family))
        else:
            GameWorld.Log("    冠军仙盟不存在或已经解散了!")
            
@@ -1032,16 +1037,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 +1068,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 +1107,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]