#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#---------------------------------------------------------------------  
 | 
#  
 | 
#---------------------------------------------------------------------  
 | 
##@package PlayerFamily  
 | 
#¼Ò×åÂß¼´¦Àí  
 | 
#  
 | 
# @author eggxp  
 | 
# @date 2010-4-23  
 | 
# @version 1.0  
 | 
#  
 | 
#---------------------------------------------------------------------  
 | 
#"""Version = 2017-07-12 21:00"""   
 | 
#---------------------------------------------------------------------  
 | 
import IPY_GameWorld  
 | 
import GameWorld  
 | 
import EventShell  
 | 
import FBLogic  
 | 
import ChConfig  
 | 
import PlayerControl  
 | 
import ShareDefine  
 | 
import ReadChConfig  
 | 
import PlayerTruck  
 | 
import NetPackCommon  
 | 
import ChPyNetSendPack  
 | 
import DataRecordPack  
 | 
import GameLogic_FamilyWar  
 | 
import ChMapToGamePyPack  
 | 
import PlayerFamilyTech  
 | 
import PlayerFamilyRedPacket  
 | 
import SkillCommon  
 | 
import BuffSkill  
 | 
import ItemCommon  
 | 
import PlayerSuccess  
 | 
import GameFuncComm  
 | 
import PlayerTJG  
 | 
import IpyGameDataPY  
 | 
  
 | 
import time  
 | 
import random  
 | 
#---------------------------------------------------------------------  
 | 
#¼Ò×åˢР 
 | 
#class   IPY_MFamilyRefresh  
 | 
#{  
 | 
#public:  
 | 
#  
 | 
#    int      GetFamilyID();  
 | 
#  
 | 
#    char *      GetFamilyName();  
 | 
#};  
 | 
## ¼Ò×åˢР 
 | 
#  @param index Íæ¼ÒË÷Òý  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def GameServer_FamilyRefresh(index, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    refreshPack = IPY_GameWorld.IPY_MFamilyRefresh()  
 | 
      
 | 
    if curPlayer.GetID() != refreshPack.GetPlayerID():  
 | 
        #²»ÊÇ×Ô¼º  
 | 
        return  
 | 
      
 | 
    lastFamilyID = curPlayer.GetFamilyID()  
 | 
      
 | 
#************×峤±ä¸üɾ³ý·¢²¼ÈÎÎñ*************************************************  
 | 
    if (curPlayer.GetFamilyMemberLV() == IPY_GameWorld.fmlLeader   
 | 
        and refreshPack.GetFamilyMemberLV()!= IPY_GameWorld.fmlLeader):  
 | 
        EventShell.EventResponse_OnMemberChange(curPlayer)  
 | 
#*******************************************************************  
 | 
  
 | 
    #---¸ù¾Ý·â°üÐÞ¸ÄÍæ¼Ò¼Ò×åÊôÐÔ---  
 | 
    if lastFamilyID != refreshPack.GetFamilyID():  
 | 
        curPlayer.SetFamilyID(refreshPack.GetFamilyID())  
 | 
        familyIDChangeTime = int(time.time())  
 | 
        #PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyIDChangeTime, familyIDChangeTime)  
 | 
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_LastFamilyID, lastFamilyID)  
 | 
        GameWorld.Log("¼Ç¼¼Ò×å±ä¸üʱ¼ä...familyIDChangeTime=%s,lastFamilyID=%s,nextFamilyID=%s"   
 | 
                           % (familyIDChangeTime, lastFamilyID, refreshPack.GetFamilyID()), curPlayer.GetPlayerID())  
 | 
          
 | 
        #´¥·¢Íæ¼Ò¼ÓÈë¼Ò×åʼþ  
 | 
        EventShell.EventResponse_OnFamilyAdd(curPlayer)  
 | 
          
 | 
    if curPlayer.GetFamilyName() != refreshPack.GetFamilyName():  
 | 
        curPlayer.SetFamilyName(refreshPack.GetFamilyName())  
 | 
        #֪ͨÖÜÎ§Íæ¼Ò¼Ò×åÃû³ÆË¢Ð  
 | 
        curPlayer.Notify_FamilyNameRefresh()  
 | 
      
 | 
    refreshFamilyLV = refreshPack.GetFamilyLV()  
 | 
    lastFamilyLV = curPlayer.GetFamilyLV()  
 | 
    if lastFamilyLV != refreshFamilyLV:  
 | 
        #ÈÎÎñÐèÇ󣬼ǼÏÈǰµÄ¼Ò×åµÈ¼¶  
 | 
        curPlayer.SetDict(ChConfig.Def_PlayerKey_FamilyLVLeave, lastFamilyLV)  
 | 
          
 | 
        isLVUP = False  
 | 
        if lastFamilyLV and refreshFamilyLV > 0:  
 | 
            #´¥·¢¼Ò×åÉý¼¶Ê¼þ  
 | 
            isLVUP = True  
 | 
          
 | 
        curPlayer.SetFamilyLV(refreshFamilyLV)  
 | 
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyLV, refreshFamilyLV)  
 | 
          
 | 
        __OnFamilyLVBuffChange(curPlayer, tick)  
 | 
        #´¥·¢¼Ò×åÉý¼¶Ê¼þ, ÔÚSetFamilyLVÖ®ºó£¬ÈÎÎñ¿ÉÒÔÈ¡µÈ¼¶Åж¨  
 | 
        if isLVUP:  
 | 
            EventShell.EventResponse_OnFamilyLVUp(curPlayer)  
 | 
          
 | 
    if curPlayer.GetFamilyMemberLV() != refreshPack.GetFamilyMemberLV():  
 | 
        # ÒòΪÏÉÃËְλûÓдæDBPlayer£¬¶ø¿ç·þºóÓÖûÓÐFamilyÐÅÏ¢£¬ËùÒÔÕâÀï×ö¸ö´æ´¢£¬ÓÃÓÚ¿ç·þÓà  
 | 
        curPlayer.SetReceivedSalary(refreshPack.GetFamilyMemberLV())  
 | 
        curPlayer.SetFamilyMemberLV(refreshPack.GetFamilyMemberLV())  
 | 
        #֪ͨÖÜÎ§Íæ¼Ò¼Ò×åְλˢР 
 | 
        #curPlayer.Notify_FamilyMemberLVRefresh()  
 | 
        GameLogic_FamilyWar.DoCheckChampionFamilyTitle(curPlayer)  
 | 
      
 | 
    if curPlayer.GetFamilyMoney() != refreshPack.GetFamilyMoney():  
 | 
        curPlayer.SetFamilyMoney(refreshPack.GetFamilyMoney())  
 | 
      
 | 
    if curPlayer.GetFamilyLastWeekActiveValue() != refreshPack.GetLastWeekFamilyActiveValue():  
 | 
        curPlayer.SetFamilyLastWeekActiveValue(refreshPack.GetLastWeekFamilyActiveValue())  
 | 
          
 | 
    #---´¦ÀíÌØÊâÂß¼, ½øÈëÍ˳ö¼Ò×å---  
 | 
  
 | 
    if lastFamilyID != 0 and curPlayer.GetFamilyID() == 0:  
 | 
        #Íæ¼ÒÀ뿪¼Ò×å  
 | 
        __OnLeaveFamily(curPlayer, tick)  
 | 
          
 | 
        #¸Ä±äïÚ³µÉíÉϼǼµÄÖ÷ÈËÐÅÏ¢  
 | 
        PlayerTruck.ChangeTruckNoteInfo(curPlayer)  
 | 
  
 | 
    elif lastFamilyID == 0 and curPlayer.GetFamilyID() != 0:  
 | 
        #¸Õ½ø¼Ò×岢Ϊ×峤,´¥·¢½¨¼Ò×åʼþ  
 | 
        if curPlayer.GetFamilyMemberLV() == IPY_GameWorld.fmlLeader:  
 | 
            EventShell.EventResponse_OnCreateFamily(curPlayer)  
 | 
          
 | 
        #½øÈë¼Ò×å´¥·¢Ê¼þ  
 | 
        __OnEnterFamily(curPlayer, tick)  
 | 
          
 | 
        #¸Ä±äïÚ³µÉíÉϼǼµÄÖ÷ÈËÐÅÏ¢  
 | 
        PlayerTruck.ChangeTruckNoteInfo(curPlayer)  
 | 
          
 | 
    #---֪ͨ¿Í»§¶ËË¢ÐÂÊôÐÔ---  
 | 
    curPlayer.View_FamilyInfoRefresh()  
 | 
    return  
 | 
  
 | 
## ½øÈë¼Ò×å´¥·¢Ê¼þ  
 | 
#  @param curPlayer µ±Ç°Íæ¼Ò  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def __OnEnterFamily(curPlayer, tick):  
 | 
    EventShell.EventResponse_OnFamily(curPlayer)  
 | 
    __OnFamilyLVBuffChange(curPlayer, tick)  
 | 
    PlayerFamilyTech.Sync_PlayerFamilyTechLV(curPlayer)  
 | 
    DelAddFamilyRecord(curPlayer)  
 | 
    GameLogic_FamilyWar.DoCheckChampionFamilyTitle(curPlayer)  
 | 
    PlayerFamilyRedPacket.CreatCacheRedPacktet(curPlayer)  
 | 
    return  
 | 
  
 | 
## Í˳ö¼Ò×å´¥·¢Ê¼þ  
 | 
#  @param curPlayer µ±Ç°Íæ¼Ò  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def __OnLeaveFamily(curPlayer, tick):  
 | 
    #---Çå¿Õ¼Ò×åÏà¹ØÐÅÏ¢---  
 | 
    curPlayer.SetPerExp(0)  
 | 
    curPlayer.SetFamilyHornor(0)  
 | 
    curPlayer.SetFamilyActiveValue(0)  
 | 
    curPlayer.SetLastWeekFamilyActiveValue(0)  
 | 
    curPlayer.SetFamilyLV(0)  
 | 
      
 | 
    #´¥·¢Íæ¼ÒÀ뿪¼Ò×åµÄÈÎÎñ  
 | 
    EventShell.EventResponse_OnLeaveFamily(curPlayer)  
 | 
      
 | 
    #ÉèÖÃÁì½±ÏÞÖÆ  
 | 
    __SetForbidFamilyAward(curPlayer)  
 | 
    FBLogic.OnLeaveFamily(curPlayer, tick)  
 | 
      
 | 
    __OnFamilyLVBuffChange(curPlayer, tick)  
 | 
    #Çå¿Õ²Ö¿â»ý·Ö  
 | 
    PlayerControl.SetPlayerCurrency(curPlayer, ShareDefine.TYPE_Price_FamilyStoreScore, 0)  
 | 
    GameLogic_FamilyWar.DoCheckChampionFamilyTitle(curPlayer)  
 | 
    return  
 | 
  
 | 
## ¼Ò×åµÈ¼¶¼Ó³Öbuff±ä¸ü´¦Àí(½ø¡¢Í˼Ò×åʱ ¼° ¼Ò×åµÈ¼¶±ä¸üʱ)  
 | 
def __OnFamilyLVBuffChange(curPlayer, tick):  
 | 
    return  
 | 
    # ¿ç·þ·þÎñÆ÷²»´¦Àí£¬·ÀÖ¹µÇ¼¿ç·þ·þÎñÆ÷ºóÎÞÕ½Ã˵¼ÖÂÕ½Á¦Ï½µ  
 | 
    if GameWorld.IsCrossServer():  
 | 
        return  
 | 
      
 | 
    familyLVBuffSkillTypeID = ReadChConfig.GetEvalChConfig("FamilyLVBuff")  
 | 
    if not familyLVBuffSkillTypeID:  
 | 
        return  
 | 
      
 | 
    # ÏÈɾºó¼Ó  
 | 
    playerSkillManager = curPlayer.GetSkillManager()  
 | 
    BuffSkill.DelBuffBySkillID(curPlayer, familyLVBuffSkillTypeID, tick)  
 | 
    playerSkillManager.DeleteSkillBySkillTypeID(familyLVBuffSkillTypeID)  
 | 
    familyLV = curPlayer.GetFamilyLV()  
 | 
    GameWorld.DebugLog("__OnFamilyLVBuffChange familyLV=%s,familyLVBuffSkillTypeID=%s" % (familyLV, familyLVBuffSkillTypeID))  
 | 
    if familyLV > 0:  
 | 
        curSkill = GameWorld.GetGameData().FindSkillByType(familyLVBuffSkillTypeID , familyLV)  
 | 
        if not curSkill:  
 | 
            return  
 | 
        skillID = curSkill.GetSkillID()  
 | 
        playerSkillManager.LVUPSkillByID(skillID)  
 | 
        SkillCommon.AddBuffBySkillType(curPlayer, familyLVBuffSkillTypeID, tick, familyLV)  
 | 
      
 | 
    curControl = PlayerControl.PlayerControl(curPlayer)  
 | 
    #curControl.CalcPassiveBuffAttr()  
 | 
    curControl.RefreshPlayerAttrByBuff()  
 | 
    return  
 | 
  
 | 
def GetPlayerChangeFamilyPastHour(curPlayer):  
 | 
    ## »ñÈ¡Íæ¼Ò¼Ò×å±ä¸üÒѾ¾¹ýÁ˶೤ʱ¼ä  
 | 
    curTime = int(time.time())  
 | 
    changeTime = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyIDChangeTime)  
 | 
    return (curTime - changeTime) / 3600  
 | 
  
 | 
#  
 | 
#//////////////////////////////////////////////////////////////  
 | 
#//08 04 ÉêÇë¼Ò×åÕ½#tagMRequestFamilyWar  
 | 
#tagMRequestFamilyWar       *   GettagMRequestFamilyWar();  
 | 
#  
 | 
#class   IPY_MRequestFamilyWar  
 | 
#{  
 | 
#public:  
 | 
#  
 | 
#    int      GetFamilyID();  
 | 
#  
 | 
#    char *      GetFamilyName();  
 | 
#  
 | 
#    int      GetVSFamilyID();  
 | 
#  
 | 
#    char *      GetVSFamilyName();  
 | 
#};  
 | 
## 08 04 ÉêÇë¼Ò×åÕ½#  
 | 
#  @param index Íæ¼ÒË÷Òý  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def GameServer_RequestFamilyWar(index, tick):  
 | 
#===============================================================================  
 | 
#    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
#    pack = IPY_GameWorld.IPY_MRequestFamilyWar()  
 | 
#    familyID = pack.GetFamilyID()  
 | 
#    familyName = pack.GetFamilyName()  
 | 
#    vsFamilyID = pack.GetVSFamilyID()  
 | 
#    vsFamilyName = pack.GetVSFamilyName()  
 | 
#    FBLogic.OnRequestFamilyWar(curPlayer, familyID, familyName, vsFamilyID, vsFamilyName, tick)  
 | 
#===============================================================================  
 | 
    GameWorld.ErrLog('GameServer_RequestFamilyWar, ´Ë½Ó¿Ú·ÏÆú')  
 | 
    return  
 | 
#---------------------------------------------------------------------  
 | 
##Íæ¼Ò½ðǮת»»Îª¼Ò×å½ðÇ®  
 | 
# @param playerMoney Íæ¼Ò½ðÇ®  
 | 
# @return ¼Ò×å½ðÇ®  
 | 
# @remarks Íæ¼Ò½ðǮת»»Îª¼Ò×å½ðÇ®  
 | 
def GetPlayerMoney_Change_FamilyMoney(playerMoney):  
 | 
    return int(playerMoney * ShareDefine.Def_PlayerMoney_Change_FamilyMoney_Rate)  
 | 
#---------------------------------------------------------------------  
 | 
##Íæ¼Ò»îÔ¾¶Èת»»Îª¼Ò×å»îÔ¾¶È  
 | 
# @param activeValue Íæ¼Ò»îÔ¾¶È  
 | 
# @return ¼Ò×å»îÔ¾¶È  
 | 
# @remarks Íæ¼Ò»îÔ¾¶Èת»»Îª¼Ò×å»îÔ¾¶È  
 | 
def GetPlayerActiveValue_Change_ActiveValue(activeValue):  
 | 
    return activeValue  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##ÀÛ¼ÓÍæ¼ÒµÄ¼Ò×å»îÔ¾¶È  
 | 
# @param curPlayer Íæ¼ÒʵÀý  
 | 
# @param addValue Ìí¼ÓµÄÊýÖµ  
 | 
# @param sendPackGameServer ÊÇ·ñ֪ͨGameServerÀÛ¼Ó¼Ò×å»îÔ¾¶È  
 | 
# @param reason À´Ô´, ÔÒò  
 | 
# @return None  
 | 
# @remarks ÀÛ¼ÓÍæ¼ÒµÄ¼Ò×å»îÔ¾¶È  
 | 
def AddPlayerFamilyActiveValue(curPlayer, addValue, sendPackGameServer = False, reason = 0, isSysMsg=False):  
 | 
    if addValue <= 0:  
 | 
        #GameWorld.ErrLog("AddPlayerFamilyActiveValue Err = %s"%(addValue))  
 | 
        return  
 | 
      
 | 
    curActiveValue = curPlayer.GetFamilyActiveValue()  
 | 
    totalActiveValue = curPlayer.GetLastWeekFamilyActiveValue()  
 | 
  
 | 
    #---ÀÛ¼ÓÍæ¼Ò¼Ò×å»îÔ¾¶È---  
 | 
    if curActiveValue < ChConfig.Def_UpperLimit_DWord:  
 | 
        #ÀۼƻîÔ¾¶È  
 | 
        curPlayer.SetFamilyActiveValue(min(curActiveValue + addValue, ChConfig.Def_UpperLimit_DWord))  
 | 
        curPlayer.SetLastWeekFamilyActiveValue(min(totalActiveValue + addValue, ChConfig.Def_UpperLimit_DWord))  
 | 
          
 | 
    #Ôö¼Ó¹±Ï×¶È  
 | 
    PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_Family_Contribution, addValue, isSysHint=isSysMsg)  
 | 
      
 | 
    #Á÷Ïò¼Ç¼:  
 | 
    DataRecordPack.DR_AddPlayerFamilyActiveValue(curPlayer, addValue, curPlayer.GetFamilyActiveValue(), reason)  
 | 
  
 | 
    #---֪ͨÊÀ½ç·þÎñÆ÷ÀÛ¼Ó¼Ò×å»îÔ¾¶È---  
 | 
    #@warning: µ¶½£Ð¦ÏîÄ¿, Íæ¼Ò¼Ò×å»îÔ¾¶ÈÀÛ¼ÓͬʱÀÛ¼Ó¼Ò×å»îÔ¾¶È  
 | 
    #          Èç¹ûÕâ±ßûÓмÓÉÏÈ¥ÔÚÍâÃæÒª´¦ÀíÒ»´ÎÀÛ¼Ó¼Ò×å»îÔ¾¶È  
 | 
    if not sendPackGameServer:  
 | 
        return True  
 | 
        
 | 
    #µ¶½£Ð¦ÒªÇó, Íæ¼Ò»îÔ¾¶ÈÀÛ¼ÓµÄͬʱÀÛ¼Ó¼Ò×å»îÔ¾¶È 1»îÔ¾=1×ʽð  
 | 
    SendPack_GameServer_AddFamilyDetailEx(curPlayer, addValue, addValue, resion=reason)  
 | 
    return True  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##֪ͨÊÀ½ç·þÎñÆ÷ÀÛ¼Ó¼Ò×åÊôÐÔ  
 | 
# @param curPlayer Íæ¼ÒʵÀý  
 | 
# @param addFamilyHornor Ìí¼Ó¼Ò×åÊÞÁ¸  
 | 
# @param addFamilyMoney Ìí¼Ó¼Ò×å×ʽð  
 | 
# @param addFamilyActiveValue Ôö¼Ó¼Ò×å»îÔ¾¶È  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
# @remarks Í¨ÖªÊÀ½ç·þÎñÆ÷ÀÛ¼Ó¼Ò×åÊôÐÔ  
 | 
def SendPack_GameServer_AddFamilyDetail(curPlayer, addFamilyHornor = 0, addFamilyMoney = 0, addFamilyActiveValue = 0, resion=0):  
 | 
#    //Ôö¼Ó¼Ò×åÈÙÓþ  
 | 
#    int      GetAddFamilyHornor();  
 | 
#    //Ôö¼Ó¼Ò×å×ʽð  
 | 
#    int      GetAddFamilyMoney();  
 | 
#    //Ôö¼Ó¼Ò×å»îÔ¾¶È  
 | 
#    int      GetFamilyActiveValue();  
 | 
#    GameWorld.Log('addFamilyHornor = %s, addFamilyMoney = %s, addFamilyActiveValue = %s'%  
 | 
#                        (addFamilyHornor, addFamilyMoney, addFamilyActiveValue))  
 | 
  
 | 
    #curPlayer.GameServer_AddFamilyDetail(addFamilyHornor, addFamilyMoney, addFamilyActiveValue)  
 | 
    #¸ÄΪPY°ü  
 | 
    if not curPlayer.GetFamilyID():  
 | 
        return  
 | 
    sendPack = ChMapToGamePyPack.tagMGAddFamilyDetail()  
 | 
    sendPack.PlayerID = curPlayer.GetPlayerID()  
 | 
    sendPack.AddFamilyHornor = addFamilyHornor  
 | 
    sendPack.AddFamilyMoney = addFamilyMoney  
 | 
    sendPack.FamilyActiveValue = addFamilyActiveValue  
 | 
    sendPack.AddResion = resion  
 | 
    NetPackCommon.SendPyPackToGameServer(sendPack)  
 | 
    GameWorld.DebugLog("AddFamilyDetail addFamilyHornor=%s,addFamilyMoney=%s,addFamilyActiveValue=%s, resion=%s"   
 | 
                       % (addFamilyHornor, addFamilyMoney, addFamilyActiveValue, resion), curPlayer.GetPlayerID())  
 | 
    return  
 | 
#---------------------------------------------------------------------  
 | 
##֪ͨÊÀ½ç·þÎñÆ÷ÀÛ¼Ó¼Ò×åÊôÐÔ  
 | 
# @param curPlayer Íæ¼ÒʵÀý  
 | 
# @param addFamilyActiveValue Ôö¼ÓÍæ¼Ò¼Ò×å»îÔ¾¶È  
 | 
# @param addFamilyHornor Ìí¼Ó¼Ò×åÈÙÓþ  
 | 
# @param addFamilyMoney Ìí¼Ó¼Ò×å×ʽð  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
# @remarks Í¨ÖªÊÀ½ç·þÎñÆ÷ÀÛ¼Ó¼Ò×åÊôÐÔ  
 | 
def SendPack_GameServer_AddFamilyDetailEx(curPlayer, addPlayerActiveValue, addFamilyMoney = 0, addFamilyHornor = 0, resion=0):  
 | 
      
 | 
    #µ¶½£Ð¦Ôö¼ÓÍæ¼Ò»îÔ¾¶ÈĬÈÏÐÂÔö¼Ò×å»îÔ¾¶È  
 | 
    addFamilyActiveValue = GetPlayerActiveValue_Change_ActiveValue(addPlayerActiveValue)  
 | 
          
 | 
    SendPack_GameServer_AddFamilyDetail(curPlayer, addFamilyHornor, addFamilyMoney, addFamilyActiveValue, resion)  
 | 
      
 | 
    return  
 | 
#---------------------------------------------------------------------  
 | 
##֪ͨGameServer, ¿Í»§¶Ë¿ªÊ¼´´½¨¼Ò×å  
 | 
# @param curPlayer Íæ¼ÒʵÀý  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
# @remarks Í¨ÖªGameServer, ¿Í»§¶Ë¿ªÊ¼´´½¨¼Ò×å  
 | 
def SendPack_GameServer_InputFamilyName(curPlayer):  
 | 
    #֪ͨGameServerÉèÖò鿴״̬, ·ÀÍâ¹Ò  
 | 
    curPlayer.GameServer_SetPlayerViewFamilyState(ShareDefine.TViewFamilyType_CreateFamily)  
 | 
    #֪ͨ¿Í»§¶Ë´ò¿ªÊäÈë¼Ò×åÃû½çÃæ  
 | 
    curPlayer.Frm_InputFamilyName()  
 | 
    return  
 | 
  
 | 
##֪ͨGameServer, ¿Í»§¶Ë¿ªÊ¼ä¯ÀÀ¼Ò×åÐÅÏ¢  
 | 
# @param curPlayer Íæ¼ÒʵÀý  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
# @remarks Í¨ÖªGameServer, ¿Í»§¶Ë¿ªÊ¼ä¯ÀÀ¼Ò×åÐÅÏ¢  
 | 
def SendPack_GameServer_ViewAllFamily(curPlayer):  
 | 
    #֪ͨGameServerÉèÖò鿴״̬, ·ÀÍâ¹Ò  
 | 
    curPlayer.GameServer_SetPlayerViewFamilyState(ShareDefine.TViewFamilyType_FamilyWar)  
 | 
    #֪ͨGameServer¸ø¿Í»§¶Ë¼Ò×åÐÅÏ¢  
 | 
    curPlayer.GameServer_ViewAllFamily()  
 | 
    return  
 | 
  
 | 
##֪ͨGameServer, Çå³ý¿Í»§¶Ëä¯ÀÀ¼Ò×å״̬  
 | 
# @param curPlayer Íæ¼ÒʵÀý  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
# @remarks Í¨ÖªGameServer, Í¨ÖªGameServer, Çå³ý¿Í»§¶Ëä¯ÀÀ¼Ò×å״̬  
 | 
def SendPack_GameServer_ClearViewFamilyState(curPlayer):  
 | 
    #MapServer¸æËßGameServer×Ô¼ºÊÇ·ñÔÚ´´½¨¼Ò×å״̬  
 | 
    #ÒòΪ¼Ò×å·â°üÊÇÔÚGameServer´¦ÀíµÄ, ·ÀÖ¹±»Æ  
 | 
    if curPlayer.GetViewFamilyState() in [ShareDefine.TViewFamilyType_None,   
 | 
                                          ShareDefine.TViewFamilyType_CreateFamily]:  
 | 
        #TViewFamilyType_CreateFamily״̬ÔÚGameServer DoCreateFamily½áÊøºó½â³ý  
 | 
        return  
 | 
      
 | 
    curPlayer.GameServer_SetPlayerViewFamilyState(ShareDefine.TViewFamilyType_None)  
 | 
    return  
 | 
  
 | 
def __SetForbidFamilyAward(curPlayer):  
 | 
    ''' ÉèÖüÒ×åÏà¹Ø»î¶¯Áì½±ÏÞÖÆ   
 | 
     Èç¹ûÍ˳öʱ½ñÈÕÒÑ¿ªÊ¼¹ý¶ÔÓ¦»î¶¯£¬ÔòÉèÖÃÁì½±ÏÞÖÆ  
 | 
    '''  
 | 
      
 | 
    playerID = curPlayer.GetPlayerID()  
 | 
    openState = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_FamilyActivityDayState)  
 | 
    forbidState = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ForbidFamilyAward)  
 | 
    GameWorld.DebugLog("Í˳ö¼Ò×å´¦Àí¼Ò×å»î¶¯½±ÀøÁìÈ¡ÏÞÖÆ! openState=%s,forbidState=%s" % (openState, forbidState), playerID)  
 | 
      
 | 
    updForbidState = forbidState  
 | 
    for activityType in ShareDefine.Def_FamActivityList:  
 | 
          
 | 
        if not openState&pow(2, activityType):  
 | 
            GameWorld.DebugLog("    ¸Ã¼Ò×å»î¶¯½ñÈÕ먦Æô¹ý£¡ ²»ÉèÖÃÏÞÖÆÁì½±! activityType=%s" % activityType, playerID)  
 | 
            continue  
 | 
        updForbidState = updForbidState|pow(2, activityType)  
 | 
        GameWorld.DebugLog("    ¼Ò×å»î¶¯Áì½±ÏÞÖÆ activityType=%s,updForbidState=%s" % (activityType, updForbidState), playerID)  
 | 
         
 | 
    if updForbidState != forbidState:  
 | 
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_ForbidFamilyAward, updForbidState)  
 | 
        GameWorld.DebugLog("    ¸üмÒ×å»î¶¯Áì½±ÏÞÖÆ: forbidState=%s,updForbidState=%s" % (forbidState, updForbidState), playerID)  
 | 
          
 | 
    return  
 | 
  
 | 
## ÉèÖÃÍæ¼ÒÊÇ·ñ¿ÉÒԲμӼÒ×å»î¶¯  
 | 
#  @param curPlayer Íæ¼ÒʵÀý  
 | 
#  @param isForbid ÊÇ·ñÏÞÖÆ  
 | 
#  @return ·µ»ØÖµÎÞÒâÒå  
 | 
def SetForbidFamilyAction(curPlayer, isForbid):  
 | 
    #===============================================================================================  
 | 
    # if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ForbidFamilyAction) != isForbid:  
 | 
    #    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_ForbidFamilyAction, isForbid)  
 | 
    #   
 | 
    #    # Í¨ÖªÍæ¼ÒÊÇ·ñ¿ÉÒԲμӼÒ×å»î¶¯  
 | 
    #    SendClientForbidFamilyAction(curPlayer)  
 | 
    #===============================================================================================  
 | 
    return  
 | 
  
 | 
  
 | 
## Í¨ÖªÍæ¼ÒÊÇ·ñ¿ÉÒԲμӼÒ×å»î¶¯  
 | 
#  @param curPlayer Íæ¼ÒʵÀý  
 | 
#  @return ·µ»ØÖµÎÞÒâÒå  
 | 
def SendClientForbidFamilyAction(curPlayer):  
 | 
#    isForbid = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ForbidFamilyAction)  
 | 
#      
 | 
#    outCardsCDTime = ChPyNetSendPack.tagPyFamilyActionForbid()  
 | 
#    outCardsCDTime.Clear()  
 | 
#      
 | 
#    outCardsCDTime.IsForbid = isForbid  
 | 
#    NetPackCommon.SendFakePack(curPlayer, outCardsCDTime)  
 | 
    return  
 | 
  
 | 
      
 | 
#===============================================================================  
 | 
# //A6 01  ÏòÍæ¼ÒÉêÇë¼ÓÈë¼Ò×å #tagCGRequestJoinFamilyByPlayer  
 | 
#   
 | 
# struct    tagCGRequestJoinFamilyByPlayer  
 | 
#   
 | 
# {  
 | 
#    tagHead        Head;  
 | 
#    DWORD        AddPlayerID;    //ÉêÇë¼ÓÈëµÄÍæ¼ÒID  
 | 
# };  
 | 
#===============================================================================  
 | 
## Í¨¹ýÉêÇë¼ÓÈë¼Ò×å  
 | 
#  @param index: Íæ¼ÒË÷Òý  
 | 
#  @param clientData: ·â°ü½á¹¹Ìå  
 | 
#  @param tick: Ê±¼ä´Á  
 | 
#  @return: None  
 | 
def RequestAddFamilyByID(index, clientData, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
      
 | 
    addPlayerID = clientData.AddPlayerID    #ÉêÇë½øÈëµÄ¼Ò×åID  
 | 
      
 | 
    addPlayer = GameWorld.GetPlayerManager().FindPlayerByID(addPlayerID)  
 | 
    #¶Ô·½ÏÂÏß  
 | 
    if not addPlayer:  
 | 
        return  
 | 
      
 | 
    addFamilyID = addPlayer.GetFamilyID()  
 | 
    #¶Ô·½Ã»ÓмÒ×å  
 | 
    if addFamilyID <= 0:  
 | 
        return  
 | 
      
 | 
    #ÉêÇë¼ÓÈë  
 | 
    AddFamily(curPlayer, addFamilyID)  
 | 
      
 | 
    #֪ͨµ±Ç°ÉêÇë¼ÓÈëµÄÄÄЩ¼Ò×å  
 | 
    #Sync_RequestAddFamilyInfo(curPlayer)   
 | 
    return  
 | 
      
 | 
      
 | 
#===============================================================================  
 | 
# //A6 02  ÉêÇë¼ÓÈë¼Ò×å#tagCGRequesJoinFamily  
 | 
#   
 | 
# struct    tagCGRequesJoinFamily  
 | 
#   
 | 
# {  
 | 
#    tagHead        Head;  
 | 
#    BYTE        Type;        //ÉêÇëÀàÐÍ  
 | 
#    DWORD        AddFamilyID;    //ÉêÇë¼ÓÈëµÄ¼Ò×å  
 | 
# };  
 | 
#===============================================================================  
 | 
## ÉêÇë¼ÓÈë¼Ò×å  
 | 
#  @param index: Íæ¼ÒË÷Òý  
 | 
#  @param clientData: ·â°ü½á¹¹Ìå  
 | 
#  @param tick: Ê±¼ä´Á  
 | 
#  @return: None  
 | 
def RequestAddFamily(index, clientData, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
      
 | 
    addFamilyID = clientData.AddFamilyID  # ÉêÇë½øÈëµÄ¼Ò×åID  
 | 
    requestType = clientData.Type   # ÉêÇëÀàÐÍ(ÉêÇë/³·Ïú)  
 | 
  
 | 
    if requestType == 0:  
 | 
        #ÉêÇë¼ÓÈë  
 | 
        AddFamily(curPlayer, addFamilyID)  
 | 
          
 | 
    elif requestType == 1:  
 | 
        DelAddFamilyRecord()  
 | 
          
 | 
      
 | 
    #֪ͨµ±Ç°ÉêÇë¼ÓÈëµÄÄÄЩ¼Ò×å  
 | 
    Sync_RequestAddFamilyInfo(curPlayer)   
 | 
    return  
 | 
  
 | 
def DelAddFamilyRecord(curPlayer):  
 | 
    for index in range(0, ChConfig.Def_Player_RequestAddFamilyMaxCnt):  
 | 
              
 | 
        #ÉêÇë¼ÓÈëµÄ¼Ò×åID  
 | 
        requestAddFamilyID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_RequestAddFamilyID%index)   
 | 
        if not requestAddFamilyID:  
 | 
            continue  
 | 
        #±¾°æ±¾ÒòΪ¿Í»§¶ËûÓе¥¸öÈ¡ÏûÉêÇëµÄ²Ù×÷£¬´Ë´¦·¢Ò»´Î°üÒ»´ÎÐÔÈ«²¿È¡Ïû  
 | 
#            if addFamilyID != requestAddFamilyID:  
 | 
#                continue  
 | 
          
 | 
        #ÉêÇëÊýÁ¿-1  
 | 
        requestAddFamilyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_RequestAddFamilyCnt)  
 | 
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_RequestAddFamilyCnt, requestAddFamilyCnt - 1)  
 | 
          
 | 
        #Çå³ý³·ÏúÉêÇëµÄ¼Ò×åID¼Ç¼  
 | 
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_RequestAddFamilyID%index, 0)  
 | 
          
 | 
        #ÏòGameServer·¢ËÍÇëÇóɾ³ý¸ÃÍæ¼ÒµÄÉêÇë¼Ò×åÐÅÏ¢Çé¿ö  
 | 
        sendMsg = str(requestAddFamilyID)  
 | 
        curPlayer.GameServer_QueryPlayerByID(ChConfig.queryType_DelFamilyAction,   
 | 
                                     ShareDefine.Def_ActionType_FamilyAdd, '', sendMsg, len(sendMsg))  
 | 
      
 | 
    Sync_RequestAddFamilyInfo(curPlayer)  
 | 
    return  
 | 
  
 | 
## Í¨Öªµ±Ç°ÉêÇë¼ÓÈëµÄÄÄЩ¼Ò×å  
 | 
#  @param curPlayer:Íæ¼ÒʵÀý  
 | 
#  @return:  None  
 | 
def Sync_RequestAddFamilyInfo(curPlayer):  
 | 
    requestAddFamilyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_RequestAddFamilyCnt)  
 | 
      
 | 
    packList = []  
 | 
    for index in range(0, ChConfig.Def_Player_RequestAddFamilyMaxCnt):  
 | 
        familyID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_RequestAddFamilyID%index)  
 | 
        if familyID == 0:  
 | 
            continue  
 | 
          
 | 
        requestAddFamilyInfo = ChPyNetSendPack.tagRequestJoinFamily()  
 | 
        requestAddFamilyInfo.RequestFamilyID = familyID  
 | 
        packList.append(requestAddFamilyInfo)  
 | 
      
 | 
    requestAddFamily = ChPyNetSendPack.tagMCNotifyRequestJoinFamilyInfo()  
 | 
    requestAddFamily.Clear()  
 | 
    requestAddFamily.RequestCount = len(packList)  
 | 
    requestAddFamily.RequestAddFamilyInfo = packList  
 | 
      
 | 
    NetPackCommon.SendFakePack(curPlayer, requestAddFamily)  
 | 
    return  
 | 
  
 | 
  
 | 
## ÉêÇë¼ÓÈë°ï»á  
 | 
#@param curPlayer ¼Ò×åʵÀý  
 | 
#@param familyID ¼Ò×åID  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
def AddFamily(curPlayer, familyID):  
 | 
      
 | 
    requestAddFamilyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_RequestAddFamilyCnt)  
 | 
    if requestAddFamilyCnt >= ChConfig.Def_Player_RequestAddFamilyMaxCnt:  
 | 
        # jiazu_pan_21675 ¸ÄΪ jiazu_lhs_31379 ×î¶àͬʱÏò%s¸ö°ï»á·¢³öÉêÇë  
 | 
        PlayerControl.NotifyCode(curPlayer, "jiazu_lhs_31379", [ChConfig.Def_Player_RequestAddFamilyMaxCnt])  
 | 
        return  
 | 
          
 | 
    #ÊÇ·ñÒѾÉêÇëÁË  
 | 
    for index in range(0, ChConfig.Def_Player_RequestAddFamilyMaxCnt):  
 | 
        if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_RequestAddFamilyID%index) == familyID:  
 | 
            GameWorld.DebugLog('ÒѾÔÚÉêÇëÁбíÖÐ')  
 | 
            #ÒѾÔÚÉêÇëÁбíÖÐ  
 | 
            return  
 | 
  
 | 
    #ÇëÇó¼Ç¼ÉêÇë½øÈë¼Ò×åÐÅÏ¢  
 | 
    sendMsg = str([familyID, curPlayer.GetFightPower()])  
 | 
    curPlayer.GameServer_QueryPlayerByID(ChConfig.queryType_AddFamilyAction,   
 | 
                                        ShareDefine.Def_ActionType_FamilyAdd, '', sendMsg, len(sendMsg))  
 | 
      
 | 
    #µÈGameServer·´À¡½á¹ûÔÙ´¦Àí  
 | 
    return  
 | 
      
 | 
    #¼Ç¼¸öÈËÉêÇë¼ÓÈëµÄ¼Ò×åID  
 | 
    for index in range(0, ChConfig.Def_Player_RequestAddFamilyMaxCnt):  
 | 
        if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_RequestAddFamilyID%index) == 0:  
 | 
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_RequestAddFamilyID%index, familyID)  
 | 
            break  
 | 
          
 | 
    #¼Ç¼¸öÈËÉêÇë¼ÓÈë¼Ò×åµÄ¸öÊý  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_RequestAddFamilyCnt, requestAddFamilyCnt + 1)  
 | 
      
 | 
    return  
 | 
  
 | 
  
 | 
  
 | 
  
 | 
      
 | 
## Õ½ÃËÍæ¼ÒOnDay  
 | 
#  @param curPlayer  
 | 
#  @return None  
 | 
def FamilyPlayerOnDay(curPlayer):  
 | 
    if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Family):  
 | 
        return  
 | 
    #ÿÈÕ¸£Àû½±Àø  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyDayAward, 0)  
 | 
    Sync_FamilyDayRewardState(curPlayer)  
 | 
    return  
 | 
  
 | 
  
 | 
## Õ½ÃËÍæ¼ÒOnLogin  
 | 
#  @param curPlayer  
 | 
#  @return None  
 | 
def FamilyPlayerOnLogin(curPlayer, tick):  
 | 
    if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Family):  
 | 
        return  
 | 
  
 | 
    PlayerFamilyTech.Sync_PlayerFamilyTechLV(curPlayer)  
 | 
    SyncFamilyActivityInfo(curPlayer)  
 | 
    Sync_FamilyDayRewardState(curPlayer)  
 | 
    return  
 | 
  
 | 
def FamilyPlayerOnLoginCross(curPlayer):  
 | 
    ## µÇ¼¿ç·þ·þÎñÆ÷  
 | 
    crossFamilyMemberLV = curPlayer.GetReceivedSalary()  
 | 
    if crossFamilyMemberLV:  
 | 
        curPlayer.SetFamilyMemberLV(crossFamilyMemberLV)  
 | 
        GameWorld.DebugLog("¿ç·þµÇ¼ÉèÖÃÏÉÃËְλµÈ¼¶: %s" % crossFamilyMemberLV, curPlayer.GetPlayerID())  
 | 
          
 | 
    return  
 | 
  
 | 
  
 | 
  
 | 
  
 | 
## Í¨ÖªGameServerÔö¼Ó¼Ò×åÏà¹ØÐÅÏ¢Öµ  
 | 
# @param curPlayer Íæ¼ÒʵÀý  
 | 
# @param infoDict ÐÅÏ¢×Öµä  
 | 
# @return   
 | 
def Send_GameServer_PyAddFamilyInfoValue(curPlayer, infoDict={}):  
 | 
    if not isinstance(infoDict, dict) or not infoDict:  
 | 
        GameWorld.DebugLog("Send_GameServer_PyAddFamilyInfoValue infoDict=%s err!" % str(infoDict))  
 | 
        return  
 | 
      
 | 
    sendMsg = '%s'%(infoDict)  
 | 
    #GameWorld.DebugLog("Send_GameServer_PyAddFamilyInfoValue sendMsg=%s" % sendMsg)  
 | 
    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, 'PyAddFamilyInfoValue', sendMsg, len(sendMsg))  
 | 
    return  
 | 
  
 | 
  
 | 
  
 | 
#// A6 05  ¼Ò×å¾èÏ×ÊÞÁ¸ #tagCMFamilyDonate  
 | 
#  
 | 
#struct     tagCMFamilyDonate  
 | 
#{  
 | 
#    tagHead        Head;  
 | 
#};  
 | 
def OnFamilyDonateItem(index, clientData, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    if not curPlayer:  
 | 
        return  
 | 
      
 | 
    playerFamilyID = curPlayer.GetFamilyID()  
 | 
    if playerFamilyID <= 0:  
 | 
        return  
 | 
    totalAddActiveValue = 0  
 | 
    delItemList = []  
 | 
    totalCnt = 0  
 | 
    curPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)  
 | 
    for i in range(curPack.GetCount()):  
 | 
        item = curPack.GetAt(i)  
 | 
        if item == None or item.IsEmpty():  
 | 
            continue  
 | 
        if item.GetType() != ChConfig.Def_ItemType_FamilyBossFood:  
 | 
            continue  
 | 
        addActiveValue = item.GetEffectByIndex(0).GetEffectValue(0)  
 | 
#        if not addActiveValue:  
 | 
#            continue  
 | 
        itemCnt = item.GetCount()   
 | 
        totalAddActiveValue += addActiveValue * itemCnt  
 | 
        delItemList.append([item, itemCnt])  
 | 
        totalCnt += itemCnt  
 | 
    if not totalCnt:  
 | 
        GameWorld.DebugLog('±³°üÀïûÓпɾèÏ×µÄÎïÆ·')  
 | 
        return  
 | 
    for eatItem, delCnt in delItemList:  
 | 
        ItemCommon.DelItem(curPlayer, eatItem, delCnt, False)  
 | 
          
 | 
    #ÀÛ¼Ó¸öÈË»îÔ¾¶È/¹±Ï×¶È  
 | 
    if totalAddActiveValue:  
 | 
        AddPlayerFamilyActiveValue(curPlayer, totalAddActiveValue, True, ShareDefine.Def_AddFAVReason_FamilyDonateItem)  
 | 
    AddFamilyBossFood(curPlayer, totalCnt, ShareDefine.Def_AddFAVReason_FamilyDonateItem)  
 | 
    GameWorld.DebugLog('    ¾èÏ×ÏÉÃËÊÞÁ¸ totalCnt=%s,totalAddActiveValue=%s'%(totalCnt,totalAddActiveValue))  
 | 
    return  
 | 
  
 | 
def DoAddFamilyBossFoodEx(curPlayer, itemID, itemCnt, reason=0):  
 | 
    itemData = GameWorld.GetGameData().GetItemByTypeID(itemID)  
 | 
    if not itemData:  
 | 
        return  
 | 
    if itemData.GetType() != ChConfig.Def_ItemType_FamilyBossFood:  
 | 
        return  
 | 
    addActiveValue = itemData.GetEffectByIndex(0).GetEffectValue(0)  
 | 
    if not addActiveValue:  
 | 
        return  
 | 
    totalAddActiveValue = addActiveValue * itemCnt  
 | 
    GameWorld.DebugLog('×Ô¶¯¾èÏ×ÏÉÃËÊÞÁ¸ totalCnt=%s,totalAddActiveValue=%s,reason=%s' % (itemCnt, totalAddActiveValue, reason))  
 | 
    #ÀÛ¼Ó¸öÈË»îÔ¾¶È/¹±Ï×¶È  
 | 
    AddPlayerFamilyActiveValue(curPlayer, totalAddActiveValue, True, reason)  
 | 
    AddFamilyBossFood(curPlayer, itemCnt, reason)  
 | 
    return True  
 | 
  
 | 
##Ôö¼ÓÊÞÁ¸  
 | 
# @param curPlayer Íæ¼ÒʵÀý  
 | 
# @param addExp Ôö¼ÓµÄ¾Ñéµã  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
def AddFamilyBossFood(curPlayer, addExp, reason):  
 | 
    #ûÓмÒ×å²»´¦Àí  
 | 
    familyID = curPlayer.GetFamilyID()  
 | 
    if familyID == 0:  
 | 
        return  
 | 
    if addExp <= 0:  
 | 
        return  
 | 
    SendPack_GameServer_AddFamilyDetailEx(curPlayer, 0, 0, addExp, reason)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
  
 | 
  
 | 
  
 | 
## Ìí¼Ó¼Ò×åʼþ¼Ç¼  
 | 
def AddFamilyEventNote(curPlayer, eventType, valueList):  
 | 
    ##ͬ²½¼Ç¼µ½GameServer, eventTypeĬÈÏΪvalue1  
 | 
    sendMsg = str([eventType] + valueList)  
 | 
    curPlayer.GameServer_QueryPlayerByID(ChConfig.queryType_AddFamilyAction, ShareDefine.Def_ActionType_FamilyEvent, '', sendMsg, len(sendMsg))  
 | 
    GameWorld.DebugLog("AddFamilyEventNote sendMsg=%s" % sendMsg)  
 | 
    return  
 | 
  
 | 
  
 | 
## --------------------------------- ÏÉÃË»îÔ¾ -----------------------------------  
 | 
def OnWeekEx(curPlayer):  
 | 
    #ÖØÖÃ  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FamilyActivityAwardRecord, 0)  
 | 
    for actionid in ShareDefine.FamilyActiveIDList:  
 | 
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FamilyActivityFinishCnt%actionid, 0)  
 | 
      
 | 
    SyncFamilyActivityInfo(curPlayer)  
 | 
    return  
 | 
  
 | 
## ÁìÈ¡ÏÉÃË»îÔ¾¶È½±Àø  
 | 
#  @param curPlayer  
 | 
#  @param awardIndex  
 | 
#  @return None  
 | 
def GetFamilyActivityAward(curPlayer, awardIndex):  
 | 
    return  
 | 
    familyActiveList = IpyGameDataPY.GetFuncEvalCfg('FamilyActive')  
 | 
    familyActiveAwardList = IpyGameDataPY.GetFuncEvalCfg('FamilyActive', 2)  
 | 
    if awardIndex < 0 or awardIndex >= len(familyActiveList):  
 | 
        GameWorld.ErrLog("»îÔ¾¶È½±ÀøË÷Òý²»ºÏ·¨,index=%s,Len=%s" % (awardIndex, len(familyActiveList)))  
 | 
        return  
 | 
      
 | 
    # ÅжÏÊÇ·ñÒÑÁìÈ¡  
 | 
    getAwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FamilyActivityAwardRecord, 0)  
 | 
    if getAwardRecord & pow(2, awardIndex):  
 | 
        GameWorld.Log("ÒѾÁìÈ¡¹ý¸Ã»îÔ¾¶È½±Àø,index=%s" % (awardIndex))  
 | 
        return  
 | 
      
 | 
      
 | 
    needActivity = familyActiveList[awardIndex]  
 | 
    totalActivity = __GetTotalFamilyActivity(curPlayer)#×Ü»îÔ¾¶È  
 | 
      
 | 
    # ÅжϻîÔ¾¶È  
 | 
    if totalActivity < needActivity:  
 | 
        GameWorld.Log("Áì½±»îÔ¾¶È²»×ã,index=%s,needActivity=%s,totalActivity=%s"   
 | 
                      % (awardIndex, needActivity, totalActivity))  
 | 
        return  
 | 
     
 | 
    activityValue = familyActiveAwardList[awardIndex]  
 | 
    PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_FamilyActivity, activityValue)  
 | 
      
 | 
    # ¸üÐÂÒÑÁìÈ¡³É¹¦±ê¼Ç  
 | 
    updAwardRecord = getAwardRecord | (1 << awardIndex)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FamilyActivityAwardRecord, updAwardRecord)  
 | 
      
 | 
    SyncFamilyActivityInfo(curPlayer)  
 | 
    GameWorld.DebugLog("ÁìÈ¡ÏÉÃË»îÔ¾¶È½±ÀøOK£¡ index=%s,needActivity=%s,totalActivity=%s,awardRecord=%s"   
 | 
                       % (awardIndex, needActivity, totalActivity, updAwardRecord))  
 | 
    return  
 | 
  
 | 
def AddFamilyActivity(curPlayer, actionid, addCnt=1):  
 | 
    return  
 | 
    ipyData = IpyGameDataPY.GetIpyGameData('FamilyActivity', actionid)  
 | 
    if not ipyData:  
 | 
        return  
 | 
    if not GameFuncComm.GetFuncCanUse(curPlayer, ipyData.GetUnLockFuncID()):  
 | 
        return  
 | 
    finishCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FamilyActivityFinishCnt%actionid, 0)  
 | 
    maxCnt = ipyData.GetTotalActivityTime()  
 | 
    if finishCnt >= maxCnt:  
 | 
        return  
 | 
    newCnt = min(maxCnt, finishCnt+addCnt)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FamilyActivityFinishCnt%actionid, newCnt)  
 | 
    SyncFamilyActivityInfo(curPlayer, actionid)  
 | 
    GameWorld.DebugLog('    ÏÉÃË»îÔ¾Íê³É´ÎÊý actionid=%s,newCnt=%s'%(actionid, newCnt))  
 | 
    return  
 | 
  
 | 
def __GetTotalFamilyActivity(curPlayer):  
 | 
    ##»ñÈ¡×ÜÏÉÃË»îÔ¾¶È  
 | 
    totalPoint = 0  
 | 
    ipyDataMgr = IpyGameDataPY.IPY_Data()  
 | 
    for i in xrange(ipyDataMgr.GetFamilyActivityCount()):  
 | 
        ipyData = ipyDataMgr.GetFamilyActivityByIndex(i)  
 | 
        actionid = ipyData.GetID()  
 | 
        curTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FamilyActivityFinishCnt%actionid, 0)  
 | 
        totalPoint += curTimes/ipyData.GetSingleTimes()*ipyData.GetSingleActiveValue()  
 | 
    return totalPoint  
 | 
  
 | 
def SyncFamilyActivityInfo(curPlayer, syncActionid=-1):  
 | 
    return  
 | 
    #֪ͨ»îÔ¾ÁìÈ¡Çé¿ö  
 | 
    syncActionIDList = ShareDefine.FamilyActiveIDList if syncActionid==-1 else [syncActionid]  
 | 
    sendPack = ChPyNetSendPack.tagMCFamilyActivityInfo()  
 | 
    sendPack.Clear()  
 | 
    sendPack.AwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FamilyActivityAwardRecord, 0)  
 | 
    sendPack.InfoList = []  
 | 
    for actionid in syncActionIDList:  
 | 
        activityInfo = ChPyNetSendPack.tagMCFamilyActionCnt()  
 | 
        activityInfo.ActionID = actionid  
 | 
        activityInfo.FinishCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FamilyActivityFinishCnt%actionid, 0)  
 | 
        sendPack.InfoList.append(activityInfo)  
 | 
    sendPack.Count = len(sendPack.InfoList)  
 | 
    NetPackCommon.SendFakePack(curPlayer, sendPack)  
 | 
    return  
 | 
  
 | 
#=================ÏÉÃ˸ÄÃû======================  
 | 
#// A6 11 ¼Ò×å¸ÄÃû #tagCMRenameFamily  
 | 
#  
 | 
#struct tagCMRenameFamily  
 | 
#{  
 | 
#    tagHead        Head;  
 | 
#    BYTE        NewNameLen;   
 | 
#    char        NewName[NewNameLen];  
 | 
#    BYTE        ItemIndex;  //¸ÄÃûÎïÆ·ÔÚ±³°üÖеÄλÖà  
 | 
#};  
 | 
def UpdateFamilyName(index, clientData, tick):  
 | 
      
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    if GameWorld.IsCrossServer():  
 | 
        #itemuse_lzxkoy_0:²»¿ÉÔÚ¿ç·þ»·¾³ÏÂʹÓøÄÃû¹¦ÄÜ¡£  
 | 
        PlayerControl.NotifyCode(curPlayer, "itemuse_lzxkoy_0")  
 | 
        return  
 | 
      
 | 
    if not curPlayer.GetFamilyID():  
 | 
        return  
 | 
      
 | 
    if curPlayer.GetDictByKey(ChConfig.Def_Player_Dict_UpdateFamilyName):  
 | 
        #ÕýÔÚ¸ÄÃûÖÐ  
 | 
        GameWorld.Log("ÏÉÃËÒѾÔÚ¸ÄÃûÖÐ...", curPlayer.GetID())  
 | 
        return  
 | 
      
 | 
    #ÐÂÃû×Ö  
 | 
    newName = clientData.NewName  
 | 
    itemIndex = clientData.ItemIndex  
 | 
       
 | 
    itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)  
 | 
    curItem = itemPack.GetAt(itemIndex)  
 | 
    if not ItemCommon.CheckItemCanUse(curItem):  
 | 
        return  
 | 
    if curItem.GetType() != ChConfig.Def_ItemType_ChangeFamilyName:  
 | 
        return  
 | 
  
 | 
    #¸ÄÃûÎïÆ·ÔÚ±³°üµÄλÖà  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_UpdateFamilyNameItemIndex, itemIndex)  
 | 
      
 | 
    #ÉèÖÃÕýÔÚ¸ÄÃûÖÐ...  
 | 
    curPlayer.SetDict(ChConfig.Def_Player_Dict_UpdateFamilyName, 1)  
 | 
      
 | 
    #֪ͨGameServerÕýʽ¸ÄÃû  
 | 
    newNameMsg = str(newName)  
 | 
    GameWorld.Log("UpdateFamilyName Í¨ÖªGameServerÕýʽ¸ÄÃûΪ:%s"%newNameMsg, curPlayer.GetID())  
 | 
    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, 'UpdateFamilyName', newNameMsg, len(newNameMsg))  
 | 
    return  
 | 
  
 | 
  
 | 
## ¿Û³ý¸ÄÃûÏûºÄ  
 | 
#  @param curPlayer: Íæ¼ÒʵÀý  
 | 
#  @return: None  
 | 
def PayUpdateFamilyNameCost(curPlayer):   
 | 
    itemIndex = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_UpdateFamilyNameItemIndex)  
 | 
    #¿Û³ýÎïÆ·  
 | 
    itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)  
 | 
    curItem = itemPack.GetAt(itemIndex)  
 | 
    if curItem:  
 | 
        ItemCommon.DelItem(curPlayer, curItem, 1, True, 'UpdateFamilyName')  
 | 
      
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_UpdateFamilyNameItemIndex, 0)  
 | 
    return  
 | 
  
 | 
def GetFamilyDayAward(curPlayer):  
 | 
    ##ÁìÈ¡ÏÉÃËÿÈÕ½±Àø 2СʱÍÑ»ú¹Òʱ¼ä  
 | 
    if not curPlayer.GetFamilyID():  
 | 
        return  
 | 
    hasGot = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyDayAward)  
 | 
    if hasGot:  
 | 
        GameWorld.DebugLog('ÁìÈ¡ÏÉÃËÿÈÕ½±Àø µ±ÈÕÒÑÁìÈ¡£¡')  
 | 
        return  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyDayAward, 1)  
 | 
    addTime = IpyGameDataPY.GetFuncCfg('FamilyDayAward')  
 | 
    PlayerTJG.AddTJGTime(curPlayer, addTime)  
 | 
    #֪ͨ  
 | 
    Sync_FamilyDayRewardState(curPlayer)  
 | 
    PlayerControl.NotifyCode(curPlayer, 'OfflinePlugSuccess', [addTime/60/60])  
 | 
      
 | 
    return  
 | 
  
 | 
def Sync_FamilyDayRewardState(curPlayer):  
 | 
    clientPack = ChPyNetSendPack.tagMCFamilyDayAward()  
 | 
    clientPack.GetState = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyDayAward)  
 | 
    NetPackCommon.SendFakePack(curPlayer, clientPack)  
 | 
    return 
 |