ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBattlefield.py
@@ -329,6 +329,7 @@
def OnMapServerInitOK():
    # 通知地图服务器状态
    SyncMapServerCrossBattlefieldBuyInfo()
    SyncMapServerCrossBattlefieldSysCallBuyInfo()
    return
def SyncMapServerCrossBattlefieldBuyInfo():
@@ -343,6 +344,11 @@
                buyInfo[playerID] = {"callPlayerIDList":buyRec.callPlayerIDList, "factionID":buyRec.factionID}
            syncMapBuyInfo[zoneID][hmNum] = buyInfo
    GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_CrossBattlefieldCallTeamInfo, syncMapBuyInfo)
    return
def SyncMapServerCrossBattlefieldSysCallBuyInfo():
    syncMapBuyInfo = PyGameData.g_crossBattlefieldSysCallBuyList
    GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_CrossBattlefieldSysCallBuyInfo, syncMapBuyInfo)
    return
def OnMinuteProcess():
@@ -435,7 +441,8 @@
        PyGameData.g_crossDynamicLineInfo.pop(ChConfig.Def_FBMapID_CrossBattlefield, None)
        
        PyGameData.g_overPlayerIDList = []
        PyGameData.g_crossBattlefieldSysCallBuyList = []
        hmNum = battlefieldState
        openHour, openMinute = GetHMByNum(hmNum)
        sysOpenHMList = IpyGameDataPY.GetFuncEvalCfg("CrossBattlefieldOpen", 1)
@@ -642,6 +649,49 @@
    
    hmNum = GetHMNum(openHour, openMinute)
    
    # 更新缓存
    curCache = PlayerViewCache.FindViewCache(playerID, True)
    if curCache:
        cacheDict = PlayerViewCache.GetCachePropDataDict(curCache)
        cacheDict["Name"] = playerName
        cacheDict["Job"] = job
        cacheDict["LV"] = playerLV
        cacheDict["RealmLV"] = realmLV
        cacheDict["FightPower"] = fightPower
    sysOpenHMList = IpyGameDataPY.GetFuncEvalCfg("CrossBattlefieldOpen", 1)
    if [openHour, openMinute] in sysOpenHMList:
        if playerID in PyGameData.g_crossBattlefieldSysCallBuyList:
            GameWorld.Log("玩家已经购买过该系统场次! zoneID=%s,openHour=%s,openMinute=%s" % (zoneID, openHour, openMinute), playerID)
            return
        PyGameData.g_crossBattlefieldSysCallBuyList.append(playerID)
        buyTime = int(time.time())
        GameWorld.DebugLog("玩家购买系统召集场次! zoneID=%s,openHour=%s,openMinute=%s" % (zoneID, openHour, openMinute), playerID)
        # 上榜
        billboardCallCountLimit = IpyGameDataPY.GetFuncCfg("CrossBattlefieldBillboard", 1) # 周召集榜上榜至少次数
        groupValue1, dataID, name1, name2 = zoneID, playerID, playerName, ""
        type2, value1, value2 = job, realmLV, 0
        cmpValue = buyOpenCountWeek + 1
        if cmpValue >= billboardCallCountLimit:
            CrossBillboard.UpdCrossBillboard(ShareDefine.Def_CBT_BattlefieldWCall, groupValue1, dataID, name1, name2, type2, value1, value2, cmpValue)
        # 通知子服
        serverGroupIDList = [serverGroupID]
        msgData.update({"opType":"SysCallBuy", "buyTime":buyTime})
        sendMsg = {"zoneID":zoneID, "SysCallBuyPlayerID":playerID, "opData":msgData}
        CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_BattlefieldBuy, sendMsg, serverGroupIDList)
        SyncMapServerCrossBattlefieldSysCallBuyInfo()
        buyPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)
        if buyPlayer:
            sendCMD = str(["SysCallBuy", PyGameData.g_crossBattlefieldSysCallBuyList])
            GameWorld.GetPlayerManager().MapServer_QueryPlayer(0, 0, buyPlayer.GetPlayerID(), buyPlayer.GetRealMapID(),
                                                               "CrossBattlefield", sendCMD, len(sendCMD), buyPlayer.GetRouteServerIndex())
        return
    if zoneID not in PyGameData.g_crossBattlefieldBuyInfo:
        PyGameData.g_crossBattlefieldBuyInfo[zoneID] = {}
    buyHMInfo = PyGameData.g_crossBattlefieldBuyInfo[zoneID]
@@ -671,16 +721,6 @@
        return
    
    # ================ 可以购买,以下执行添加购买场次阵营逻辑  ================
    # 更新缓存
    curCache = PlayerViewCache.FindViewCache(playerID, True)
    if curCache:
        cacheDict = PlayerViewCache.GetCachePropDataDict(curCache)
        cacheDict["Name"] = playerName
        cacheDict["Job"] = job
        cacheDict["LV"] = playerLV
        cacheDict["RealmLV"] = realmLV
        cacheDict["FightPower"] = fightPower
    
    # 新增场次购买记录
    buyTime = int(time.time())
@@ -979,7 +1019,6 @@
    GameWorld.DebugLog("收到跨服服务器同步的战场购买信息: %s" % msgData)
    
    zoneID = msgData["zoneID"]
    syncBuyHMInfo = msgData["syncBuyHMInfo"]
    opData = msgData.get("opData", {})
    
    curZoneID = GetCrossBattlefieldZoneID(GameWorld.GetServerGroupID())
@@ -987,6 +1026,19 @@
        GameWorld.ErrLog("非本服所属分区的跨服战场购买信息! curZoneID(%s) != zoneID(%s) %s" % (curZoneID, zoneID, str(msgData)))
        return
    
    if "SysCallBuyPlayerID" in msgData:
        playerID = msgData["SysCallBuyPlayerID"]
        if PlayerControl.GetDBPlayerAccIDByID(playerID):
            openHour = opData["openHour"]
            openMinute = opData["openMinute"]
            faction = opData["faction"]
            buyTime = opData["buyTime"]
            todayBuyOpenCount = opData["todayBuyOpenCount"]
            msgInfo = ["BattlefieldBuy", [openHour, openMinute, faction, todayBuyOpenCount, buyTime]]
            CrossRealmPlayer.MapServer_QueryCrossPlayerResult(playerID, "CrossBattlefield", msgInfo)
        return
    syncBuyHMInfo = msgData["syncBuyHMInfo"]
    if not syncBuyHMInfo:
        PyGameData.g_crossBattlefieldBuyInfo.pop(zoneID, None)