#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
##@package PyMongoDB.GMToolLogicProcess.Commands.GMT_GetFamilyInfo
|
#
|
# @todo:GM¹¤¾ßÃüÁî - ²éѯ¹«»á
|
# @author hxp
|
# @date 2026-02-13
|
# @version 1.0
|
#
|
# ÏêϸÃèÊö: GM¹¤¾ßÃüÁî - ²éѯ¹«»á
|
#
|
#-------------------------------------------------------------------------------
|
#"""Version = 2026-02-13 16:30"""
|
#-------------------------------------------------------------------------------
|
|
import GMCommon
|
import GameWorld
|
import DBDataMgr
|
|
## ÊÕµ½gmÃüÁîÖ´ÐÐ
|
# @param gmCmdDict:gmÃüÁî×Öµä
|
# @return None
|
def OnExec(gmCmdDict):
|
|
queryType = gmCmdDict.get(GMCommon.Def_GMKey_QueryType, '')
|
familyName = gmCmdDict.get(GMCommon.Def_GMKey_FamilyName, '')
|
|
if queryType != 'all' and familyName == '':
|
return GMCommon.Def_ParamErr
|
|
if GameWorld.IsMainServer():
|
crossServerID = DBDataMgr.GetFamilyMgr().GetCurCrossServerID()
|
if crossServerID:
|
return GMCommon.Def_ParamErr, "¹«»áÒѾ¿ç·þÁË£¬¿ç·þID=%s" % crossServerID
|
|
familyInfo = []
|
familyMgr = DBDataMgr.GetFamilyMgr()
|
|
# È«Ãû²éѯ
|
if queryType == 'normal':
|
curFamily = None
|
for zoneID in familyMgr.GetZoneIDListThisServer():
|
zoneMgr = familyMgr.GetZoneFamilyMgr(zoneID)
|
curFamily = zoneMgr.FindFamilyByName(familyName)
|
if curFamily:
|
break
|
familyInfo.append(GetQueryFamilyInfo(curFamily, True))
|
|
# Ä£ºý²éѯ
|
elif queryType == 'faintness':
|
for familyID in familyMgr.GetFamilyIDList():
|
curFamily = familyMgr.FindFamily(familyID)
|
if not curFamily:
|
continue
|
if familyName not in curFamily.GetName():
|
continue
|
familyInfo.append(GetQueryFamilyInfo(curFamily, False))
|
|
# È«²¿
|
elif queryType == 'all':
|
for zoneID in familyMgr.GetZoneIDListThisServer():
|
zoneMgr = familyMgr.GetZoneFamilyMgr(zoneID)
|
for index in range(zoneMgr.GetCount()):
|
curFamily = zoneMgr.GetAt(index)
|
if not curFamily:
|
continue
|
familyInfo.append(GetQueryFamilyInfo(curFamily, False))
|
|
return GMCommon.Def_Success, familyInfo
|
|
def GetQueryFamilyInfo(curFamily, memberDetail):
|
if curFamily == None:
|
return {}
|
|
familyID = curFamily.GetID()
|
familyMgr = DBDataMgr.GetFamilyMgr()
|
zoneMgr = familyMgr.GetZoneFamilyMgrByFamilyID(familyID)
|
|
memberCnt = curFamily.GetCount()
|
memberInfo = []
|
onlineCnt = 0
|
|
# ±éÀú˵ÓгÉÔ±
|
for index in range(memberCnt):
|
curMember = curFamily.GetAt(index)
|
offLineTime = curMember.GetOffTime()
|
#¡¡ÊÇ·ñÔÚÏß
|
if not offLineTime:
|
onlineCnt += 1
|
|
if not memberDetail:
|
continue
|
|
offLineSeconds = GameWorld.GetPastSeconds(GameWorld.ChangeTimeNumToStr(offLineTime)) if offLineTime > 1 else offLineTime
|
|
# ³ÉÔ±ÐÅÏ¢
|
member = {
|
'Name':curMember.GetPlayerName(),
|
'PlayerID':curMember.GetPlayerID(),
|
'LV':curMember.GetLV(),
|
'FmLV':curMember.GetFmLV(),
|
'ContribTotal':curMember.GetContribTotal(),
|
'FightPowerTotal':curMember.GetFightPowerTotal(),
|
'OffLineSeconds':offLineSeconds,
|
}
|
memberInfo.append(member)
|
|
if memberInfo:
|
memberInfo.sort(key=lambda m: (m['FmLV'], m['FightPowerTotal']), reverse=True)
|
|
leaderName = ""
|
leaderMember = curFamily.FindMember(curFamily.GetLeaderID())
|
if leaderMember:
|
leaderName = leaderMember.GetPlayerName()
|
|
familyInfo = {
|
'ZoneID':zoneMgr.GetZoneID(),
|
'Rank':zoneMgr.GetFamilyRank(familyID), # ÅÅÃû
|
#'WarRank':PlayerFamily.GetFamilyWarRank(curFamily), # ÁªÈüÅÅÃû
|
'FightPower':curFamily.GetFightPowerTotal(), # ×ÜÕ½Á¦
|
'FamilyName':curFamily.GetName(),
|
'LeaderName':leaderName,
|
'LV':curFamily.GetLV(),
|
'Broadcast':curFamily.GetBroadcast(),
|
'MemberCnt':memberCnt,
|
'OnLineCnt':onlineCnt,
|
'ServerID':curFamily.GetServerID(),
|
}
|
if memberInfo:
|
familyInfo['MemberInfo'] = memberInfo
|
|
return familyInfo
|