| | |
| | |
|
| | | if familyWarRank:
|
| | | GameWorld.Log("解散仙盟,触发更新仙盟联赛排名: delFamilyID=%s,familyWarRank=%s" % (familyID, familyWarRank))
|
| | | PlayerFamily.UpdFamilyWarRank()
|
| | | UpdFamilyWarRank()
|
| | |
|
| | | # 补发未分配的连胜奖励
|
| | | AllotWinRewardBySystem(GetFamilyWarChampionRecData(), True)
|
| | |
| | |
|
| | | # 下周分组定级
|
| | | elif stateValue == FamilyWarState_NextWeekGroupRank:
|
| | | DoLogicFamilyWar_NextWeekGroupRank()
|
| | | pass
|
| | | #废弃该阶段逻辑,因为不再支持单次活动周期跨天,所以改为过天时触发检查一下即可
|
| | | #DoLogicFamilyWar_NextWeekGroupRank()
|
| | |
|
| | | else:
|
| | | GameWorld.ErrLog("不存在该仙盟联赛状态!stateValue=%s" % stateValue)
|
| | |
| | | familyMgr = GameWorld.GetFamilyManager()
|
| | | sortFamilyIDList = PlayerFamily.GetSortFamilyIDList()
|
| | | familyCount = len(sortFamilyIDList)
|
| | | joinFamilyLVLimit = IpyGameDataPY.GetFuncCfg("FamilyMatchSet", 1)
|
| | | GameWorld.DebugLog("最低参赛仙盟等级: %s" % joinFamilyLVLimit)
|
| | | for i, familyID in enumerate(sortFamilyIDList):
|
| | | family = familyMgr.FindFamily(familyID)
|
| | | if not family:
|
| | | GameWorld.ErrLog("仙盟联赛首轮分组时无法找到该仙盟: i=%s,familyID=%s" % (i, familyID))
|
| | | continue
|
| | | groupFamilyList.append(family)
|
| | | |
| | | # 添加参赛仙盟及成员名单
|
| | | PyGameData.g_familyWarFamilyIDList.append(familyID)
|
| | | for index in xrange(family.GetCount()):
|
| | | curMember = family.GetAt(index)
|
| | | memPlayerID = curMember.GetPlayerID()
|
| | | memPlayer = curMember.GetPlayer()
|
| | | isAddOK = AddFamilyWarMem(memPlayerID, familyID, warMemRecList)
|
| | | lastJoinFamilyID = lastFamilyWarMemDict.get(memPlayerID, 0)
|
| | | # 重新通知玩家参与的仙盟
|
| | | if lastJoinFamilyID and isAddOK and lastJoinFamilyID != familyID and memPlayer:
|
| | | __NotifyPlayerJoinFamilyInfo(memPlayer, familyID)
|
| | | if family.GetLV() < joinFamilyLVLimit:
|
| | | GameWorld.Log("仙盟等级不足,无法参与联赛!familyID=%s,LV=%s,joinFamilyLVLimit=%s" % (familyID, family.GetLV(), joinFamilyLVLimit))
|
| | | else:
|
| | | groupFamilyList.append(family)
|
| | | |
| | | # 添加参赛仙盟及成员名单
|
| | | PyGameData.g_familyWarFamilyIDList.append(familyID)
|
| | | for index in xrange(family.GetCount()):
|
| | | curMember = family.GetAt(index)
|
| | | memPlayerID = curMember.GetPlayerID()
|
| | | memPlayer = curMember.GetPlayer()
|
| | | isAddOK = AddFamilyWarMem(memPlayerID, familyID, warMemRecList)
|
| | | lastJoinFamilyID = lastFamilyWarMemDict.get(memPlayerID, 0)
|
| | | # 重新通知玩家参与的仙盟
|
| | | if lastJoinFamilyID and isAddOK and lastJoinFamilyID != familyID and memPlayer:
|
| | | __NotifyPlayerJoinFamilyInfo(memPlayer, familyID)
|
| | |
|
| | | # 满一组仙盟数 or 没有仙盟了
|
| | | if len(groupFamilyList) == FamilyWar_GroupFamilyCount or i == familyCount - 1:
|
| | |
| | |
|
| | | GameWorld.Log(" PyGameData.g_familyWarFamilyIDList: %s" % PyGameData.g_familyWarFamilyIDList)
|
| | | GameWorld.Log(" PyGameData.g_familyWarMemDict: %s" % PyGameData.g_familyWarMemDict)
|
| | | GameWorld.Log(" 通用记录对战家族数: %s" % warBatRecList.Count())
|
| | | GameWorld.Log(" 通用记录参与玩家数: %s" % warMemRecList.Count())
|
| | | GameWorld.Log(" 仙盟联赛首轮比赛分组确认完毕!")
|
| | | PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_Round, FamilyWarRound_First) # 设置已处理过的轮次
|
| | | return
|
| | |
| | |
|
| | | return
|
| | |
|
| | | def DoOnDay():
|
| | | DoLogicFamilyWar_NextWeekGroupRank()
|
| | | return
|
| | |
|
| | | def DoLogicFamilyWar_NextWeekGroupRank():
|
| | | ''' 下周分组定级
|
| | | 最低级别组: 不设置联赛级别, 下周最低级别组名单由其他无联赛级别仙盟总战力排行得到
|
| | |
| | | # 这里补触发一次,防止总结算的时候服务器异常没有成功结算
|
| | | # 或 次轮没有比赛导致没有结算(次轮的仙盟都解散了才可能出现,一般不可能出现,可不考虑,如果真出现了,会在周六凌晨结算)
|
| | | __DoLogicFamilyWarAllOver()
|
| | | PlayerFamily.UpdFamilyWarRank()
|
| | | #UpdFamilyWarRank()
|
| | | return
|
| | |
|
| | | def UpdFamilyWarRank():
|
| | | '''更新仙盟联赛排名
|
| | | 注意:该逻辑在仙盟联赛周期中不可执行,仅在下周分组定级状态下可更新,由程序控制,在活动结束后结算调用
|
| | | 仙盟联赛新一周期开始时、仙盟解散时 会触发该逻辑
|
| | | '''
|
| | | #gameWorld = GameWorld.GetGameWorld()
|
| | | #state = gameWorld.GetDictByKey(ShareDefine.Def_Notify_WorldKey_FBFuncState % ChConfig.Def_FBMapID_FamilyWar)
|
| | | #if state != GameWorldFamilyWar.FamilyWarState_NextWeekGroupRank:
|
| | | # GameWorld.DebugLog("非下周分组定级阶段不可更新仙盟联赛排名!")
|
| | | # return
|
| | | |
| | | GameWorld.Log("=== 更新仙盟联赛排名 ===")
|
| | | |
| | | familyMgr = GameWorld.GetFamilyManager()
|
| | | sortFamilyIDList = PlayerFamily.GetSortFamilyIDList()
|
| | | for rank, familyID in enumerate(sortFamilyIDList, 1):
|
| | | family = familyMgr.FindFamily(familyID)
|
| | | if not family:
|
| | | continue
|
| | | curRank = PlayerFamily.GetFamilyWarRank(family)
|
| | | if not curRank:
|
| | | break
|
| | | if curRank != rank:
|
| | | PlayerFamily.SetFamilyWarRank(family, rank)
|
| | | GameWorld.Log(" 更新仙盟联赛仙盟排名: familyID=%s,curRank=%s,updRank=%s" % (family.GetID(), curRank, rank))
|
| | | |
| | | return
|
| | |
|
| | | def __DoLogicFamilyWarAllOver():
|
| | |
| | | warBatRecList = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_FamilyWarBattle)
|
| | | if not warBatRecList.Count():
|
| | | GameWorld.Log("没有仙盟联赛比赛记录,不需要结算!")
|
| | | curRoundNum = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_Round)
|
| | | PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_Round, 0) # 重置对战轮次
|
| | | PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_AllOver, 1) # 设置已经处理过总结算
|
| | | GameWorld.Log("重置轮次信息,设置已结算!curRoundNum=%s" % curRoundNum)
|
| | | return
|
| | | for i in xrange(warBatRecList.Count()):
|
| | | recData = warBatRecList.At(i)
|
| | |
| | |
|
| | | PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_Round, 0) # 重置对战轮次
|
| | | PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_AllOver, 1) # 设置已经处理过总结算
|
| | | |
| | | UpdFamilyWarRank() # 改为比赛结束后默认更新联赛排名
|
| | | return
|
| | |
|
| | | def UpdFamilyWarChampion(championFamilyID):
|