#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
  
 | 
##@package GMT_GetFamilyInfo  
 | 
# GMÃüÁîÖ´ÐÐ->¼Ò×åÐÅÏ¢  
 | 
#  
 | 
# @author wdb  
 | 
# @date 2012-06-14  
 | 
# @version 1.3  
 | 
#  
 | 
# ÐÞ¸Äʱ¼ä ÐÞ¸ÄÈË ÐÞ¸ÄÄÚÈÝ  
 | 
#   
 | 
# @note  
 | 
# Ä£¿éÏêϸ˵  
 | 
# @change: "2012-06-29 21:30" wdb ·µ»ØÐÅÏ¢ÊÇ·ñ¹ý³¤  
 | 
# @change: "2012-07-12 18:00" wdb ×Ö·ûת»»ÔÚÈë¿Ú´¦Àí  
 | 
# @change: "2016-09-07 03:00" hxp Ôö¼Ó²éѯȫ²¿Õ½ÃË£»Õ½Ã˲éѯ·µ»ØÐÅϢͳһ£»¾«È·²éѯ·µ»Ø³ÉÔ±ÏêÇé  
 | 
#---------------------------------------------------------------------  
 | 
#µ¼Èë  
 | 
import GMCommon  
 | 
import GameWorld  
 | 
import PlayerFamily  
 | 
#---------------------------------------------------------------------  
 | 
#È«¾Ö±äÁ¿  
 | 
#---------------------------------------------------------------------  
 | 
VER = "2016-09-07 03:00"   
 | 
#---------------------------------------------------------------------  
 | 
#Â߼ʵÏÖ(ÕâÀïcurPlayer = None)  
 | 
## Ö´ÐÐÂß¼  
 | 
#  @param curPlayer µ±Ç°Íæ¼Ò  
 | 
#  @param gmList [cmdIndex gmAccID forbidAcc]  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def OnExec(orderId, gmCmdDict):  
 | 
      
 | 
    queryType = gmCmdDict.get(GMCommon.Def_GMKey_QueryType, '')        
 | 
    familyName = gmCmdDict.get(GMCommon.Def_GMKey_FamilyName, '')  
 | 
      
 | 
    familyInfo = []  
 | 
    if queryType != 'all' and familyName == '':  
 | 
        GMCommon.GMCommandResult(orderId, gmCmdDict, GMCommon.Def_ParamErr)  
 | 
        return  
 | 
      
 | 
    # È«Ãû²éѯ  
 | 
    if queryType == 'normal':  
 | 
        curFamily = GameWorld.GetFamilyManager().FindFamilyByName(familyName)  
 | 
        familyInfo.append(GetQueryFamilyInfo(curFamily, True))  
 | 
          
 | 
    # Ä£ºý²éѯ  
 | 
    elif queryType == 'faintness':  
 | 
        familyMgr = GameWorld.GetFamilyManager()  
 | 
        sortFamilyIDList = PlayerFamily.GetSortFamilyIDList()  
 | 
        for familyID in sortFamilyIDList:  
 | 
            curFamily = familyMgr.FindFamily(familyID)  
 | 
            if not curFamily:  
 | 
                continue  
 | 
            if familyName not in curFamily.GetName():  
 | 
                continue  
 | 
            familyInfo.append(GetQueryFamilyInfo(curFamily, False))  
 | 
              
 | 
    # È«²¿  
 | 
    elif queryType == 'all':  
 | 
        familyMgr = GameWorld.GetFamilyManager()  
 | 
        sortFamilyIDList = PlayerFamily.GetSortFamilyIDList()  
 | 
        for familyID in sortFamilyIDList:  
 | 
            curFamily = familyMgr.FindFamily(familyID)  
 | 
            if not curFamily:  
 | 
                continue  
 | 
            familyInfo.append(GetQueryFamilyInfo(curFamily, False))  
 | 
              
 | 
    if len(familyInfo) > pow(2, 14):  
 | 
        #Êý¾Ý¹ý´ó  
 | 
        GMCommon.GMCommandResult(orderId, gmCmdDict, GMCommon.Def_MaxLimit)     
 | 
        return  
 | 
      
 | 
    #Ö´Ðгɹ¦  
 | 
    GMCommon.GMCommandResult(orderId, gmCmdDict, GMCommon.Def_Success, familyInfo)          
 | 
    return  
 | 
  
 | 
  
 | 
## »ñµÃÐèÒªµÄÐÅÏ¢  
 | 
#  @param gmList   
 | 
#  @return None  
 | 
def GetQueryFamilyInfo(curFamily, memberDetail):  
 | 
    if curFamily == None:  
 | 
        return {}   
 | 
      
 | 
    memberCnt = curFamily.GetCount()  
 | 
    memberInfo = []  
 | 
    onlineCnt = 0  
 | 
      
 | 
    # ±éÀú˵ÓгÉÔ±  
 | 
    for index in range(memberCnt):  
 | 
          
 | 
        curMember = curFamily.GetAt(index)  
 | 
        player = GameWorld.GetPlayerManager().FindPlayerByID(curMember.GetPlayerID())  
 | 
          
 | 
        #¡¡ÊÇ·ñÔÚÏß  
 | 
        if player != None:  
 | 
            onlineCnt += 1  
 | 
              
 | 
        if not memberDetail:  
 | 
            continue  
 | 
          
 | 
        offLineTime = curMember.GetExattr2()  
 | 
        offLineSeconds = GameWorld.GetPastSeconds(GameWorld.ChangeTimeNumToStr(offLineTime)) if offLineTime > 1 else offLineTime  
 | 
          
 | 
        # ³ÉÔ±ÐÅÏ¢  
 | 
        member = {  
 | 
                  'Name':curMember.GetName(),  
 | 
                  'LV':curMember.GetLV(),  
 | 
                  'FamilyLV':curMember.GetFamilyLV(),  
 | 
                  'ActiveValue':curMember.GetFamilyActiveValue(),  
 | 
                  'OffLineSeconds':offLineSeconds,   
 | 
                  }  
 | 
        memberInfo.append(member)  
 | 
          
 | 
    familyInfo = {  
 | 
                  'Rank':PlayerFamily.GetFamilyIDRank(curFamily.GetID()), # ÅÅÃû  
 | 
                  'WarRank':PlayerFamily.GetFamilyWarRank(curFamily), # ÁªÈüÅÅÃû  
 | 
                  'FightPower':PlayerFamily.GetFamilyTotalFightPower(curFamily), # ×ÜÕ½Á¦  
 | 
                  'FamilyName':curFamily.GetName(),  
 | 
                  'LeaderName':curFamily.GetLeaderName(),  
 | 
                  'LV':curFamily.GetLV(),  
 | 
                  'Broadcast':curFamily.GetBroadcast(),  
 | 
                  'MemberCnt':memberCnt,  
 | 
                  'OnLineCnt':onlineCnt,  
 | 
                  'ServerID':curFamily.GetServerID(),  
 | 
                  }  
 | 
    if memberInfo:  
 | 
        familyInfo['MemberInfo'] = memberInfo  
 | 
          
 | 
    return familyInfo  
 | 
      
 | 
     
 |