7195 【后端】【2.0】仙盟联赛修改(去除连胜奖励分配,改为连胜拍品奖励;增加排名拍品奖励)
13个文件已修改
578 ■■■■ 已修改文件
PySysDB/PySysDBG.h 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/AuctionHouse.py 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldFamilyWar.py 396 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/NetPackCommon.py 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerDBGSEvent.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PySysDB/PySysDBG.h
@@ -626,6 +626,15 @@
    WORD        LVLimit;    //限制等级
};
//仙盟联赛排名奖励表
struct tagFamilyWarRankAward
{
    WORD        _WarWorldLV;    //联赛世界等级
    BYTE        WarRank;    //联赛排名
    list        RankAuctionItem;    //拍品奖励[[拍品ID,个数], ...]
};
//缥缈仙域表
struct tagFairyDomain
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -4829,6 +4829,58 @@
#------------------------------------------------------
# AC 01 仙盟联赛信息通知 #tagGCFamilyWarInfo
class  tagGCFamilyWarInfo(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("WorldLV", c_ushort),    # 当前进行中的联赛世界等级
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xAC
        self.SubCmd = 0x01
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.Cmd = 0xAC
        self.SubCmd = 0x01
        self.WorldLV = 0
        return
    def GetLength(self):
        return sizeof(tagGCFamilyWarInfo)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// AC 01 仙盟联赛信息通知 //tagGCFamilyWarInfo:
                                Cmd:%s,
                                SubCmd:%s,
                                WorldLV:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.WorldLV
                                )
        return DumpString
m_NAtagGCFamilyWarInfo=tagGCFamilyWarInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyWarInfo.Cmd,m_NAtagGCFamilyWarInfo.SubCmd))] = m_NAtagGCFamilyWarInfo
#------------------------------------------------------
# AC 11 节日红包活动信息 #tagGCFeastRedPacketInfo
class  tagGCFeastRedPacketDay(Structure):
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/AuctionHouse.py
@@ -25,6 +25,7 @@
import NetPackCommon
import PlayerBourse
import PlayerFamily
import ShareDefine
import ChConfig
import operator
@@ -1381,3 +1382,11 @@
    DataRecordPack.SendEventPack("AuctionHouse", dataDict, curPlayer)
    return
def DoAddFamilyAuctionItem(mapID, familyAuctionItemDict):
    ''' 上架仙盟拍品,因为仙盟拍品默认上架,所以使用批量上架
    @param familyAuctionItemDict: {仙盟ID:[[享受收益的成员ID, ...], [[拍品ID,个数], [拍品ID,个数,是否拍品], ...]], ...}
    '''
    GameWorld.Log("发送地图上架仙盟拍品: mapID=%s, %s" % (mapID, familyAuctionItemDict))
    GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_AddFamilyAuctionItem, [mapID, familyAuctionItemDict])
    return
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldFamilyWar.py
@@ -26,6 +26,7 @@
import NetPackCommon
import PlayerControl
import PlayerFamily
import AuctionHouse
import ShareDefine
import PyGameData
import ChConfig
@@ -55,7 +56,7 @@
FamilyWarState_SecondRoundOver = 23 # 次轮结束
FamilyWarState_NextWeekGroupRank = 99 # 下周分组定级
''' 对战记录
''' 对战记录 Def_UniversalGameRecType_FamilyWarBattle
value1        组级别
value2        第几轮
value3        家族ID1
@@ -82,7 +83,7 @@
def GetBatRecDissolutionID(recData): return [] if not recData.GetStrValue3() else eval(recData.GetStrValue3()) # 解散的家族ID列表 [familyID, ...]
def SetBatRecDissolutionID(recData, dissFamilyIDList): return recData.SetStrValue3(str(dissFamilyIDList))
''' 王者仙盟
''' 王者仙盟 Def_UniversalGameRecType_FamilyWarChampion
value1        家族ID
value2        盟主ID
value3        连胜次数
@@ -102,6 +103,18 @@
def SetFWChampionEndWinCount(championRecData, endWinCount): return championRecData.SetValue5(endWinCount)
def GetFWChampionFamilyName(championRecData): return championRecData.GetStrValue1()
def SetFWChampionFamilyName(championRecData, familyName): return championRecData.SetStrValue1(familyName)
''' 参赛人员 Def_UniversalGameRecType_FamilyWarMember
value1        玩家ID
value2        仙盟ID
value3        是否有参与
'''
def GetFWMemPlayerID(recData): return recData.GetValue1()
def SetFWMemPlayerID(recData, playerID): return recData.SetValue1(playerID)
def GetFWMemFamilyID(recData): return recData.GetValue2()
def SetFWMemFamilyID(recData, familyID): return recData.SetValue2(familyID)
def GetFWMemIsJoin(recData): return recData.GetValue3()
def SetFWMemIsJoin(recData, isJoin): return recData.SetValue3(isJoin)
#-------------------------------------------------------------------------------
def OnGameServerInitOK():
@@ -115,14 +128,14 @@
    warMemRecList = GameWorld.GetUniversalRecMgr().GetTypeList(ShareDefine.Def_UniversalGameRecType_FamilyWarMember)
    for i in xrange(warMemRecList.Count()):
        recData = warMemRecList.At(i)
        warPlayerID = recData.GetValue1()
        warFamilyID = recData.GetValue2()
        warPlayerID = GetFWMemPlayerID(recData)
        warFamilyID = GetFWMemFamilyID(recData)
        if warFamilyID not in PyGameData.g_familyWarFamilyIDList:
            PyGameData.g_familyWarFamilyIDList.append(warFamilyID)
        PyGameData.g_familyWarMemDict[warPlayerID] = warFamilyID
        PyGameData.g_familyWarMemDict[warPlayerID] = recData
        
    GameWorld.Log("加载仙盟联赛参赛仙盟ID: %s" % PyGameData.g_familyWarFamilyIDList)
    GameWorld.Log("加载仙盟联赛参赛仙盟玩家: %s" % PyGameData.g_familyWarMemDict)
    #GameWorld.Log("加载仙盟联赛参赛仙盟玩家: %s" % PyGameData.g_familyWarMemDict)
    return
def DoFamilyWarReset(isDelRec=True):
@@ -140,6 +153,7 @@
    
    PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_Round, 0)
    PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_AllOver, 0)
    PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_StartWorldLV, 0)
    if isDelRec:
        GameWorld.GetUniversalRecMgr().Delete(ShareDefine.Def_UniversalGameRecType_FamilyWarBattle)
        GameWorld.GetUniversalRecMgr().Delete(ShareDefine.Def_UniversalGameRecType_FamilyWarChampion)
@@ -155,7 +169,7 @@
    if playerID not in PyGameData.g_familyWarMemDict:
        PlayerControl.NotifyCode(curPlayer, "PlayerNotInFamilyWarMemList")
        return False
    warFamilyID = PyGameData.g_familyWarMemDict[playerID]
    warFamilyID = GetFWMemFamilyID(PyGameData.g_familyWarMemDict[playerID])
    if familyID != warFamilyID:
        PlayerControl.NotifyCode(curPlayer, "PlayerWarFamilyIDIsChange")
        return False
@@ -171,13 +185,17 @@
def OnPlayerLogin(curFamily, curPlayer):
    CheckPlayerJoinFamilyWarInfo(curPlayer)
    gameWorld = GameWorld.GetGameWorld()
    state = gameWorld.GetDictByKey(ShareDefine.Def_Notify_WorldKey_FBFuncState % ChConfig.Def_FBMapID_FamilyWar)
    if state:
        Sync_FamilyWarInfo(curPlayer)
    return
def CheckPlayerJoinFamilyWarInfo(curPlayer):
    playerID = curPlayer.GetPlayerID()
    if playerID not in PyGameData.g_familyWarMemDict:
        return
    joinFamilyID = PyGameData.g_familyWarMemDict[playerID]
    joinFamilyID = GetFWMemFamilyID(PyGameData.g_familyWarMemDict[playerID])
    if not joinFamilyID or curPlayer.GetFamilyID() == joinFamilyID:
        return
    
@@ -225,7 +243,7 @@
        UpdFamilyWarRank()
        
    # 补发未分配的连胜奖励
    AllotWinRewardBySystem(GetFamilyWarChampionRecData(), True)
    #AllotWinRewardBySystem(GetFamilyWarChampionRecData(), True)
    return
def OnChangeFamilyLeader(familyID, leaderID):
@@ -413,6 +431,7 @@
    
    groupID = FamilyWar_MaxGroupID
    groupFamilyList = []
    warFamilyMemInfo = {}
    #直接取排行榜前X名作为联赛仙盟名单
    familyMgr = GameWorld.GetFamilyManager()
    sortFamilyIDList = PlayerFamily.GetSortFamilyIDList()
@@ -431,6 +450,7 @@
            
            # 添加参赛仙盟及成员名单
            PyGameData.g_familyWarFamilyIDList.append(familyID)
            warMemIDList = []
            for index in xrange(family.GetCount()):
                curMember = family.GetAt(index)
                memPlayerID = curMember.GetPlayerID()
@@ -440,6 +460,9 @@
                # 重新通知玩家参与的仙盟
                if lastJoinFamilyID and isAddOK and lastJoinFamilyID != familyID and memPlayer:
                    __NotifyPlayerJoinFamilyInfo(memPlayer, familyID)
                if isAddOK:
                    warMemIDList.append(memPlayerID)
            warFamilyMemInfo[familyID] = warMemIDList
                
        # 满一组仙盟数 or 没有仙盟了
        if len(groupFamilyList) == FamilyWar_GroupFamilyCount or i == familyCount - 1:
@@ -451,13 +474,18 @@
                # 下一组
                groupID -= 1
                groupFamilyList = []
    worldLV = PlayerDBGSEvent.GetDBGSTrig_ByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv)
    PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_StartWorldLV, worldLV) # 设置分组时的世界等级
    GameWorld.Log("    PyGameData.g_familyWarFamilyIDList: %s" % PyGameData.g_familyWarFamilyIDList)
    GameWorld.Log("    PyGameData.g_familyWarMemDict: %s" % PyGameData.g_familyWarMemDict)
    GameWorld.Log("    warFamilyMemInfo: %s" % warFamilyMemInfo)
    GameWorld.Log("    通用记录对战家族数: %s" % warBatRecList.Count())
    GameWorld.Log("    通用记录参与玩家数: %s" % warMemRecList.Count())
    GameWorld.Log("    当前世界等级: %s" % worldLV)
    GameWorld.Log("    仙盟联赛首轮比赛分组确认完毕!")
    PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_Round, FamilyWarRound_First) # 设置已处理过的轮次
    Sync_FamilyWarInfo()
    return
def AddFamilyWarMem(playerID, familyID, warMemRecList=None):
@@ -467,18 +495,38 @@
        return
    if playerID in PyGameData.g_familyWarMemDict:
        GameWorld.DebugLog("本周已经添加过该成员所属参赛仙盟,不重复添加!playerID=%s,familyID=%s,warFamilyID=%s" 
                           % (playerID, familyID, PyGameData.g_familyWarMemDict[playerID]))
                           % (playerID, familyID, GetFWMemFamilyID(PyGameData.g_familyWarMemDict[playerID])))
        return
    if not warMemRecList:
        warMemRecList = GameWorld.GetUniversalRecMgr().GetTypeList(ShareDefine.Def_UniversalGameRecType_FamilyWarMember)
    if not warMemRecList:
        return
    recData = warMemRecList.AddRec()
    recData.SetValue1(playerID)
    recData.SetValue2(familyID)
    PyGameData.g_familyWarMemDict[playerID] = familyID # 设置玩家对应的仙盟ID,本周联赛只能在该仙盟时才能进入战场
    SetFWMemPlayerID(recData, playerID)
    SetFWMemFamilyID(recData, familyID)
    PyGameData.g_familyWarMemDict[playerID] = recData # 设置玩家对应的仙盟ID,本周联赛只能在该仙盟时才能进入战场
    GameWorld.DebugLog("    添加仙盟联赛战斗人员: playerID=%s,familyID=%s" % (playerID, familyID))
    return True
def OnPlayerChangeMap(curPlayer):
    ## 玩家进入仙盟联赛地图
    if curPlayer.GetMapID() != ChConfig.Def_FBMapID_FamilyWar:
        return
    playerID = curPlayer.GetPlayerID()
    familyID = curPlayer.GetFamilyID()
    if playerID not in PyGameData.g_familyWarMemDict:
        return
    recData = PyGameData.g_familyWarMemDict[playerID]
    if GetFWMemIsJoin(recData):
        GameWorld.DebugLog("已经进入过仙盟联赛战场! ", playerID)
        return
    warFamilyID = GetFWMemFamilyID(recData)
    if familyID != warFamilyID:
        GameWorld.DebugLog("进入战场时参赛仙盟ID不一致! familyID=%s,warFamilyID=%s" % (familyID, warFamilyID), playerID)
        return
    SetFWMemIsJoin(recData, 1)
    GameWorld.Log("玩家进入仙盟联赛战场: familyID=%s" % (familyID), playerID)
    return
def __DoFristRoundRandBattle(warBatRecList, groupID, groupFamilyList):
    ## 执行首轮联赛分组仙盟随机匹配比赛, 两两随机
@@ -858,8 +906,9 @@
        GameWorld.Log("除0后仙盟ID: %s" % familyWarIDRankList)
    
    # 5. 截取到倒数第二组,最后一组下周由战力决定
    familyWarIDRankList = familyWarIDRankList[:(FamilyWar_MaxFamilyCount - FamilyWar_GroupFamilyCount)]
    updFamilyIDRankList = familyWarIDRankList[:(FamilyWar_MaxFamilyCount - FamilyWar_GroupFamilyCount)]
    GameWorld.Log("最终的排名仙盟ID: %s" % familyWarIDRankList)
    GameWorld.Log("更新的排名仙盟ID: %s" % updFamilyIDRankList)
    GameWorld.Log("    解散的仙盟ID: %s" % allDissFamilyIDList)
    # 注意: familyWarIDRankList 这个列表里的仙盟ID可能是已经解散的,但是在当前情况下还需要占用该联赛组的名额,直到下周分组定级才被顶掉
    
@@ -876,13 +925,13 @@
        if not lastRank:
            break
        updFamilyIDList.append(familyID)
        updRank = 0 if familyID not in familyWarIDRankList else (familyWarIDRankList.index(familyID) + 1)
        updRank = 0 if familyID not in updFamilyIDRankList else (updFamilyIDRankList.index(familyID) + 1)
        if updRank != lastRank:
            PlayerFamily.SetFamilyWarRank(family, updRank)
        GameWorld.Log("更新仙盟评级: familyID=%s,lastRank=%s,updRank=%s" % (familyID, lastRank, updRank))
        
    # 再更新本周新晋的联赛排名
    for updRank, familyID in enumerate(familyWarIDRankList, 1):
    for updRank, familyID in enumerate(updFamilyIDRankList, 1):
        if familyID in updFamilyIDList:
            continue
        family = familyMgr.FindFamily(familyID)
@@ -898,6 +947,7 @@
    
    if familyWarIDRankList:
        UpdFamilyWarChampion(familyWarIDRankList[0])
        GiveFamilyWinRankAuctionReward(familyWarIDRankList)
    
    PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_Round, 0) # 重置对战轮次
    PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_AllOver, 1) # 设置已经处理过总结算
@@ -914,13 +964,15 @@
    GameWorld.Log("上周冠军仙盟ID: %s" % lastChampionFamilyID)
    GameWorld.Log("本周冠军仙盟ID: %s" % championFamilyID)
    winCount = GetFWChampionWinCount(championRecData)
    rewardWinCount = winCount + 1
    GiveFamilyWinCountAuctionReward(championFamilyID, rewardWinCount)
    if lastChampionFamilyID == championFamilyID:
        winCount += 1
        SetFWChampionWinCount(championRecData, winCount)
        GameWorld.Log("    更新连胜: %s" % winCount)
        AllotWinRewardBySystem(championRecData, False)
        #AllotWinRewardBySystem(championRecData, False)
    else:
        AllotWinRewardBySystem(championRecData, True)
        #AllotWinRewardBySystem(championRecData, True)
        SetFWChampionFamilyID(championRecData, championFamilyID)
        SetFWChampionWinCount(championRecData, 1)
        SetFWChampionWinRewardAllot(championRecData, 0)
@@ -954,6 +1006,101 @@
        PlayerControl.WorldNotify(0, "FamilyMatchSecondSessionEnd", [championFamilyName])
    return
def GiveFamilyWinCountAuctionReward(familyID, rewardWinCount):
    ## 给仙盟连胜仙盟拍品奖励
    winRewardStartCount = IpyGameDataPY.GetFuncCfg("FamilyMatchLianWinReward", 2) # 起始连胜奖励次数
    winRewardSpaceCount = IpyGameDataPY.GetFuncCfg("FamilyMatchLianWinReward", 3) # 连胜奖励间隔次数
    rewardIndex = -1
    if rewardWinCount == winRewardStartCount:
        rewardIndex = 0
    elif rewardWinCount > winRewardStartCount:
        winCountValue = rewardWinCount - winRewardStartCount
        if winCountValue % winRewardSpaceCount == 0:
            rewardIndex = winCountValue / winRewardSpaceCount
    if rewardIndex == -1:
        GameWorld.Log("不需要发放连胜仙盟拍品奖励: familyID=%s,rewardWinCount=%s" % (familyID, rewardWinCount))
        return
    winRewardLoopList = IpyGameDataPY.GetFuncCfg("FamilyMatchLianWinReward", 4) # 连胜仙盟拍品循环奖励[[[拍品ID,个数], ...], ...]
    loopIndex = rewardIndex % len(winRewardLoopList)
    familyAuctionItemList = winRewardLoopList[loopIndex]
    family = GameWorld.GetFamilyManager().FindFamily(familyID)
    if not family:
        return
    familyPlayerIDList = []
    for i in xrange(family.GetCount()):
        member = family.GetAt(i)
        memPlayerID = member.GetPlayerID()
        if memPlayerID not in PyGameData.g_familyWarMemDict:
            continue
        recData = PyGameData.g_familyWarMemDict[memPlayerID]
        if not GetFWMemIsJoin(recData):
            continue
        familyPlayerIDList.append(memPlayerID)
    familyAuctionItemDict = {} # {仙盟ID:[[享受收益的成员ID, ...], [[拍品ID,个数], [拍品ID,个数,是否拍品], ...]], ...}
    familyAuctionItemDict[familyID] = [familyPlayerIDList, familyAuctionItemList]
    GameWorld.Log("发放连胜仙盟拍品奖励: familyID=%s,rewardWinCount=%s,rewardIndex=%s,loopIndex=%s"
                  % (familyID, rewardWinCount, rewardIndex, loopIndex))
    GameWorld.Log("    familyPlayerIDList=%s" % familyPlayerIDList)
    GameWorld.Log("    familyAuctionItemList=%s" % familyAuctionItemList)
    AuctionHouse.DoAddFamilyAuctionItem(ChConfig.Def_FBMapID_FamilyWar, familyAuctionItemDict)
    return
def GiveFamilyWinRankAuctionReward(familyWarIDRankList):
    ## 给仙盟排名仙盟拍品奖励
    warWorldLV = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_StartWorldLV)
    GameWorld.Log("发放排名仙盟拍品奖励: warWorldLV=%s, familyWarIDRankList=%s" % (warWorldLV, familyWarIDRankList))
    cfgRankKey = 1
    cfgRankAuctionItemDict = {}
    ipyDataMgr = IpyGameDataPY.IPY_Data()
    for index in xrange(ipyDataMgr.GetFamilyWarRankAwardCount()):
        ipyData = ipyDataMgr.GetFamilyWarRankAwardByIndex(index)
        if warWorldLV > ipyData.GetWarWorldLV() and cfgRankAuctionItemDict:
            break
        warRank = ipyData.GetWarRank()
        auctionItemList = ipyData.GetRankAuctionItem()
        for rank in range(cfgRankKey, warRank + 1):
            cfgRankAuctionItemDict[rank] = auctionItemList
        cfgRankKey = warRank + 1
    familyAuctionItemDict = {} # {仙盟ID:[[享受收益的成员ID, ...], [[拍品ID,个数], [拍品ID,个数,是否拍品], ...]], ...}
    for rank, familyID in enumerate(familyWarIDRankList, 1):
        if rank not in cfgRankAuctionItemDict:
            GameWorld.Log("    rank=%s,familyID=%s,该名次没有找到奖励!" % (rank, familyID))
            continue
        family = GameWorld.GetFamilyManager().FindFamily(familyID)
        if not family:
            GameWorld.Log("    rank=%s,familyID=%s,仙盟不存在!" % (rank, familyID))
            continue
        familyPlayerIDList = []
        for i in xrange(family.GetCount()):
            member = family.GetAt(i)
            memPlayerID = member.GetPlayerID()
            if memPlayerID not in PyGameData.g_familyWarMemDict:
                continue
            recData = PyGameData.g_familyWarMemDict[memPlayerID]
            if not GetFWMemIsJoin(recData):
                continue
            familyPlayerIDList.append(memPlayerID)
        familyAuctionItemList = cfgRankAuctionItemDict[rank]
        familyAuctionItemDict[familyID] = [familyPlayerIDList, familyAuctionItemList]
        GameWorld.Log("    rank=%s,familyID=%s,familyPlayerIDList=%s,familyAuctionItemList=%s"
                      % (rank, familyID, familyPlayerIDList, familyAuctionItemList))
    AuctionHouse.DoAddFamilyAuctionItem(ChConfig.Def_FBMapID_FamilyWar, familyAuctionItemDict)
    return
def GetFamilyWarChampionRecData():
    universalRecMgr = GameWorld.GetUniversalRecMgr()
    championRecList = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_FamilyWarChampion)
@@ -963,55 +1110,57 @@
def AllotWinRewardBySystem(championRecData, isAll):
    ## 系统自动分配仙盟未分配的连胜奖励
    familyID = GetFWChampionFamilyID(championRecData)
    leaderID = GetFWChampionLeaderID(championRecData)
    winCount = GetFWChampionWinCount(championRecData) # 当前连胜次数
    lastAllotWinCount = GetFWChampionWinRewardAllot(championRecData) # 上次已分配的连胜奖励次数
    endWinCount = GetFWChampionEndWinCount(championRecData) # 终结对手的连胜次数
    winRewardItemList = IpyGameDataPY.GetFuncEvalCfg("FamilyMatchLianWinReward", 1) # 连胜奖励
    winRewardStartCount = IpyGameDataPY.GetFuncCfg("FamilyMatchLianWinReward", 2) # 起始连胜奖励次数
    winRewardSpaceCount = IpyGameDataPY.GetFuncCfg("FamilyMatchLianWinReward", 3) # 连胜奖励间隔次数
    if not winRewardItemList or not winRewardStartCount or not winRewardSpaceCount:
        return
    updAllotWinCount = 0 # 更新的已分配到的连胜次数
    startRewardWinCount = winRewardStartCount if not lastAllotWinCount else (lastAllotWinCount + winRewardSpaceCount) # 下次连胜奖励次数
    sysAllotWinCountList = range(startRewardWinCount, winCount + 1, winRewardSpaceCount)
    isAllotEndWinCount = (endWinCount and (isAll or sysAllotWinCountList))
    if not isAll and sysAllotWinCountList:
        sysAllotWinCountList = sysAllotWinCountList[:-1] # 保留一个可手动分配, 其余自动分配
    if sysAllotWinCountList:
        updAllotWinCount = sysAllotWinCountList[-1]
    sysAllotCount = len(sysAllotWinCountList) # 系统自动发放的奖励次数
    if isAllotEndWinCount:
        sysAllotCount += 1
    if sysAllotCount <= 0:
        #GameWorld.Log("无需自动分配奖励!上次奖励连胜次数=%s,当前连胜数=%s,终结连胜=%s,isAll=%s,sysAllotWinCountList=%s"
        #              % (lastAllotWinCount, winCount, endWinCount, isAll, sysAllotWinCountList))
        return
    if sysAllotCount > 1:
        winRewardItemList = copy.deepcopy(winRewardItemList)
        for itemInfo in winRewardItemList:
            itemInfo[1] *= sysAllotCount
    GameWorld.Log("系统自动分配连胜奖励给盟主!上次奖励连胜次数=%s,当前连胜数=%s,终结连胜=%s,分配次数=%s,物品=%s,isAll=%s,familyID=%s,leaderID=%s"
                  % (lastAllotWinCount, winCount, endWinCount, sysAllotCount, winRewardItemList, isAll, familyID, leaderID))
    if sysAllotWinCountList:
        GameWorld.Log("    sysAllotWinCountList=%s" % sysAllotWinCountList)
    if endWinCount:
        GameWorld.Log("    重置已分配终结对手连胜次数奖励!")
        SetFWChampionEndWinCount(championRecData, 0)
    if updAllotWinCount:
        GameWorld.Log("    更新已分配到的连胜次数: %s" % updAllotWinCount)
        SetFWChampionWinRewardAllot(championRecData, updAllotWinCount)
    PlayerCompensation.SendMailByKey("FamilyMatchWinAllotMail2", [leaderID], winRewardItemList)
    GameWorld.Log("    -----------------------")
    ## 单号 7195 2019-06-10 去除分配奖励,连胜改为拍品奖励
    return
#    familyID = GetFWChampionFamilyID(championRecData)
#    leaderID = GetFWChampionLeaderID(championRecData)
#    winCount = GetFWChampionWinCount(championRecData) # 当前连胜次数
#    lastAllotWinCount = GetFWChampionWinRewardAllot(championRecData) # 上次已分配的连胜奖励次数
#    endWinCount = GetFWChampionEndWinCount(championRecData) # 终结对手的连胜次数
#
#    winRewardItemList = IpyGameDataPY.GetFuncEvalCfg("FamilyMatchLianWinReward", 1) # 连胜奖励
#    winRewardStartCount = IpyGameDataPY.GetFuncCfg("FamilyMatchLianWinReward", 2) # 起始连胜奖励次数
#    winRewardSpaceCount = IpyGameDataPY.GetFuncCfg("FamilyMatchLianWinReward", 3) # 连胜奖励间隔次数
#    if not winRewardItemList or not winRewardStartCount or not winRewardSpaceCount:
#        return
#
#    updAllotWinCount = 0 # 更新的已分配到的连胜次数
#    startRewardWinCount = winRewardStartCount if not lastAllotWinCount else (lastAllotWinCount + winRewardSpaceCount) # 下次连胜奖励次数
#    sysAllotWinCountList = range(startRewardWinCount, winCount + 1, winRewardSpaceCount)
#    isAllotEndWinCount = (endWinCount and (isAll or sysAllotWinCountList))
#
#    if not isAll and sysAllotWinCountList:
#        sysAllotWinCountList = sysAllotWinCountList[:-1] # 保留一个可手动分配, 其余自动分配
#    if sysAllotWinCountList:
#        updAllotWinCount = sysAllotWinCountList[-1]
#
#    sysAllotCount = len(sysAllotWinCountList) # 系统自动发放的奖励次数
#    if isAllotEndWinCount:
#        sysAllotCount += 1
#
#    if sysAllotCount <= 0:
#        #GameWorld.Log("无需自动分配奖励!上次奖励连胜次数=%s,当前连胜数=%s,终结连胜=%s,isAll=%s,sysAllotWinCountList=%s"
#        #              % (lastAllotWinCount, winCount, endWinCount, isAll, sysAllotWinCountList))
#        return
#
#    if sysAllotCount > 1:
#        winRewardItemList = copy.deepcopy(winRewardItemList)
#        for itemInfo in winRewardItemList:
#            itemInfo[1] *= sysAllotCount
#    GameWorld.Log("系统自动分配连胜奖励给盟主!上次奖励连胜次数=%s,当前连胜数=%s,终结连胜=%s,分配次数=%s,物品=%s,isAll=%s,familyID=%s,leaderID=%s"
#                  % (lastAllotWinCount, winCount, endWinCount, sysAllotCount, winRewardItemList, isAll, familyID, leaderID))
#    if sysAllotWinCountList:
#        GameWorld.Log("    sysAllotWinCountList=%s" % sysAllotWinCountList)
#    if endWinCount:
#        GameWorld.Log("    重置已分配终结对手连胜次数奖励!")
#        SetFWChampionEndWinCount(championRecData, 0)
#    if updAllotWinCount:
#        GameWorld.Log("    更新已分配到的连胜次数: %s" % updAllotWinCount)
#        SetFWChampionWinRewardAllot(championRecData, updAllotWinCount)
#    PlayerCompensation.SendMailByKey("FamilyMatchWinAllotMail2", [leaderID], winRewardItemList)
#    GameWorld.Log("    -----------------------")
#    return
#// A4 10 仙盟联赛连胜奖励分配 #tagCGFamilyWarWinRewardAllot
#
@@ -1021,58 +1170,60 @@
#    DWORD        MemPlayerID;    //分配给的仙盟成员玩家ID
#};
def OnFamilyWarWinRewardAllot(index, clientData, tick):
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    memPlayerID = clientData.MemPlayerID
    playerID = curPlayer.GetPlayerID()
    curFamily = curPlayer.GetFamily()
    if curFamily == None:
        return
    curMember = curFamily.FindMember(playerID)
    if curMember == None:
        return
    if curMember.GetFamilyLV() != IPY_GameServer.fmlLeader:
        GameWorld.Log("不是盟主,不能分配连胜奖励!", playerID)
        return
    familyID = curFamily.GetID()
    curTagMember = curFamily.FindMember(memPlayerID)
    if curTagMember == None:
        GameWorld.Log("仙盟没有该成员,无法分配连胜奖励!familyID=%s,memPlayerID=%s" % (familyID, memPlayerID), playerID)
        return
    championRecData = GetFamilyWarChampionRecData()
    championFamilyID = GetFWChampionFamilyID(championRecData)
    if familyID != championFamilyID:
        GameWorld.Log("非王者仙盟,无法分配连胜奖励!championFamilyID=%s,familyID=%s" % (championFamilyID, familyID), playerID)
        return
    endWinCount = GetFWChampionEndWinCount(championRecData) # 终结对手的连胜次数
    if endWinCount:
        SetFWChampionEndWinCount(championRecData, 0)
        GameWorld.Log("分配终结仙盟连胜奖励!familyID=%s,endWinCount=%s" % (familyID, endWinCount), playerID)
    else:
        winCount = GetFWChampionWinCount(championRecData) # 当前连胜次数
        lastAllotWinCount = GetFWChampionWinRewardAllot(championRecData) # 上次已分配的连胜奖励次数
        winRewardStartCount = IpyGameDataPY.GetFuncCfg("FamilyMatchLianWinReward", 2) # 起始连胜奖励次数
        winRewardSpaceCount = IpyGameDataPY.GetFuncCfg("FamilyMatchLianWinReward", 3) # 连胜奖励间隔次数
        nextRewardWinCount = winRewardStartCount if not lastAllotWinCount else (lastAllotWinCount + winRewardSpaceCount) # 下次连胜奖励次数
        if winCount < nextRewardWinCount:
            GameWorld.Log("连胜次数不足,无法分配连胜奖励!已分配连胜奖励次数=%s,下次连胜奖励次数(%s) > 当前连胜次数(%s)"
                          % (lastAllotWinCount, nextRewardWinCount, winCount), playerID)
            return
        SetFWChampionWinRewardAllot(championRecData, nextRewardWinCount)
        GameWorld.Log("分配仙盟连胜奖励!familyID=%s,分配连胜数=%s" % (familyID, nextRewardWinCount), playerID)
    winRewardItemList = IpyGameDataPY.GetFuncEvalCfg("FamilyMatchLianWinReward", 1) # 连胜奖励
    PlayerCompensation.SendMailByKey("FamilyMatchWinAllotMail1", [memPlayerID], winRewardItemList)
    PlayerUniversalGameRec.SendUniversalGameRecSingle(curPlayer, championRecData) # 同步给该玩家
    # <color=#44e863FF>%s0</color>仙盟盟主将连胜奖励<color=#44e863FF><Word info=item id=%s1/></color>分配给<color=#44e863FF>%s2</color>,神兵降世
    notifyItemID = winRewardItemList[0][0]
    PlayerControl.WorldNotify(0, "FamilyMatchLianWinReward", [curFamily.GetName(), notifyItemID, curTagMember.GetName()])
    # 单号 7195 2019-06-10 去除分配奖励,连胜改为拍品奖励
    return
#    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
#    memPlayerID = clientData.MemPlayerID
#    playerID = curPlayer.GetPlayerID()
#    curFamily = curPlayer.GetFamily()
#    if curFamily == None:
#        return
#    curMember = curFamily.FindMember(playerID)
#    if curMember == None:
#        return
#    if curMember.GetFamilyLV() != IPY_GameServer.fmlLeader:
#        GameWorld.Log("不是盟主,不能分配连胜奖励!", playerID)
#        return
#
#    familyID = curFamily.GetID()
#    curTagMember = curFamily.FindMember(memPlayerID)
#    if curTagMember == None:
#        GameWorld.Log("仙盟没有该成员,无法分配连胜奖励!familyID=%s,memPlayerID=%s" % (familyID, memPlayerID), playerID)
#        return
#
#    championRecData = GetFamilyWarChampionRecData()
#    championFamilyID = GetFWChampionFamilyID(championRecData)
#    if familyID != championFamilyID:
#        GameWorld.Log("非王者仙盟,无法分配连胜奖励!championFamilyID=%s,familyID=%s" % (championFamilyID, familyID), playerID)
#        return
#
#    endWinCount = GetFWChampionEndWinCount(championRecData) # 终结对手的连胜次数
#    if endWinCount:
#        SetFWChampionEndWinCount(championRecData, 0)
#        GameWorld.Log("分配终结仙盟连胜奖励!familyID=%s,endWinCount=%s" % (familyID, endWinCount), playerID)
#
#    else:
#        winCount = GetFWChampionWinCount(championRecData) # 当前连胜次数
#        lastAllotWinCount = GetFWChampionWinRewardAllot(championRecData) # 上次已分配的连胜奖励次数
#
#        winRewardStartCount = IpyGameDataPY.GetFuncCfg("FamilyMatchLianWinReward", 2) # 起始连胜奖励次数
#        winRewardSpaceCount = IpyGameDataPY.GetFuncCfg("FamilyMatchLianWinReward", 3) # 连胜奖励间隔次数
#        nextRewardWinCount = winRewardStartCount if not lastAllotWinCount else (lastAllotWinCount + winRewardSpaceCount) # 下次连胜奖励次数
#        if winCount < nextRewardWinCount:
#            GameWorld.Log("连胜次数不足,无法分配连胜奖励!已分配连胜奖励次数=%s,下次连胜奖励次数(%s) > 当前连胜次数(%s)"
#                          % (lastAllotWinCount, nextRewardWinCount, winCount), playerID)
#            return
#        SetFWChampionWinRewardAllot(championRecData, nextRewardWinCount)
#        GameWorld.Log("分配仙盟连胜奖励!familyID=%s,分配连胜数=%s" % (familyID, nextRewardWinCount), playerID)
#
#    winRewardItemList = IpyGameDataPY.GetFuncEvalCfg("FamilyMatchLianWinReward", 1) # 连胜奖励
#    PlayerCompensation.SendMailByKey("FamilyMatchWinAllotMail1", [memPlayerID], winRewardItemList)
#    PlayerUniversalGameRec.SendUniversalGameRecSingle(curPlayer, championRecData) # 同步给该玩家
#
#    # <color=#44e863FF>%s0</color>仙盟盟主将连胜奖励<color=#44e863FF><Word info=item id=%s1/></color>分配给<color=#44e863FF>%s2</color>,神兵降世
#    notifyItemID = winRewardItemList[0][0]
#    PlayerControl.WorldNotify(0, "FamilyMatchLianWinReward", [curFamily.GetName(), notifyItemID, curTagMember.GetName()])
#    return
def MapServer_FamilyWarOver(msgList):
    ## 地图仙盟战结束
@@ -1114,4 +1265,11 @@
        
    return
def Sync_FamilyWarInfo(curPlayer=None):
    warInfo = ChPyNetSendPack.tagGCFamilyWarInfo()
    warInfo.WorldLV = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_StartWorldLV)
    NetPackCommon.SendPackByPlayer(warInfo, curPlayer)
    return
ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
@@ -520,6 +520,12 @@
                        ("WORD", "LVLimit", 0),
                        ),
                "FamilyWarRankAward":(
                        ("WORD", "WarWorldLV", 1),
                        ("BYTE", "WarRank", 0),
                        ("list", "RankAuctionItem", 0),
                        ),
                "FairyDomain":(
                        ("WORD", "ID", 1),
                        ("DWORD", "HourCntPubLimit", 0),
@@ -1550,6 +1556,19 @@
    def GetNotifyInfoLoop(self): return self.NotifyInfoLoop # 全服提示信息 - 循环广播[间隔分钟, 广播key]
    def GetLVLimit(self): return self.LVLimit # 限制等级
# 仙盟联赛排名奖励表
class IPY_FamilyWarRankAward():
    def __init__(self):
        self.WarWorldLV = 0
        self.WarRank = 0
        self.RankAuctionItem = []
        return
    def GetWarWorldLV(self): return self.WarWorldLV # 联赛世界等级
    def GetWarRank(self): return self.WarRank # 联赛排名
    def GetRankAuctionItem(self): return self.RankAuctionItem # 拍品奖励[[拍品ID,个数], ...]
# 缥缈仙域表
class IPY_FairyDomain():
    
@@ -1679,6 +1698,8 @@
        self.ipyNewUniquenessArriveLen = len(self.ipyNewUniquenessArriveCache)
        self.ipyActLuckyTreasureCache = self.__LoadFileData("ActLuckyTreasure", IPY_ActLuckyTreasure)
        self.ipyActLuckyTreasureLen = len(self.ipyActLuckyTreasureCache)
        self.ipyFamilyWarRankAwardCache = self.__LoadFileData("FamilyWarRankAward", IPY_FamilyWarRankAward)
        self.ipyFamilyWarRankAwardLen = len(self.ipyFamilyWarRankAwardCache)
        self.ipyFairyDomainCache = self.__LoadFileData("FairyDomain", IPY_FairyDomain)
        self.ipyFairyDomainLen = len(self.ipyFairyDomainCache)
        Log("IPY_FuncConfig count=%s" % len(self.ipyFuncConfigDict))
@@ -1939,6 +1960,8 @@
    def GetNewUniquenessArriveByIndex(self, index): return self.ipyNewUniquenessArriveCache[index]
    def GetActLuckyTreasureCount(self): return self.ipyActLuckyTreasureLen
    def GetActLuckyTreasureByIndex(self, index): return self.ipyActLuckyTreasureCache[index]
    def GetFamilyWarRankAwardCount(self): return self.ipyFamilyWarRankAwardLen
    def GetFamilyWarRankAwardByIndex(self, index): return self.ipyFamilyWarRankAwardCache[index]
    def GetFairyDomainCount(self): return self.ipyFairyDomainLen
    def GetFairyDomainByIndex(self, index): return self.ipyFairyDomainCache[index]
ServerPython/CoreServerGroup/GameServer/Script/NetPackCommon.py
@@ -17,7 +17,7 @@
# @change: "2014-12-23 15:30" xmnathan GameServer增加根据LineNO发送Py自定义包接口
# @change: "2015-10-22 23:00" hxp 增加Recv_MergerChildToCenter
#-------------------------------------------------------------------------------
"""Version = 2015-10-22 23:00"""
#"""Version = 2015-10-22 23:00"""
#-------------------------------------------------------------------------------
#---导入---
import IPY_GameServer
@@ -30,6 +30,7 @@
import traceback
import ChMapToGamePyPack
import CrossRealmMsg
import PlayerControl
#-------------------------------------------------------------------------------
#---全局变量---
@@ -224,6 +225,23 @@
    innerPackData = clientPack.GetBuffer()
    curPlayer.Sync_GeneralPack(len(innerPackData), innerPackData)
    
def SendPackByPlayer(clientPack, curPlayer=None):
    ## 发送封包,当curPlayer为None时则发送全服玩家
    if not curPlayer:
        # 全服广播在线玩家
        playerManager = GameWorld.GetPlayerManager()
        for i in xrange(playerManager.GetActivePlayerCount()):
            curPlayer = playerManager.GetActivePlayerAt(i)
            if curPlayer == None:
                continue
            if PlayerControl.GetIsTJG(curPlayer):
                continue
            SendFakePack(curPlayer, clientPack)
    else:
        if PlayerControl.GetIsTJG(curPlayer):
            return
        SendFakePack(curPlayer, clientPack)
    return
#-------------------------------------------------------------------------------
#---Py封包注册信息
ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
@@ -54,6 +54,7 @@
import PlayerGeTui
import PlayerStore
import GameWorldActionControl
import GameWorldFamilyWar
import PlayerFBHelpBattle
import GMT_CTG
import PyGameData
@@ -684,6 +685,7 @@
    GameWorldBoss.OnPlayerChangeMap(curPlayer)
    PlayerFamily.OnPlayerChangeMap(curPlayer, tick)
    PlayerFamilyParty.OnPlayerChangeMap(curPlayer, tick)
    GameWorldFamilyWar.OnPlayerChangeMap(curPlayer)
    return 
## 玩家切换真实地图
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerDBGSEvent.py
@@ -96,6 +96,8 @@
Def_FamilyWar_Round = 'FamilyWar_Round'
#仙盟联赛是否已经处理过总结算
Def_FamilyWar_AllOver = 'FamilyWar_AllOver'
#仙盟联赛首轮开始时的世界等级
Def_FamilyWar_StartWorldLV = 'FamilyWar_StartWorldLV'
#服务器开服自动逻辑处理 年
Def_Server_Year = 'Def_Server_Year'
ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py
@@ -52,7 +52,7 @@
g_sortFamilyIDList = [] #仙盟排序顺序 [familyID, ...]
g_familyWarFightingIDList = [] # 仙盟联赛中正在战斗中的仙盟ID列表 [familyID, ...]
g_familyWarFamilyIDList = [] # 仙盟联赛参赛仙盟ID列表 [familyID, ...]
g_familyWarMemDict = {} # 仙盟联赛参赛人员名单 {playerID:familyID, ...}
g_familyWarMemDict = {} # 仙盟联赛参赛人员名单 {playerID:memRecData, ...}
#boss刷新排序列表
g_sortBOSSRefreshList = []
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -168,6 +168,8 @@
Def_Notify_WorldKey_FamilyPartyInfo = "FamilyPartyInfo"  # 仙盟宴会数据
Def_Notify_WorldKey_AddFamilyAuctionItem = "AddFamilyAuctionItem"  # 添加仙盟拍品
Def_Notify_WorldKey_CrossServerConnState = "CrossServerConnState"  # 跨服服务器链接状态
Def_Notify_WorldKey_CrossServerOpen = "CrossServerOpen"  # 跨服服务器是否开启中
Def_Notify_WorldKey_CrossZoneName = "CrossZoneName"  # 跨服分区名
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -4829,6 +4829,58 @@
#------------------------------------------------------
# AC 01 仙盟联赛信息通知 #tagGCFamilyWarInfo
class  tagGCFamilyWarInfo(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("WorldLV", c_ushort),    # 当前进行中的联赛世界等级
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xAC
        self.SubCmd = 0x01
        return
    def ReadData(self, stringData, _pos=0, _len=0):
        self.Clear()
        memmove(addressof(self), stringData[_pos:], self.GetLength())
        return _pos + self.GetLength()
    def Clear(self):
        self.Cmd = 0xAC
        self.SubCmd = 0x01
        self.WorldLV = 0
        return
    def GetLength(self):
        return sizeof(tagGCFamilyWarInfo)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// AC 01 仙盟联赛信息通知 //tagGCFamilyWarInfo:
                                Cmd:%s,
                                SubCmd:%s,
                                WorldLV:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.WorldLV
                                )
        return DumpString
m_NAtagGCFamilyWarInfo=tagGCFamilyWarInfo()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCFamilyWarInfo.Cmd,m_NAtagGCFamilyWarInfo.SubCmd))] = m_NAtagGCFamilyWarInfo
#------------------------------------------------------
# AC 11 节日红包活动信息 #tagGCFeastRedPacketInfo
class  tagGCFeastRedPacketDay(Structure):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -86,6 +86,7 @@
import PlayerNewFairyCeremony
import PlayerFeastRedPacket
import PlayerLuckyTreasure
import PlayerAuctionHouse
import PlayerRefineStove
import PlayerFlashSale
import PlayerWishingWell
@@ -1281,6 +1282,12 @@
                PyGameData.g_familyPartyInfo = eval(msgValue)
            return
        
        if key == ShareDefine.Def_Notify_WorldKey_AddFamilyAuctionItem:
            mapID, familyAuctionItemDict = eval(msgValue)
            if GameWorld.GetMap().GetMapID() == mapID:
                PlayerAuctionHouse.DoAddFamilyAuctionItem(familyAuctionItemDict)
            return
        if key == ShareDefine.Def_Notify_WorldKey_FairyDomainLimit:
            isAdd, limitList = eval(msgValue)
            if isAdd:
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -168,6 +168,8 @@
Def_Notify_WorldKey_FamilyPartyInfo = "FamilyPartyInfo"  # 仙盟宴会数据
Def_Notify_WorldKey_AddFamilyAuctionItem = "AddFamilyAuctionItem"  # 添加仙盟拍品
Def_Notify_WorldKey_CrossServerConnState = "CrossServerConnState"  # 跨服服务器链接状态
Def_Notify_WorldKey_CrossServerOpen = "CrossServerOpen"  # 跨服服务器是否开启中
Def_Notify_WorldKey_CrossZoneName = "CrossZoneName"  # 跨服分区名