From 6b3b8976f49b47754a57cc710bf20a0682a80f78 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 30 十月 2025 17:09:48 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(修复主线拾取掉落战利品为绑定的bug;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBFamily.py |   87 ++++++++++++++++++++++++++++++-------------
 1 files changed, 61 insertions(+), 26 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 9ef6384..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,7 @@
 import GameWorld
 import ShareDefine
 import PlayerControl
+import PlayerViewCache
 import PyMongoMain
 import DBDataMgr
 import ChConfig
@@ -74,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
@@ -128,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):
@@ -136,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]
@@ -169,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
@@ -184,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
@@ -199,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())
@@ -216,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):
@@ -236,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():
@@ -282,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()
         
     ## ------------------------------------------------
@@ -297,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
@@ -337,19 +384,7 @@
             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,首次必刷新
@@ -362,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
     
@@ -462,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()
@@ -484,7 +519,7 @@
                 self.__familyList.remove(family)
             family.OnDelete()
         self.__familyIDDict.pop(familyID, None)
-        if familyID > ShareDefine.FackFamilyIDMax:
+        if familyID >= ShareDefine.RealFamilyIDStart:
             PyMongoMain.GetUserCtrlDB().FreeFamilyID(familyID) # 归还仙盟ID,重复使用
         return family
     

--
Gitblit v1.8.0