hch
2026-02-25 fe1843433bcf4cd3fdea1210aa753c1d8cd4e977
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#!/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