From aad1382a82aecd2acc312bf81727882c9eadbdd6 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 04 十一月 2025 15:43:18 +0800
Subject: [PATCH] 237 【福利内容】每日任务/每周任务/章节奖励-服务端(修复有配置任务条件的任务无法取到任务值的bug;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBFamily.py |  110 ++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 80 insertions(+), 30 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBFamily.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBFamily.py
index d688586..5d66d8b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBFamily.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBFamily.py
@@ -20,6 +20,8 @@
 import GameWorld
 import ShareDefine
 import PlayerControl
+import PlayerViewCache
+import PyMongoMain
 import DBDataMgr
 import ChConfig
 import DBComm
@@ -73,20 +75,23 @@
         @param dbData: 实例对应绑定的dbData
         @return: 成功返回实例对象,失败返回None
         '''
-        dataToJson = False
-        # 如果需要 dataToJson,可根据ActionType在这里处理
+        dataToJson = True
+        # 默认使用 dataToJson,如果不需要的可根据 ActionType 在这里处理
         if dbData.ActionType in []:
-            dataToJson = True
+            dataToJson = False
         actionData = FamilyActionData(dbData, dataToJson)
         self.__actionDataList.append(actionData)
         return actionData
     
-    def AddAction(self, fullClear=True):
+    def AddAction(self, maxCount=None):
         ## 添加仙盟Action数据
-        # @param fullClear: 数据条数超过最大数时是否清除最早一条,并创建一条新记录
+        # @param maxCount: 可传入由配置决定的最大条数,如果为None则进一步取程序默认设定的最大条数,都没配置的话默认不限条数
         
+        fullClear = True
+        if maxCount == None:
+            maxCount = ShareDefine.ActionTypeSaveCnt.get(self.actionType, 0)
         actionData = None
-        if self.Count() >= ChConfig.ActionTypeSaveCnt.get(self.actionType, 0):
+        if maxCount and self.Count() >= maxCount:
             if not fullClear:
                 #超过记录记录不了了
                 return actionData
@@ -127,7 +132,28 @@
         elif False:
             aData = FamilyActionData()
         return aData
-        
+    
+    def GetActionDataByValue1(self, value1, isAdd=False):
+        ## 获取Action根据Value1
+        # @return: None or findActionData
+        findActionData = None
+        for actionData in self.__actionDataList:
+            if actionData.GetValue1() == value1:
+                findActionData = actionData
+                break
+        if not findActionData and isAdd:
+            findActionData = self.AddAction()
+            findActionData.SetValue1(value1)
+        return findActionData
+    
+    def DelActionDataByValue1(self, value1):
+        ## 删除Action根据Value1
+        for actionData in self.__actionDataList[::-1]:
+            if actionData.GetValue1() == value1:
+                self.__actionDataList.remove(actionData)
+                break
+        return
+    
 class FamilyActionMgr():
     
     def __init__(self):
@@ -135,6 +161,8 @@
         return
     
     def GetFamilyAction(self, familyID, actionType):
+        if not familyID:
+            return FamilyAction()
         if familyID not in self.__familyActionDict:
             self.__familyActionDict[familyID] = {}
         actionDict = self.__familyActionDict[familyID]
@@ -168,6 +196,7 @@
         self.__dbData = DBStruct.tagDBFamilyMem() if not dbData else dbData
         return
     
+    def GetFamily(self): return DBDataMgr.GetFamilyMgr().FindFamily(self.__dbData.FamilyID)
     def GetPlayerID(self): return self.__dbData.PlayerID
     def GetFamilyID(self): return self.__dbData.FamilyID
     def GetJoinTime(self): return self.__dbData.JoinTime
@@ -183,6 +212,8 @@
     def SetFace(self, face): self.__dbData.Face = face
     def GetFacePic(self): return self.__dbData.FacePic
     def SetFacePic(self, facePic): self.__dbData.FacePic = facePic
+    def GetTitleID(self): return self.__dbData.TitleID
+    def SetTitleID(self, titleID): self.__dbData.TitleID = titleID
     def GetFightPower(self): return self.__dbData.FightPower
     def GetFightPowerEx(self): return self.__dbData.FightPowerEx
     def GetFightPowerTotal(self): return self.__dbData.FightPowerEx * ChConfig.Def_PerPointValue + self.__dbData.FightPower
@@ -198,15 +229,19 @@
     def SetFmLV(self, fmLV): self.__dbData.FmLV = fmLV
     def GetContribTotal(self): return self.__dbData.ContribTotal
     def SetContribTotal(self, contribTotal): self.__dbData.ContribTotal = contribTotal
-    def GetContribWeek(self): return self.__dbData.ContribWeek
-    def SetContribWeek(self, contribWeek): self.__dbData.ContribWeek = contribWeek
+    def GetContribDay(self): return self.__dbData.ContribDay
+    def SetContribDay(self, contribDay): self.__dbData.ContribDay = contribDay
+    def GetDonateCntTotal(self): return self.__dbData.DonateCntTotal
+    def SetDonateCntTotal(self, donateCntTotal): self.__dbData.DonateCntTotal = donateCntTotal
+    def GetDonateCntDay(self): return self.__dbData.DonateCntDay
+    def SetDonateCntDay(self, donateCntDay): self.__dbData.DonateCntDay = donateCntDay
     def GetBuffer(self): return self.__dbData.getBuffer()
     
     def RefreshMemberByID(self, playerID):
         ## 根据玩家ID更新成员数据,一般用于离线功能,如添加离线成员,直接使用查看缓存更新
         if playerID != self.GetPlayerID():
             return
-        viewCache = DBDataMgr.GetPlayerViewCacheMgr().FindViewCache(playerID)
+        viewCache = PlayerViewCache.FindViewCache(playerID)
         if not viewCache:
             return
         self.SetPlayerName(viewCache.GetPlayerName())
@@ -215,12 +250,16 @@
         self.SetRealmLV(viewCache.GetRealmLV())
         self.SetFace(viewCache.GetFace())
         self.SetFacePic(viewCache.GetFacePic())
+        self.SetTitleID(viewCache.GetTitleID())
         self.SetServerID(viewCache.GetServerID())
         fpChange = False
         fightPowerTotal = viewCache.GetFightPowerTotal()
         if self.GetFightPowerTotal() < fightPowerTotal:
             self.SetFightPowerTotal(fightPowerTotal)
             fpChange = True
+            family = self.GetFamily()
+            if family:
+                family.SetMemFightPowerChange()
         return fpChange
     
     def RefreshMember(self, curPlayer):
@@ -235,10 +274,15 @@
         self.SetRealmLV(curPlayer.GetOfficialRank())
         self.SetFace(curPlayer.GetFace())
         self.SetFacePic(curPlayer.GetFacePic())
+        self.SetTitleID(PlayerControl.GetTitleID(curPlayer))
         self.SetServerID(GameWorld.GetPlayerServerID(curPlayer))
         fightPowerTotal = PlayerControl.GetFightPower(curPlayer)
         fpChange = self.GetFightPowerTotal() != fightPowerTotal
         self.SetFightPowerTotal(fightPowerTotal)
+        if fpChange:
+            family = self.GetFamily()
+            if family:
+                family.SetMemFightPowerChange()
         return fpChange
     
 class Family():
@@ -281,6 +325,8 @@
         return
     def GetEmblemID(self): return self.__dbData.EmblemID
     def SetEmblemID(self, emblemID): self.__dbData.EmblemID = emblemID
+    def GetEmblemWord(self): return self.__dbData.EmblemWord
+    def SetEmblemWord(self, emblemWord): self.__dbData.EmblemWord = emblemWord
     def GetBuffer(self): return self.__dbData.getBuffer()
         
     ## ------------------------------------------------
@@ -296,6 +342,8 @@
         self.__memberDict[playerID] = member
         self.__memberList.append(member)
         return member
+    
+    def GetMemberIDList(self): return self.__memberDict.keys()
     
     def AddMember(self, playerID):
         member = None
@@ -336,23 +384,11 @@
             mem = FamilyMem()
         return mem
     
-    def RefreshFamilyMember(self, curPlayer):
-        ## 刷新在线成员信息
-        playerID = curPlayer.GetPlayerID()
-        familyID = curPlayer.GetFamilyID()
-        if self.GetID() != familyID:
-            return
-        member = self.FindMember(playerID)
-        if not member:
-            return
-        if member.RefreshMember(curPlayer):
-            self.__memFightPowerChange = True
-        return
-    
+    def SetMemFightPowerChange(self): self.__memFightPowerChange = True
     def RefrshFightPowerTotal(self, checkChange=False):
         ## 刷新总战力
         if checkChange and self.__memFightPowerChange == False: # 默认None,首次必刷新
-            GameWorld.DebugLog("没有成员战力变化可不刷新仙盟总战力! familyID=%s" % self.GetID())
+            #GameWorld.DebugLog("没有成员战力变化可不刷新仙盟总战力! familyID=%s" % self.GetID())
             return
         familyFightPowerTotal = 0
         for index in range(self.GetCount()):
@@ -361,7 +397,7 @@
                 continue
             familyFightPowerTotal += member.GetFightPowerTotal()
         self.SetFightPowerTotal(familyFightPowerTotal)
-        GameWorld.DebugLog("刷新仙盟总战力! familyID=%s" % self.GetID())
+        #GameWorld.DebugLog("刷新仙盟总战力! familyID=%s" % self.GetID())
         self.__memFightPowerChange = False
         return familyFightPowerTotal
     
@@ -430,9 +466,14 @@
         self.__familyList.sort(key=lambda f: (f.GetFightPowerTotal(), f.GetLV()), reverse=True)
         return
     
-    def AddFamily(self, familyID, familyName, serverID):
+    def AddFamily(self, familyName, serverID, familyID=None):
         ## 创建新仙盟
         newFamily = None
+        if familyID == None:
+            familyID = PyMongoMain.GetUserCtrlDB().GetNewFamilyID()
+            if familyID <= 0:
+                GameWorld.ErrLog("创建仙盟时生成新ID异常!")
+                return newFamily
         if familyID in self.__familyIDDict:
             GameWorld.ErrLog("创建仙盟时ID已存在! familyID=%s" % familyID)
             return newFamily
@@ -456,7 +497,7 @@
     
     def FindFamily(self, familyID):
         family = None
-        if familyID in self.__familyIDDict:
+        if familyID and familyID in self.__familyIDDict:
             family = self.__familyIDDict[familyID]
         elif False:
             family = Family()
@@ -478,7 +519,16 @@
                 self.__familyList.remove(family)
             family.OnDelete()
         self.__familyIDDict.pop(familyID, None)
+        if familyID >= ShareDefine.RealFamilyIDStart:
+            PyMongoMain.GetUserCtrlDB().FreeFamilyID(familyID) # 归还仙盟ID,重复使用
         return family
+    
+    def DelAllFamily(self):
+        for index in range(self.GetCount())[::-1]:
+            family = self.GetAt(index)
+            familyID = family.GetID()
+            self.DelFamily(familyID)
+        return
     
     def GetCount(self): return len(self.__familyList)
     def GetAt(self, index):
@@ -604,8 +654,7 @@
             family = self.FindFamily(familyID)
             if not family:
                 continue
-            member = family.InitMemberInstance(dbData)
-            GameWorld.Log("    member:%s,familyID=%s" % (member.GetPlayerID(), familyID))
+            family.InitMemberInstance(dbData)
             
         # 行为
         cnt, pos = CommFunc.ReadDWORD(datas, pos)
@@ -622,9 +671,10 @@
             action = self.__actionMgr.GetFamilyAction(familyID, actionType)
             action.InitActionInstance(dbData)
             
+        PyMongoMain.GetUserCtrlDB().OnFamilyIDInit(self.__familyIDDict.keys())
         return pos
     
-def OnMinute(curMinute):
+def OnMinute():
     
     familyMgr = DBDataMgr.GetFamilyMgr()
     # 每分钟刷新下仙盟战力排序

--
Gitblit v1.8.0