From 3432541b467d53ffe4ed3872c734e76638e30df8 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 24 十月 2025 17:58:12 +0800
Subject: [PATCH] 302 【公会】BOSS讨伐-服务端
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DB/StructData/DBFamily.py | 96 +++++++++++++++++++++++++++++++++++-------------
1 files changed, 70 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 c8bf380..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,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():
--
Gitblit v1.8.0