| | |
| | | import GameWorld
|
| | | import ShareDefine
|
| | | import PlayerControl
|
| | | import PlayerViewCache
|
| | | import PyMongoMain
|
| | | import DBDataMgr
|
| | | import ChConfig
|
| | | import DBComm
|
| | |
| | | @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
|
| | |
| | | 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):
|
| | |
| | | return
|
| | |
|
| | | def GetFamilyAction(self, familyID, actionType):
|
| | | if not familyID:
|
| | | return FamilyAction()
|
| | | if familyID not in self.__familyActionDict:
|
| | | self.__familyActionDict[familyID] = {}
|
| | | actionDict = self.__familyActionDict[familyID]
|
| | |
| | | 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
|
| | |
| | | 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
|
| | |
| | | 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())
|
| | |
| | | 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):
|
| | |
| | | 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():
|
| | |
| | | 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()
|
| | |
|
| | | ## ------------------------------------------------
|
| | |
| | | self.__memberDict[playerID] = member
|
| | | self.__memberList.append(member)
|
| | | return member
|
| | | |
| | | def GetMemberIDList(self): return self.__memberDict.keys()
|
| | |
|
| | | def AddMember(self, playerID):
|
| | | member = None
|
| | |
| | | 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()):
|
| | |
| | | continue
|
| | | familyFightPowerTotal += member.GetFightPowerTotal()
|
| | | self.SetFightPowerTotal(familyFightPowerTotal)
|
| | | GameWorld.DebugLog("刷新仙盟总战力! familyID=%s" % self.GetID())
|
| | | #GameWorld.DebugLog("刷新仙盟总战力! familyID=%s" % self.GetID())
|
| | | self.__memFightPowerChange = False
|
| | | return familyFightPowerTotal
|
| | |
|
| | |
| | | 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
|
| | |
| | |
|
| | | 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()
|
| | |
| | | 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):
|
| | |
| | | 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)
|
| | |
| | | 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()
|
| | | # 每分钟刷新下仙盟战力排序
|