#!/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