#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#---------------------------------------------------------------------  
 | 
#  
 | 
#---------------------------------------------------------------------  
 | 
##@package PlayerFamilyAction  
 | 
# @todo: ¼Ò×åÐÐΪ  
 | 
#  
 | 
# @author: jiang  
 | 
# @date  2011-11-30  
 | 
# @version 2.1  
 | 
# @note:   
 | 
# @change: "2013-03-13 17:00" wdb É¾³ý·â°ü  
 | 
# @change: "2013-06-06 15:00" Alee »Ö¸´¼Ò×å·â°ü  
 | 
# @change: "2013-12-06 15:00" hxp Ð޸ļÒ×åÅÅÐаñ³ÉÔ±ÅжϷµ»ØÖµ  
 | 
# @change: "2014-05-04 20:00" xmnathan Ôö¼Ó¼Ò×åÊÕÈËÉóºË·½Ê½£¬¼°¸ù¾Ý²»Í¬·½Ê½½øÐд¦Àí  
 | 
# @change: "2014-09-22 11:30" hxp Ôö¼Ó֪ͨMapServerÍæ¼ÒÉêÇë¼ÓÈë¼Ò×åÉêÇë³É¹¦Óë·ñ  
 | 
# @change: "2014-10-31 13:30" hxp »Ö¸´Õ½ÃËÐüÉÍÈÎÎñ  
 | 
# @change: "2015-03-22 17:00" hxp Ôö¼Ó¿Í»§¶Ë²éѯ¼Ò×åÐÐΪ; ¼Ò×åÐÐΪÔö¼ÓuseData  
 | 
# @change: "2015-04-02 19:00" hxp Çå³ýFamilyActionÖ§³ÖuseData  
 | 
# @change: "2015-04-07 14:00" hxp Çå³ýFamilyActionÔö¼Ó·µ»ØÖµ  
 | 
# @change: "2015-04-09 11:00" hxp ²éѯFamilyAction²»ÏÞÖÆ±¾Õ½ÃË  
 | 
# @change: "2016-05-18 16:00" hxp Ôö¼ÓÕ½Ã˹ÙԱģÐÍ×°±¸ÐÅÏ¢¸üд¦Àí  
 | 
#---------------------------------------------------------------------  
 | 
#"""Version = 2016-05-18 16:00"""  
 | 
#---------------------------------------------------------------------  
 | 
import time  
 | 
import GameWorld  
 | 
import ChConfig  
 | 
import NetPackCommon  
 | 
import ChPyNetSendPack  
 | 
import PlayerViewCache  
 | 
import ShareDefine  
 | 
import PlayerControl  
 | 
import IPY_GameServer  
 | 
import DataRecordPack  
 | 
#---------------------------------------------------------------------  
 | 
  
 | 
## ÉèÖÃÍæ¼Ò¼Ò×åÐÐΪ  
 | 
#  @param curPlayer Íæ¼ÒʵÀý  
 | 
#  @param actionType ÐÐΪÀàÐÍ  
 | 
#  @param actionData ÐÐΪÊý¾Ý×Ö·û´®("[Êý¾Ý1, Êý¾Ý2, Êý¾Ý3]")  
 | 
#  @param tick Ê±¼ä´Á  
 | 
#  @return None  
 | 
def MapServer_PlayerFamilyActionNote(curPlayer, actionType, actionData, tick):  
 | 
      
 | 
    actionDataList = eval(actionData)  
 | 
      
 | 
    familyId = curPlayer.GetFamilyID()  
 | 
      
 | 
    #ÉêÇë½øÈë¼Ò×å  
 | 
    if actionType == ShareDefine.Def_ActionType_FamilyAdd:  
 | 
        if familyId:  
 | 
            #ÒѾÓмÒ×å  
 | 
            return  
 | 
          
 | 
        #¼Ç¼ÉêÇë¸Ã¼Ò×åµÄÐÅÏ¢  
 | 
        __RequestAddFamilyNote(curPlayer, actionType, actionDataList, tick)  
 | 
        return  
 | 
          
 | 
    if not familyId:  
 | 
        #µ±Ç°Íæ¼ÒûÓмÒ×å  
 | 
        return  
 | 
      
 | 
    #¼Ò×åÐüÉÍÈÎÎñ  
 | 
    if actionType == ShareDefine.Def_ActionType_FamilyArrest:  
 | 
        __AddFamilyArrestNote(curPlayer, familyId, actionType, actionDataList, tick)  
 | 
        return  
 | 
      
 | 
    curPlayerName = curPlayer.GetName()  
 | 
    AddFamilyActionNote(curPlayerName, familyId, actionType, actionDataList, tick)  
 | 
    return  
 | 
  
 | 
  
 | 
## Ôö¼ÓÍæ¼Ò¼Ò×åÐüÉÍÈÎÎñÍê³ÉÇé¿ö  
 | 
#  @param familyId ¼Ò×åʵÀý  
 | 
#  @param actionType ÐÐΪÀàÐÍ  
 | 
#  @param actionDataList ÐÐΪÊý¾ÝÁÐ±í  
 | 
#  @param tick Ê±¼ä´Á  
 | 
#  @return None    
 | 
def __AddFamilyArrestNote(curPlayer, familyId, actionType, actionDataList, tick):  
 | 
    allFamilyActionManager = GameWorld.GetFamilyActionManager()    
 | 
    familyAction = allFamilyActionManager.GetFamilyAction(familyId, actionType)  
 | 
      
 | 
    familyActionCnt = familyAction.Count()  
 | 
    arrestId = actionDataList[0]  # ÐüÉÍÈÎÎñid  
 | 
      
 | 
    for index in range(0, familyActionCnt):  
 | 
        familyActionData = familyAction.At(index)  
 | 
        value = familyActionData.GetValue1()  
 | 
        if value == arrestId:  
 | 
            #¸ÃÈÎÎñÒѾÍê³É  
 | 
            return  
 | 
      
 | 
    curPlayerName = curPlayer.GetName()  
 | 
      
 | 
    #¸öÈËÌáʾ»÷ɱĿ±êÍê³É jiazu_hgg_0 »÷ɱÐüÉÍÄ¿±ê!  
 | 
    PlayerControl.NotifyCode(curPlayer, "jiazu_hgg_0")  
 | 
      
 | 
    #È«¼Ò×åÌáʾ jiazu_hgg_31379 °ï»á³ÉÔ±%sÍê³ÉÁËÈÎÎñ  
 | 
    PlayerControl.FamilyNotify(familyId, "jiazu_hgg_31379", [curPlayerName])  
 | 
      
 | 
    #¼Ç¼»÷ɱÈÎÎñÐÅÏ¢  
 | 
    AddFamilyActionNote(curPlayerName, familyId, actionType, actionDataList, tick)  
 | 
      
 | 
    #¼Ç¼ÐüÉÍ»÷ɱʼþÐÅÏ¢  
 | 
    AddFamilyActionNote(curPlayerName, familyId, ShareDefine.Def_ActionType_FamilyEvent, [ShareDefine.Def_FamilyActionEvent_Arrest, arrestId], tick)  
 | 
    return  
 | 
  
 | 
  
 | 
## Ôö¼ÓÍæ¼Ò¼Ò×åÐÐΪ  
 | 
#  @param curName Ãû×Ö  
 | 
#  @param familyId ¸ÃÐÐΪËùÊô¼Ò×åID  
 | 
#  @param actionType ÐÐΪÀàÐÍ  
 | 
#  @param actionDataList ÐÐΪÊý¾ÝÁÐ±í  
 | 
#  @param tick Ê±¼ä´Á  
 | 
#  @param isClearNone ³¬¹ý¼Ç¼ʱÊÇ·ñÇå¿Õ×îÔçÊý¾Ý  
 | 
#  @return ¼Ç¼ÊÇ·ñ³É¹¦  
 | 
def AddFamilyActionNote(curName, familyId, actionType, actionDataList, tick, isClearNone=True, useData=""):  
 | 
    if actionType not in ShareDefine.Def_ActionTypeList:  
 | 
        #¼Ç¼ÐÐΪÀàÐÍ´íÎó  
 | 
        GameWorld.ErrLog("¼Ç¼¼Ò×åÐÐΪÀàÐÍ:%s ´íÎó")  
 | 
        return False  
 | 
      
 | 
    #ËùÓмÒ×åÐÐΪ¶ÔÏó¹ÜÀíÆ÷  
 | 
    allFamilyActionManager = GameWorld.GetFamilyActionManager()    
 | 
    familyAction = allFamilyActionManager.GetFamilyAction(familyId, actionType)  
 | 
      
 | 
    familyActionCnt = familyAction.Count()  
 | 
      
 | 
    if familyActionCnt >= ChConfig.ActionTypeSaveCnt.get(actionType, 0):  
 | 
        if not isClearNone:  
 | 
            #³¬¹ý¼Ç¼¼Ç¼²»ÁËÁË  
 | 
            return False  
 | 
          
 | 
        familyAction.SortByTime()  # °´Ê±¼äÉýÐò  
 | 
        familyAction.DelAction(0)  # É¾³ýµÚÒ»¸ö  
 | 
          
 | 
    #Ìí¼ÓÒ»¸öÐÐΪ¶ÔÏó  
 | 
    familyActionObj = familyAction.AddAction()  
 | 
      
 | 
    #---ÉèÖÃÐÐΪ¶ÔÏóÊý¾Ý---  
 | 
    familyActionObj.SetFamilyId(familyId)         # ÉèÖøÃÐÐΪËùÊô¼Ò×åId  
 | 
    familyActionObj.SetActionType(actionType)     # ÉèÖÃÐÐΪÀàÐÍ  
 | 
    familyActionObj.SetName(curName)  # ÉèÖÃÃû×Ö  
 | 
    familyActionObj.SetUseData(useData, len(useData)) # ÉèÖÃ×Ô¶¨ÒåÊý¾Ý  
 | 
      
 | 
    curTimeStr = GameWorld.GetCurrentDataTimeStr()  
 | 
    curTimeTuple = time.strptime(curTimeStr, ChConfig.TYPE_Time_Format)  
 | 
    curTimeNum = int(time.mktime(curTimeTuple))  
 | 
    familyActionObj.SetTime(curTimeNum)                 # ÉèÖÃʱ¼ä  
 | 
      
 | 
    actionDataLen = len(actionDataList)  
 | 
    if actionDataLen >= 1:  
 | 
        familyActionObj.SetValue1(actionDataList[0])  
 | 
      
 | 
    if actionDataLen >= 2:  
 | 
        familyActionObj.SetValue2(actionDataList[1])  
 | 
      
 | 
    if actionDataLen >= 3:  
 | 
        familyActionObj.SetValue3(actionDataList[2])  
 | 
          
 | 
    if actionDataLen >= 4:  
 | 
        familyActionObj.SetValue4(actionDataList[3])  
 | 
          
 | 
    if actionDataLen >= 5:  
 | 
        familyActionObj.SetValue5(actionDataList[4])  
 | 
          
 | 
    if actionDataLen >= 6:  
 | 
        familyActionObj.SetValue6(actionDataList[5])  
 | 
      
 | 
    return True  
 | 
  
 | 
  
 | 
## ¼Ç¼ÉêÇë½øÈë¸Ã¼Ò×åµÄÐÅÏ¢  
 | 
#  @param curPlayer: Íæ¼ÒʵÀý  
 | 
#  @param actionType: ÐÐΪÀàÐÍ  
 | 
#  @param actionDataList: ÐÐΪÊý¾ÝÁÐ±í  
 | 
#  @param tick: Ê±¼ä´Á  
 | 
#  @return  
 | 
def __RequestAddFamilyNote(curPlayer, actionType, actionDataList, tick):  
 | 
      
 | 
    requestAddFamilyID = actionDataList[0]  # ÉêÇë½øÈëµÄ¼Ò×å  
 | 
    fightPower = actionDataList[1] if len(actionDataList) > 1 else curPlayer.GetFightPower()  
 | 
    requestPlayerName = curPlayer.GetName()  # ÉêÇëµÄÍæ¼ÒÃû×Ö  
 | 
      
 | 
    familyManager = GameWorld.GetFamilyManager()  
 | 
    curFamily = familyManager.FindFamily(requestAddFamilyID)  
 | 
    if not curFamily:  
 | 
        #ûÓиüÒ×å  
 | 
        GameWorld.ErrLog("__RequestAddFamilyNote Err not Id = %s family" % (requestAddFamilyID))  
 | 
        return  
 | 
      
 | 
    #¼Ò×åÉóºËÉèÖþܾøÍæ¼Ò¼ÓÈë  
 | 
    curAcceptJoinType = curFamily.GetAcceptJoin()  
 | 
    if curAcceptJoinType == ShareDefine.FamilyAcceptJoin_Refuse:  
 | 
        GameWorld.Log("__RequestAddFamilyNote FamilyID = %s RefuseJoin" % requestAddFamilyID, curPlayer.GetID())  
 | 
        return  
 | 
    #¼Ò×åÉóºËÉèÖÃÔÊÐíÍæ¼ÒÖ±½Ó¼ÓÈë  
 | 
    if curAcceptJoinType == ShareDefine.FamilyAcceptJoin_Agree:  
 | 
        import PlayerFamily  
 | 
        maxMemberCnt = PlayerFamily.GetFamilySetting(curFamily, ChConfig.Def_FamilySetting_MaxMemberCnt)  
 | 
        if curFamily.GetCount() < maxMemberCnt and curPlayer.GetLV() >= ChConfig.Def_Family_JionMinLV:  
 | 
            #Ö±½Ó¼ÓÈË  
 | 
            PlayerFamily.DoPlayerJionFamily(curFamily, curPlayer, IPY_GameServer.fmlMember)  
 | 
            #֪ͨËùÓмÒ×å³ÉÔ±, Õâ¸öÈ˼ÓÈëÁ˼Ò×å  
 | 
            PlayerFamily.NotifyAllFamilyMemberMsg(curFamily, curPlayer, "XW_JZ_EnterFamily", [curPlayer.GetName()])  
 | 
            PlayerControl.NotifyCode(curPlayer, 'XW_JZ_EnterFamilyInfo', [curFamily.GetName()])  
 | 
            #֪ͨ¿Í»§¶Ë¼Ò×åÐÅÏ¢¸Ä±ä  
 | 
            curFamily.Broadcast_FamilyChange()  
 | 
            GameWorld.Log("__RequestAddFamilyNote FamilyID = %s AgreeJoin" % requestAddFamilyID, curPlayer.GetID())  
 | 
            return  
 | 
              
 | 
          
 | 
    allFamilyActionManager = GameWorld.GetFamilyActionManager()    
 | 
    familyAction = allFamilyActionManager.GetFamilyAction(requestAddFamilyID, actionType)  
 | 
    familyActionCnt = familyAction.Count()  
 | 
      
 | 
    for index in range(0, familyActionCnt):  
 | 
        familyActionData = familyAction.At(index)  
 | 
        name = familyActionData.GetName()  
 | 
        if name == requestPlayerName:  
 | 
            #jiazu_pan_143504:ÄúÒѾÏò¸Ã°ï»áÌá½»Èë°ïÉêÇëÁË£¬ÇëµÈ´ý°ï»á¹ÜÀíÈËÔ±ÉóÅú!  
 | 
            PlayerControl.NotifyCode(curPlayer, "jiazu_pan_143504")  
 | 
            return  
 | 
      
 | 
    #Íæ¼ÒId, µÈ¼¶,Ö°Òµ,Õ½¶·Á¦  
 | 
    actionDataList = [curPlayer.GetID(), curPlayer.GetLV(), curPlayer.GetJob(), fightPower]  
 | 
  
 | 
    result = AddFamilyActionNote(requestPlayerName, requestAddFamilyID, actionType, actionDataList, tick, False)  
 | 
    if not result:  
 | 
        #jiazu_pan_141056:¶Ô²»Æð£¬Ä¿±ê°ï»áÉêÇëÈë°ïÁбíÒÑÂú£¬ÉêÇëÈë°ïʧ°Ü£¡  
 | 
        PlayerControl.NotifyCode(curPlayer, "jiazu_pan_141056")  
 | 
    else:  
 | 
        sendMsg = str([requestAddFamilyID]) # ¸æËßMapÍæ¼ÒÉêÇë¼ÓÈë¼Ò×å³É¹¦  
 | 
        curPlayer.MapServer_QueryPlayerResult(0, 0, 'FamilyAdd', sendMsg, len(sendMsg))  
 | 
        #jiazu_pan_500807:ÉêÇëÈë°ï³É¹¦£¡ÇëµÈ´ý°ï»á¹ÜÀíÈËÔ±ÉóÅú£¡   
 | 
        PlayerControl.NotifyCode(curPlayer, "jiazu_pan_500807")  
 | 
        #֪ͨ  
 | 
        NotifyFamilyRequestInfo(curFamily)  
 | 
    return  
 | 
  
 | 
  
 | 
#Íⲿµ÷Óú¯Êý  
 | 
#===============================================================================  
 | 
## É¾³ý¼Ò×åËùÓÐÐÐΪÊý¾Ý  
 | 
#  @param familyId: °ï»áId  
 | 
#  @param actionType: ÐÐΪÀàÐÍ,СÓÚ0ÔòĬÈÏɾ³ýËùÓÐÐÐΪ  
 | 
#  @param day: Ïà²îÌìÊý  
 | 
#  @param playerID: ¼Ç¼µÄÍæ¼ÒID  
 | 
#  @return: -1-È«²¿É¾³ý£»>=0-ɾ³ýµÄ¸öÊý  
 | 
def ClearFamilyAction(familyId, actionType= -1, day=0, playerID=0, useData=""):  
 | 
    #ËùÓмÒ×åÐÐΪ¶ÔÏó¹ÜÀíÆ÷  
 | 
    allFamilyActionManager = GameWorld.GetFamilyActionManager()   
 | 
      
 | 
    if day == 0 and playerID == 0 and useData == "":  
 | 
        if  actionType > 0:  
 | 
            allFamilyActionManager.DelFamilyAction(familyId, actionType)  
 | 
            __DoDelFamilyActionOverLogic(familyId, actionType)  
 | 
            return -1  
 | 
          
 | 
        for actionType in ShareDefine.Def_ActionTypeList:  
 | 
            allFamilyActionManager.DelFamilyAction(familyId, actionType)  
 | 
            __DoDelFamilyActionOverLogic(familyId, actionType)  
 | 
        return -1  
 | 
      
 | 
    familyAction = allFamilyActionManager.GetFamilyAction(familyId, actionType)  
 | 
    familyActionCnt = familyAction.Count()  
 | 
    familyAction.SortByTime()  # °´Ê±¼äÉýÐò  
 | 
      
 | 
    clearIndexList = []  # É¾³ýµÄË÷ÒýÁÐ±í  
 | 
    for index in range(0, familyActionCnt):  
 | 
        familyActionData = familyAction.At(index)  
 | 
        noteTime = int(familyActionData.GetTime())  
 | 
          
 | 
        noteTime = time.strftime(ChConfig.TYPE_Time_Format, time.localtime(noteTime))  
 | 
        pastTimeDay = int(GameWorld.GetPastHour(noteTime) / 24)  
 | 
          
 | 
        if day and pastTimeDay < day:  
 | 
            continue  
 | 
          
 | 
        if playerID != 0 and familyActionData.GetValue1() != playerID:  
 | 
            continue  
 | 
          
 | 
        if useData and familyActionData.GetUseData() != useData:  
 | 
            continue  
 | 
          
 | 
        clearIndexList.append(index)  
 | 
      
 | 
    if clearIndexList == []:  
 | 
        return 0  
 | 
      
 | 
    #ɾ³ý³¬¹ýʱ¼äµÄÐÐΪÊý¾Ý  
 | 
    if len(clearIndexList) == familyActionCnt:  
 | 
        #ËùÓÐÊý¾Ý¶¼³¬¹ýʱ¼ä, É¾³ýÕû¸ö¼Ç¼  
 | 
        allFamilyActionManager.DelFamilyAction(familyId, actionType)  
 | 
        __DoDelFamilyActionOverLogic(familyId, actionType)  
 | 
        return -1  
 | 
      
 | 
    clearCnt = 0  # ÒѾɾ³ýÊýÁ¿  
 | 
    for index in clearIndexList:  
 | 
        clearIndex = index - clearCnt  
 | 
        familyAction.DelAction(clearIndex)  
 | 
          
 | 
        clearCnt += 1  
 | 
    __DoDelFamilyActionOverLogic(familyId, actionType)  
 | 
    return clearCnt  
 | 
  
 | 
def __DoDelFamilyActionOverLogic(familyId, actionType):  
 | 
    ## É¾³ý¼Ò×åÐÐΪ¼Ç¼ºóµÄ²Ù×÷  
 | 
    family = GameWorld.GetFamilyManager().FindFamily(familyId)  
 | 
    if not family:  
 | 
        return  
 | 
    if actionType == ShareDefine.Def_ActionType_FamilyAdd:  
 | 
        NotifyFamilyRequestInfo(family)  
 | 
          
 | 
    return  
 | 
  
 | 
## »ñÈ¡ÐüÉÍÈÎÎñÍê³ÉÇé¿ö  
 | 
#  @param curPlayer: Íæ¼ÒʵÀý  
 | 
#  @param arrestId: ÐüÉÍÈÎÎñid  
 | 
#  @return ÈÎÎñÊÇ·ñÍê³É  
 | 
def GetFamilyArrestOverState(curPlayer, arrestId):  
 | 
    allFamilyActionManager = GameWorld.GetFamilyActionManager()    
 | 
    familyAction = allFamilyActionManager.GetFamilyAction(curPlayer.GetFamilyID(), ShareDefine.Def_ActionType_FamilyArrest)  
 | 
      
 | 
    familyActionCnt = familyAction.Count()  
 | 
    if familyActionCnt <= 0:  
 | 
        #δ¼Ç¼, Ã»ÓÐÍê³É  
 | 
        return False  
 | 
      
 | 
    for index in range(0, familyActionCnt):  
 | 
        familyActionData = familyAction.At(index)  
 | 
        value = familyActionData.GetValue1()  
 | 
        if value == arrestId:  
 | 
            #¸ÃÈÎÎñÒѾÍê³É  
 | 
            return True  
 | 
      
 | 
    return False  
 | 
  
 | 
#===============================================================================  
 | 
# //B0 25 ÇëÇó¼Ò×åÐüÉÍÈÎÎñÍê³ÉÇé¿ö #tagQueryFamilyArrestOverState  
 | 
#   
 | 
# struct    tagQueryFamilyArrestOverState  
 | 
#   
 | 
# {  
 | 
#    tagHead        Head;  
 | 
# };  
 | 
#===============================================================================  
 | 
## ÇëÇó¼Ò×åÐüÉÍÈÎÎñÍê³ÉÇé¿ö  
 | 
#  @param index Íæ¼ÒË÷Òý  
 | 
#  @param clientData ·â°üÊý¾Ý½á¹¹Ìå  
 | 
#  @param tick Ê±¼ä´Á  
 | 
#  @return None  
 | 
def QueryFamilyArrestOverState(index, cliendData, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    familyId = curPlayer.GetFamilyID()  
 | 
    if not familyId:  
 | 
        #µ±Ç°Íæ¼ÒûÓмÒ×å  
 | 
        return  
 | 
      
 | 
    allFamilyActionManager = GameWorld.GetFamilyActionManager()    
 | 
    familyAction = allFamilyActionManager.GetFamilyAction(familyId, ShareDefine.Def_ActionType_FamilyArrest)  
 | 
    familyActionCnt = familyAction.Count()  
 | 
      
 | 
    packList = []  
 | 
    for index in range(0, familyActionCnt):  
 | 
        familyActionData = familyAction.At(index)  
 | 
        playerName = familyActionData.GetName()  # Íê³ÉÈÎÎñµÄÍæ¼ÒÃû×Ö  
 | 
        arrestId = familyActionData.GetValue1()  # Íê³ÉµÄÈÎÎñId  
 | 
          
 | 
        familyArrestOverState = ChPyNetSendPack.tagFamilyArrestOverState()  
 | 
          
 | 
        familyArrestOverState.NameLen = len(playerName)  
 | 
        familyArrestOverState.Name = playerName  
 | 
        familyArrestOverState.ID = arrestId  
 | 
        familyArrestOverState.OverState = 1  
 | 
        packList.append(familyArrestOverState)  
 | 
          
 | 
    familyArrestOverStateInfo = ChPyNetSendPack.tagFamilyArrestOverStateInfo()  
 | 
    familyArrestOverStateInfo.Count = len(packList)  
 | 
    familyArrestOverStateInfo.ArrestOverStateInfo = packList  
 | 
      
 | 
    #·¢°ü¸ø¿Í»§¶Ë  
 | 
    NetPackCommon.SendFakePack(curPlayer, familyArrestOverStateInfo)  
 | 
    return  
 | 
  
 | 
  
 | 
#===============================================================================  
 | 
# //A4 02  ²é¿´ÉêÇëÈë»áµÄÍæ¼Ò #tagCGViewFamilyRequestInfo  
 | 
#   
 | 
# struct    tagCGViewFamilyRequestInfo  
 | 
# {  
 | 
#    tagHead        Head;  
 | 
# };  
 | 
#===============================================================================  
 | 
## ²é¿´ÉêÇë°ï»áµÄ³ÉÔ±ÐÅÏ¢  
 | 
#  @param index Íæ¼ÒË÷Òý  
 | 
#  @param clientData ·â°üÊý¾Ý½á¹¹Ìå  
 | 
#  @param tick Ê±¼ä´Á  
 | 
#  @return None  
 | 
def ViewFamilyRequestInfo(curPlayer):  
 | 
    if PlayerControl.GetIsTJG(curPlayer):  
 | 
        return  
 | 
      
 | 
    familyID = curPlayer.GetFamilyID()  
 | 
    if familyID <= 0:  
 | 
        #¸ÃÍæ¼ÒûÓмÒ×å  
 | 
        GameWorld.ErrLog("ViewFamilyRequestInfo playerID = %s not family" % (curPlayer.GetID()))  
 | 
        return  
 | 
      
 | 
    allFamilyActionManager = GameWorld.GetFamilyActionManager()    
 | 
    familyAction = allFamilyActionManager.GetFamilyAction(familyID, ShareDefine.Def_ActionType_FamilyAdd)  
 | 
    familyActionCnt = familyAction.Count()  
 | 
      
 | 
    packList = []  
 | 
    for index in range(0, familyActionCnt):  
 | 
        familyActionData = familyAction.At(index)  
 | 
        requestPlayerName = familyActionData.GetName()  # ÉêÇëµÄÍæ¼ÒÃû×Ö  
 | 
        requestTime = familyActionData.GetTime()  # ÉêÇëµÄʱ¼ä  
 | 
        playerID = familyActionData.GetValue1()  # ID  
 | 
        playerLV = familyActionData.GetValue2()  # µÈ¼¶  
 | 
        playerJob = familyActionData.GetValue3()  # Ö°Òµ  
 | 
        fightPower = familyActionData.GetValue4()  # Õ½¶·Á¦  
 | 
          
 | 
        tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)  
 | 
        if not tagPlayer:  
 | 
            isOnLine = 0  
 | 
        else:  
 | 
            isOnLine = 1  
 | 
            playerLV = tagPlayer.GetLV()  
 | 
            if tagPlayer.GetFightPower() > fightPower:  
 | 
                fightPower = tagPlayer.GetFightPower()  
 | 
              
 | 
        memberInfo = ChPyNetSendPack.tagtMemberInfo()  
 | 
        memberInfo.PlayerID = playerID  
 | 
        memberInfo.NameLen = len(requestPlayerName)   
 | 
        memberInfo.Name = requestPlayerName  
 | 
        memberInfo.PlayerLV = playerLV  
 | 
        memberInfo.PlayeJob = playerJob  
 | 
        memberInfo.PlayeFightPower = fightPower  
 | 
        memberInfo.RequestTime = requestTime  
 | 
        memberInfo.IsOnLine = isOnLine  
 | 
        packList.append(memberInfo)  
 | 
          
 | 
    requestMemberInfo = ChPyNetSendPack.tagGCViewFamilyRequestInfo()  
 | 
    requestMemberInfo.Clear()  
 | 
    requestMemberInfo.RequestMemberCount = familyActionCnt  
 | 
    requestMemberInfo.MemberInfo = packList  
 | 
          
 | 
    #·¢°ü¸ø¿Í»§¶Ë  
 | 
    NetPackCommon.SendFakePack(curPlayer, requestMemberInfo)  
 | 
    return  
 | 
  
 | 
def NotifyFamilyRequestInfo(curFamily):  
 | 
    import PlayerFamily  
 | 
    playerManager = GameWorld.GetPlayerManager()  
 | 
    for i in range(0, curFamily.GetCount()):  
 | 
        notifyMember = curFamily.GetAt(i)  
 | 
        notifyPlayer = playerManager.FindPlayerByID(notifyMember.GetPlayerID())  
 | 
          
 | 
        if notifyPlayer == None:  
 | 
            continue  
 | 
        if not PlayerFamily.GetFamilyMemberHasPow(notifyMember, ChConfig.Def_PurviewDictKey_CanCall):  
 | 
            continue  
 | 
        ViewFamilyRequestInfo(notifyPlayer)  
 | 
    return  
 | 
  
 | 
#// A4 08 ²éѯ¼Ò×åÐÐΪÐÅÏ¢ #tagCGQueryFamilyAction  
 | 
#  
 | 
#struct    tagCGQueryFamilyAction  
 | 
#{  
 | 
#    tagHead        Head;  
 | 
#    BYTE        ActionType;        // ÐÐΪÀàÐÍ  
 | 
#    DWORD        FamilyID;         // ¼Ò×åID  
 | 
#};  
 | 
#===============================================================================  
 | 
## ÇëÇó¼Ò×åÐÐΪÐÅÏ¢  
 | 
#  @param index Íæ¼ÒË÷Òý  
 | 
#  @param clientData ·â°üÊý¾Ý½á¹¹Ìå  
 | 
#  @param tick Ê±¼ä´Á  
 | 
#  @return None  
 | 
def QueryFamilyActionInfo(index, cliendData, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
      
 | 
    if not curPlayer:  
 | 
        return  
 | 
      
 | 
    actionType = cliendData.ActionType  
 | 
    familyID = cliendData.FamilyID  
 | 
      
 | 
    if actionType not in ChConfig.Def_QueryNoLimit_ActionTypeList:  
 | 
        playerFamilyId = curPlayer.GetFamilyID()  
 | 
        if not playerFamilyId:  
 | 
            return  
 | 
      
 | 
        if playerFamilyId != familyID:  
 | 
            return  
 | 
      
 | 
    SendFamilyActionInfo(curPlayer, familyID, actionType)  
 | 
    return  
 | 
  
 | 
## ·¢ËͼÒ×åÐÐΪ  
 | 
#  @param curPlayer Íæ¼Ò  
 | 
#  @param familyID   
 | 
#  @param actionType   
 | 
#  @return None  
 | 
def SendFamilyActionInfo(curPlayer, familyID, actionType):  
 | 
    familyAction = GameWorld.GetFamilyActionManager().GetFamilyAction(familyID, actionType)  
 | 
      
 | 
    familyActionCnt = familyAction.Count()  
 | 
      
 | 
    actionInfoPack = ChPyNetSendPack.tagGCFamilyActionInfo()  
 | 
    actionInfoPack.Clear()  
 | 
    actionInfoPack.FamilyID = familyID  
 | 
    actionInfoPack.ActionType = actionType  
 | 
    actionInfoPack.FamilyActionList = []      
 | 
      
 | 
    for index in xrange(familyActionCnt):  
 | 
        familyActionData = familyAction.At(index)  
 | 
          
 | 
        actionData = ChPyNetSendPack.tagGCFamilyAction()  
 | 
        actionData.Clear()  
 | 
        actionData.Time = familyActionData.GetTime()  
 | 
        actionData.Name = familyActionData.GetName()  
 | 
        actionData.NameLen = len(actionData.Name)  
 | 
        actionData.Value1 = familyActionData.GetValue1()  
 | 
        actionData.Value2 = familyActionData.GetValue2()  
 | 
        actionData.Value3 = familyActionData.GetValue3()  
 | 
        actionData.Value4 = familyActionData.GetValue4()  
 | 
        actionData.Value5 = familyActionData.GetValue5()  
 | 
        actionData.Value6 = familyActionData.GetValue6()  
 | 
        actionData.UseData = familyActionData.GetUseData()  
 | 
        actionData.UseDataLen = len(actionData.UseData)  
 | 
        actionInfoPack.FamilyActionList.append(actionData)  
 | 
      
 | 
    actionInfoPack.Count = len(actionInfoPack.FamilyActionList)  
 | 
      
 | 
    if curPlayer:  
 | 
        NetPackCommon.SendFakePack(curPlayer, actionInfoPack)  
 | 
        return  
 | 
      
 | 
    # Ã»ÓÐÖ¸¶¨Íæ¼ÒµÄÇé¿öÏÂ֪ͨȫսÃË  
 | 
    family = GameWorld.GetFamilyManager().FindFamily(familyID)  
 | 
    if not family:  
 | 
        return  
 | 
      
 | 
    for index in xrange(family.GetCount()):  
 | 
        curMember = family.GetAt(index)  
 | 
        curPlayer = curMember.GetPlayer()  
 | 
        #²»ÔÚÏß  
 | 
        if curPlayer == None:  
 | 
            continue  
 | 
        NetPackCommon.SendFakePack(curPlayer, actionInfoPack)  
 | 
          
 | 
    return  
 | 
  
 | 
  
 | 
## É¾³ýʱ»ú: 1-½µÎªÆÕͨ³ÉÔ±£»2-Í˳ö¼Ò×å  
 | 
def DelFamilyOfficerModelEquip(familyID, delPlayerID):  
 | 
    if delPlayerID <= 0:  
 | 
        return  
 | 
      
 | 
    clearCnt = ClearFamilyAction(familyID, ShareDefine.Def_ActionType_OfficerModelEquip, playerID=delPlayerID)  
 | 
    GameWorld.DebugLog("ɾ³ý¼Ò×å¹ÙԱģÐÍ×°±¸ÐÅÏ¢£¡familyID=%s,playerID=%s,delCnt=%s" % (familyID, delPlayerID, clearCnt))  
 | 
    return  
 | 
  
 | 
## ¸üмÒ×å¹ÙԱģÐÍ×°±¸ÐÅÏ¢  
 | 
def UpdFamilyOfficerModelEquip(familyID, playerID):  
 | 
      
 | 
    curFamily = GameWorld.GetFamilyManager().FindFamily(familyID)  
 | 
    if curFamily == None:  
 | 
        return  
 | 
      
 | 
    curMember = curFamily.FindMember(playerID)  
 | 
    if curMember == None:  
 | 
        return  
 | 
      
 | 
    memberLV = curMember.GetFamilyLV()  
 | 
    # ÆÕͨ³ÉÔ±²»¼Ç¼  
 | 
    if memberLV == IPY_GameServer.fmlMember:  
 | 
        #GameWorld.DebugLog("ÆÕͨ³ÉÔ±²»¼Ç¼¼Ò×å¹ÙԱģÐÍ×°±¸ÐÅÏ¢£¡")  
 | 
        return  
 | 
      
 | 
    modelEquipInfoList = PlayerViewCache.GetPlayerCacheEquipView(playerID)  
 | 
    if not modelEquipInfoList:  
 | 
        #GameWorld.DebugLog("ÕÒ²»µ½¼Ò×å¹ÙԱģÐÍ×°±¸ÐÅÏ¢, ²»¼Ç¼£¡familyID=%s,playerID=%s" % (familyID, playerID))  
 | 
        return  
 | 
      
 | 
    findActionObj = None  
 | 
    actionType = ShareDefine.Def_ActionType_OfficerModelEquip  
 | 
    familyAction = GameWorld.GetFamilyActionManager().GetFamilyAction(familyID, actionType)  
 | 
    familyActionCnt = familyAction.Count()  
 | 
      
 | 
    for i in xrange(familyActionCnt):  
 | 
        actionData = familyAction.At(i)  
 | 
        if actionData.GetValue1() != playerID:  
 | 
            continue  
 | 
        findActionObj = actionData  
 | 
        break  
 | 
          
 | 
    if not findActionObj:  
 | 
        if familyActionCnt >= ChConfig.ActionTypeSaveCnt.get(actionType, 0):  
 | 
            GameWorld.ErrLog("UpdFamilyOfficerModelEquip familyActionCnt=%s ÒÑ´ïµ½×î´óÖµ£¡" % familyActionCnt)  
 | 
        findActionObj = familyAction.AddAction()  
 | 
          
 | 
    memberName = curMember.GetName()  
 | 
    memberJob = curMember.GetJob()  
 | 
    #---ÉèÖÃÐÐΪ¶ÔÏóÊý¾Ý---  
 | 
    findActionObj.SetFamilyId(familyID)  
 | 
    findActionObj.SetActionType(actionType)  
 | 
    findActionObj.SetName(memberName)  
 | 
    findActionObj.SetValue1(playerID)  
 | 
    findActionObj.SetValue2(memberJob)  
 | 
    findActionObj.SetValue3(memberLV)  
 | 
    useData = str(modelEquipInfoList)  
 | 
    findActionObj.SetUseData(useData, len(useData)) # ÉèÖÃ×Ô¶¨ÒåÊý¾Ý  
 | 
    GameWorld.DebugLog("¸üмÒ×å¹ÙԱģÐÍ×°±¸ÐÅÏ¢: familyID=%s,playerID=%s,name=%s,job=%s,memLV=%s,useData=%s,actionNowCnt=%s"   
 | 
                       % (familyID, playerID, memberName, memberJob, memberLV, str(useData), familyAction.Count()))  
 | 
    return  
 | 
  
 | 
  
 | 
  
 | 
  
 |