hxp
6 天以前 0b314dd1d9f0c39e8d86de7e996c62836aa19aca
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,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,首次必刷新
@@ -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,6 +519,8 @@
                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):
@@ -628,6 +671,7 @@
            action = self.__actionMgr.GetFamilyAction(familyID, actionType)
            action.InitActionInstance(dbData)
            
        PyMongoMain.GetUserCtrlDB().OnFamilyIDInit(self.__familyIDDict.keys())
        return pos
    
def OnMinute():