From 0ff8e21c92b39adfdf062b40c4e0147213bba70a Mon Sep 17 00:00:00 2001 From: hch <305670599@qq.com> Date: 星期一, 26 十一月 2018 23:18:29 +0800 Subject: [PATCH] 4923 【后端】【1.3】神兵技能 --- ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldFamilyWar.py | 79 +++++++++++++++++++++++++++++++-------- 1 files changed, 63 insertions(+), 16 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldFamilyWar.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldFamilyWar.py index 152d079..794ca6f 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldFamilyWar.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldFamilyWar.py @@ -223,7 +223,7 @@ if familyWarRank: GameWorld.Log("解散仙盟,触发更新仙盟联赛排名: delFamilyID=%s,familyWarRank=%s" % (familyID, familyWarRank)) - PlayerFamily.UpdFamilyWarRank() + UpdFamilyWarRank() # 补发未分配的连胜奖励 AllotWinRewardBySystem(GetFamilyWarChampionRecData(), True) @@ -294,7 +294,9 @@ # 下周分组定级 elif stateValue == FamilyWarState_NextWeekGroupRank: - DoLogicFamilyWar_NextWeekGroupRank() + pass + #废弃该阶段逻辑,因为不再支持单次活动周期跨天,所以改为过天时触发检查一下即可 + #DoLogicFamilyWar_NextWeekGroupRank() else: GameWorld.ErrLog("不存在该仙盟联赛状态!stateValue=%s" % stateValue) @@ -416,24 +418,29 @@ 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: @@ -448,6 +455,8 @@ 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 @@ -720,6 +729,10 @@ return +def DoOnDay(): + DoLogicFamilyWar_NextWeekGroupRank() + return + def DoLogicFamilyWar_NextWeekGroupRank(): ''' 下周分组定级 最低级别组: 不设置联赛级别, 下周最低级别组名单由其他无联赛级别仙盟总战力排行得到 @@ -728,7 +741,35 @@ # 这里补触发一次,防止总结算的时候服务器异常没有成功结算 # 或 次轮没有比赛导致没有结算(次轮的仙盟都解散了才可能出现,一般不可能出现,可不考虑,如果真出现了,会在周六凌晨结算) __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(): @@ -753,6 +794,10 @@ 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) @@ -857,6 +902,8 @@ PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_Round, 0) # 重置对战轮次 PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FamilyWar_AllOver, 1) # 设置已经处理过总结算 + + UpdFamilyWarRank() # 改为比赛结束后默认更新联赛排名 return def UpdFamilyWarChampion(championFamilyID): -- Gitblit v1.8.0