From 21de130631a10fd9fe1c8042bef4700fa388c48e Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期二, 28 五月 2019 15:09:35 +0800
Subject: [PATCH] 6501 宝石数量获取修改
---
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldFamilyWar.py | 80 +++++++++++++++++++++++++++++++--------
1 files changed, 63 insertions(+), 17 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldFamilyWar.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldFamilyWar.py
index 152d079..4084b7b 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldFamilyWar.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldFamilyWar.py
@@ -33,7 +33,6 @@
import random
import copy
-
'''
1. 仙盟改名
2. 比赛时仙盟关系变更,副本进行中不可变更仙盟关系
@@ -223,7 +222,7 @@
if familyWarRank:
GameWorld.Log("解散仙盟,触发更新仙盟联赛排名: delFamilyID=%s,familyWarRank=%s" % (familyID, familyWarRank))
- PlayerFamily.UpdFamilyWarRank()
+ UpdFamilyWarRank()
# 补发未分配的连胜奖励
AllotWinRewardBySystem(GetFamilyWarChampionRecData(), True)
@@ -294,7 +293,9 @@
# 下周分组定级
elif stateValue == FamilyWarState_NextWeekGroupRank:
- DoLogicFamilyWar_NextWeekGroupRank()
+ pass
+ #废弃该阶段逻辑,因为不再支持单次活动周期跨天,所以改为过天时触发检查一下即可
+ #DoLogicFamilyWar_NextWeekGroupRank()
else:
GameWorld.ErrLog("不存在该仙盟联赛状态!stateValue=%s" % stateValue)
@@ -416,24 +417,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 +454,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 +728,10 @@
return
+def DoOnDay():
+ DoLogicFamilyWar_NextWeekGroupRank()
+ return
+
def DoLogicFamilyWar_NextWeekGroupRank():
''' 下周分组定级
最低级别组: 不设置联赛级别, 下周最低级别组名单由其他无联赛级别仙盟总战力排行得到
@@ -728,7 +740,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 +793,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 +901,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