| #!/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():  | 
|         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.IsMergeServer():  | 
|         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  | 
|   | 
|   | 
|   | 
|   | 
| ## Í¨Öª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):  | 
|     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):  | 
|     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):  | 
|     #֪ͨ»îÔ¾ÁìÈ¡Çé¿ö  | 
|     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.IsMergeServer():  | 
|         #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 |