| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| ##@package GameWorldLogic.FBProcess.GameLogic_ManorWar  | 
| #  | 
| # @todo:ÁìµØÕù¶áÕ½  | 
| # @author hxp  | 
| # @date 2014-04-26  | 
| # @version 2.0  | 
| #  | 
| # ÏêϸÃèÊö: ÁìµØÕù¶áÕ½  | 
| # @change: "2014-04-28 18:00" hxp Õ¼ÁìÌáʾÔö¼ÓµØÍ¼²ÎÊý  | 
| # @change: "2014-06-04 17:30" hxp Ð޸ĶáÆìÌáʾÐÅÏ¢²ÎÊý£¬¸ÄΪȫ·þÌáʾ  | 
| # @change: "2014-06-05 18:00" hxp ÐÞ¸´Ä³Ð©Çé¿öÏÂÍæ¼ÒÉÏÒ»³¡¸±±¾¼Ç¼²»»áÖØÖÃÎÊÌâ  | 
| # @change: "2014-08-16 14:00" hxp »î¶¯Ö»ÔÚÒ»Ïß½øÐÐ  | 
| # @change: "2015-03-16 10:00" hxp ÐÞ¸´±³°ü¿Õ¼ä²»×ãʱÁìȡÿÈÕ½±ÀøÎÊÌâ  | 
| # @change: "2016-08-10 20:00" hxp ÐÞ¸´×îºóÒ»·ÖÖÓ²¹Ê±½×¶ÎPK»á¼ÓPKÖµµÄbug  | 
| # @change: "2016-09-02 17:30" hxp ÆÁ±ÎÁìµØÕ½ÆÚ¼ä»÷ɱÎ޳ͷ£, ÓÉÁìµØÆìÇøÓò¾ö¶¨  | 
| # @change: "2016-11-03 21:30" hxp µ±ÈÕÕ½Ã˱ä¸üʱÁì½±ÅжÏÓÅ»¯  | 
| # @change: "2016-11-09 21:30" xdh Ã¿´Î»î¶¯ÖØÐ¿ªÊ¼Ê±ÖØÖÃÕ¼ÁìȨ  | 
| # @change: "2016-12-28 00:00" hxp ¶áÆìÔö¼ÓְλÏÞÖÆ£»Ôö¼ÓÕ½Ã˵ȼ¶¶ÔÓ¦Õ¼Áì¸öÊýÏÞÖÆ£»Ôö¼ÓÃËÖ÷רÊô³á°ò£»Ôö¼Ó»î¶¯ÖÐÕ½ÃËÊôÐÔ½±Àø£»ÐÞ¸ÄÿÈÕ½±Àø  | 
| #  | 
| #---------------------------------------------------------------------  | 
| #"""Version = 2016-12-28 00:00"""  | 
| #---------------------------------------------------------------------  | 
|   | 
| import PlayerFamily  | 
| import ChPyNetSendPack  | 
| import IPY_GameWorld  | 
| import NetPackCommon  | 
| import PlayerControl  | 
| import ReadChConfig  | 
| import ShareDefine  | 
| import SkillCommon  | 
| import ItemCommon  | 
| import GameWorld  | 
| import AICommon  | 
| import ChConfig  | 
| import FBCommon  | 
| import ItemControler  | 
| import DataRecordPack  | 
| import GameMap  | 
| import BuffSkill  | 
|   | 
| Key_ManorWarState = ShareDefine.Def_Notify_WorldKey_ManorWar  | 
|   | 
| # ¸±±¾Ïà¹Ø×Öµäkey  | 
| ManorWarDict_StartTick = "ManorWar_StartTick" # ÁìµØÕ½»î¶¯¿ªÊ¼Ê±¼ä  | 
| ManorWarDict_LastRefreshTick = "ManorWar_LastRefreshTick" # ÁìµØÕ½Éϴδ¦ÀíË¢ÐÂʱ¼ä  | 
| ManorWarDict_LastAwardTick = "ManorWar_LastAwardTick" # ÁìµØÕ½ÉÏ´ÎÕ½³¡¸£Àûʱ¼ä  | 
| ManorWarDict_CollectFlagTick = "ManorWar_CollectFlagTick" # ÆäËûÕ½ÃË°ÎÆìʱ¼ä  | 
| ManorWarDict_OwnFlagTickTotal = "ManorWar_OwnFlagTickTotal" # ÆäËûÕ½ÃËÓµÓÐÕ½Æìʱ³¤  | 
| ManorWarDict_GetFlagFamilyID = "ManorWar_GetFlagFamilyID" # »ñµÃÕ½ÆìµÄÕ½ÃËid£¬²»´ú±í»ñʤսÃË  | 
| ManorWarDict_WinFamilyID = "ManorWar_WinFamilyID" # ¼Ç¼»ñʤսÃËid£¬¿ÉÄÜΪ0  | 
| ManorWarDict_HadWinResult = "ManorWarDict_HadWinResult" # ¼Ç¼ÊÇ·ñÓлñʤ½á¹û£¬²»´ú±í»î¶¯Ê±¼ä½áÊø  | 
|   | 
|   | 
| # ¸±±¾Íæ¼Ò×Öµäkey  | 
| ManorWarPlayerDict_LastEnterServerDay = 'ManorWarPlayer_LastEnterServerDay' # Íæ¼ÒÉÏÒ»´Î½øÈëÕ½³¡µÄ¿ª·þÌì  | 
| ManorWarPlayerDict_RefreshTick = 'ManorWarPlayer_RefreshTick' # Íæ¼ÒÕ½³¡Í£ÁôË¢ÐÂTick  | 
| ManorWarPlayerDict_StayTick = 'ManorWarPlayer_StayTick' # Íæ¼Ò±¾Õ½³¡Í£ÁôÀÛ¼ÆTick  | 
| ManorWarPlayerDict_GetExpTotal = 'ManorWarPlayer_GetExpTotal' # Íæ¼Ò±¾Õ½³¡»ñµÃ¾ÑéÀÛ¼Æ  | 
| ManorWarPlayerDict_GetZhenQiTotal = 'ManorWarPlayer_GetZhenQiTotal' # Íæ¼Ò±¾Õ½³¡»ñµÃÕæÆøÀÛ¼Æ  | 
|   | 
|   | 
| Def_Action_Close = 0    #¹Ø±Õ±êʶ  | 
| Def_Action_Open = 1     #¿ªÆô±êʶ  | 
| Def_Action_ReadyOver = 98 # ×¼±¸½áÊø  | 
| Def_Action_DoOver = 99  #½áËã±êʶ  | 
|   | 
|   | 
| # ÁìµØÕ½¹«¹²ÅäÖà  | 
| (  | 
| Def_Time_OverTime, # »î¶¯Ê±³¤  | 
| Def_Time_FlagPrepare, # Õ¼ÁìÆìÖÄÐè²É¼¯Ê±¼ä£¬Ãë  | 
| Def_Time_Win, # »ñµÃÁìµØÕ¼ÁìȨÐèÒªµÄʱ¼ä£¬Ãë  | 
| Def_Time_JoinAward, # ¿É»ñµÃ»î¶¯½áÊøµÄÕ½Ã˲ÎÓë½±ÀøÐèÒª´ýÔÚÕ½³¡µÄʱ¼ä£¬Ãë  | 
| Def_JoinAwardFamilyActiveList, # ²ÎÓë½±£¬Õ½Ã˻¶È[ʤÀû·½, Ê§°Ü·½]  | 
| Def_JoinAwardExpList, # ²ÎÓë½±£¬»ñµÃµÄ¾Ñ鹫ʽ[ʤÀû·½, Ê§°Ü·½]  | 
| Def_GetFlagNeedMemberLV, # ¶áÆìËùÐèµÄְλ  | 
| Def_FamilyLVGetFlagCntDict, # Õ½Ã˵ȼ¶¶ÔÓ¦¿ÉÕ¼ÁìÁìµØÊý {Õ½Ã˵ȼ¶:¿ÉÕ¼ÁìÊý, ...}  | 
| Def_LeaderWingSkinInfo, # ÃËÖ÷רÊô³á°ò[ËùÐèÕ¼ÁìÁìµØÊý, ³á°òƤ·ôID]  | 
| ) = range(9)  | 
|   | 
|   | 
| # ÁìµØÌØÊâÐÅÏ¢ÅäÖà  | 
| (  | 
| Def_CollectLVLimit, # ²É¼¯Õ½ÆìÍæ¼ÒµÈ¼¶ÏÞÖÆ  | 
| Def_CollectFamilyMoneyCost, # ²É¼¯Õ½ÆìÏûºÄµÄÕ½ÃË×ʽð  | 
| Def_TimeAward, # Õ½³¡¶¨Ê±¸£Àû  | 
| ) = range(3)  | 
|   | 
| g_winFamilyName = ""  | 
| g_getFlagFamilyName = ""  | 
|   | 
|   | 
| ## »ñµÃ¸±±¾ÅäÖà  | 
| #  @param None  | 
| #  @return ÅäÖÃÐÅÏ¢  | 
| def __GetManorWarCfg():          | 
|     return ReadChConfig.GetEvalChConfig("ManorWarCfg")    | 
|   | 
|   | 
| ## ÁìµØÕ½µØÍ¼ÁÐ±í  | 
| #  @param None  | 
| #  @return ÅäÖÃÐÅÏ¢  | 
| def __GetManorWarMapID():  | 
|     return ReadChConfig.GetEvalChConfig("ManorWarMapID")  | 
|   | 
|   | 
| ## ÁìµØÕ½ÐÅÏ¢  | 
| #  @param mapID: µØÍ¼id  | 
| #  @return ÅäÖÃÐÅÏ¢  | 
| def __GetManorWarInfo(mapID):  | 
|     manorWarInfoDict = ReadChConfig.GetEvalChConfig("ManorWarInfo")  | 
|     if mapID not in manorWarInfoDict:  | 
|         GameWorld.ErrLog("ÁìµØÕù¶áÕ½ mapID=%s not in ManorWarInfo.txt" % mapID)  | 
|         return []  | 
|       | 
|     return manorWarInfoDict[mapID]  | 
|   | 
| ## ÁìµØÕ½ÊÇ·ñ»î¶¯ÖÐ  | 
| #  @param None  | 
| #  @return  | 
| def IsManorWarFighting():  | 
|     nowState = GameWorld.GetGameWorld().GetGameWorldDictByKey(Key_ManorWarState)  | 
|     return nowState in [Def_Action_Open, Def_Action_ReadyOver]  | 
|   | 
| ## ÊÇ·ñÁìµØÕ½µØÍ¼  | 
| #  @param None  | 
| #  @return  | 
| def IsManorWarMap(curPlayer=None):  | 
|     mapID = GameWorld.GetGameWorld().GetMapID()  | 
|       | 
|     if mapID not in __GetManorWarMapID():  | 
|         return False  | 
|       | 
|     # Ö»ÔÚÒ»Ï߻  | 
|     lineID = GameWorld.GetGameWorld().GetLineID()  | 
|     if lineID != 0:  | 
|         if curPlayer:  | 
|             PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_493562")  | 
|         return False  | 
|       | 
|     return True  | 
|   | 
| ## ÁìµØÕ½»î¶¯×´Ì¬¸Ä±ä  | 
| #  @param value: ×´Ì¬Öµ  | 
| #  @param tick  | 
| #  @return  | 
| def OnManorWarStateChange(value, tick):  | 
|     if not IsManorWarMap():  | 
|         return  | 
|       | 
|     curState = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ManorWar)  | 
|       | 
|     # ±¾µØÍ¼ÒÑÊǸÃÖµ£¬²»´¦Àí£¬ÆäËûµØÍ¼Æô¶¯»áÔÙ´Îͬ²½  | 
|     if curState == value:  | 
|         GameWorld.DebugLog("OnManorWarStateChange ÒÑÊǸÃÖµ£¬²»´¦Àí£¡value=%s" % value)  | 
|         return  | 
|       | 
|     if value == Def_Action_Open:  | 
|         __OnOpen(tick)  | 
|     elif value == Def_Action_ReadyOver:  | 
|         __OnClose(tick)  | 
|     elif value == Def_Action_DoOver:  | 
|         __OnDoOver(tick)  | 
|       | 
|     return  | 
|   | 
| ## »ñÈ¡ÉÏÒ»³¡»ñʤսÃËid  | 
| #  @param None  | 
| #  @return  | 
| def __GetLastWinFamilyID():  | 
|     mapID = GameWorld.GetGameWorld().GetMapID()  | 
|     winFamilyIDKey = ShareDefine.Def_Notify_WorldKey_ManorWarWinFamilyID % mapID  | 
|     winFamilyID = GameWorld.GetGameWorld().GetGameWorldDictByKey(winFamilyIDKey)  | 
|     return winFamilyID  | 
|   | 
| ## ÁìµØÕ½OnDay  | 
| #  @param curPlayer  | 
| #  @return  | 
| def ManorWarOnDay(curPlayer):  | 
|     # ÖØÖÃÿÈÕ½±ÀøÁìÈ¡¼Ç¼  | 
|     __UpdDailyAwardRecord(curPlayer, 0)  | 
|     return  | 
|   | 
| ## ÁìµØÕ½OnLogin  | 
| #  @param curPlayer  | 
| #  @param tick  | 
| #  @return  | 
| def OnLogin(curPlayer, tick):  | 
|     CheckManorwarWinLeaderID(curPlayer)  | 
|       | 
|     # ¸üÐÂÁìµØÕ½²ÎÓë½±  | 
|     warServerDayKey = ShareDefine.Def_Notify_WorldKey_ManorWarServerDay  | 
|     warServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(warServerDayKey)  | 
|       | 
|     joinDay = FBCommon.GetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarJoinDay)  | 
|     # ÉϴβÎÓëʱ¼äÓëÉϴλʱ¼ä²»Ò»Ö£¬±íʾÉϴλľÓвμӣ¬ÖØÖòÎÓë״̬  | 
|     if joinDay != warServerDay:  | 
|         FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarContinueTick, 0)  | 
|         FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarJoinAwardState, 0)  | 
|         GameWorld.DebugLog("ÁìµØÕ½ OnLogin ÉϴλľÓвμӣ¬ÖØÖÃÐÅÏ¢£¡ÉϴλÌì=%s,ÉϴβÎÓëÌì=%s"   | 
|                            % (warServerDay, joinDay), curPlayer.GetPlayerID())  | 
|           | 
|     # Í¨ÖªÁìµØÕ½½á¹û  | 
|     Sync_ManorWarResult(curPlayer, 0)  | 
|     Sync_ManorDailyAward(curPlayer)  | 
|     return  | 
|   | 
| ## ÁìµØÕ½__OnOpen  | 
| #  @param tick  | 
| #  @return  | 
| def __OnOpen(tick):  | 
|     global g_winFamilyName  | 
|     global g_getFlagFamilyName  | 
|       | 
|     GameWorld.DebugLog("__OnOpen manorWar...")  | 
|       | 
|     gameFB = GameWorld.GetGameFB()  | 
|       | 
|     # »î¶¯Êý¾Ý³õʼ»¯  | 
|     gameFB.SetGameFBDict(ManorWarDict_StartTick, tick)  | 
|     gameFB.SetGameFBDict(ManorWarDict_LastRefreshTick, tick)  | 
|     gameFB.SetGameFBDict(ManorWarDict_LastAwardTick, tick)  | 
|     gameFB.SetGameFBDict(ManorWarDict_CollectFlagTick, 0)  | 
|     gameFB.SetGameFBDict(ManorWarDict_OwnFlagTickTotal, 0)  | 
|     gameFB.SetGameFBDict(ManorWarDict_GetFlagFamilyID, 0)  | 
|     gameFB.SetGameFBDict(ManorWarDict_WinFamilyID, 0)  | 
|     gameFB.SetGameFBDict(ManorWarDict_HadWinResult, 0)  | 
|     g_winFamilyName = ""  | 
|     g_getFlagFamilyName = ""  | 
|     # ¸ü¸ÄΪÿ´Î¿ªÊ¼¶¼ÖØÖà  | 
|     # ÉèÖÃÆìÖÄĬÈÏÓµÓÐÕßΪÉÏÒ»´Î»î¶¯µÄ»ñʤսÃË  | 
|     #lastWinFamilyID = __GetLastWinFamilyID()  | 
|     #gameFB.SetGameFBDict(ManorWarDict_GetFlagFamilyID, lastWinFamilyID)  | 
|       | 
|     # µØÍ¼Íæ¼Ò¼ÓÈëÕ½³¡  | 
|     playerManager = GameWorld.GetMapCopyPlayerManager()  | 
|     for index in range(0, playerManager.GetPlayerCount()):  | 
|         curPlayer = playerManager.GetPlayerByIndex(index)  | 
|         if not curPlayer:  | 
|             continue  | 
|           | 
|         __DoPlayerJoinWar(curPlayer, tick)  | 
|   | 
|     # ×¢Òâ±¾»î¶¯×îºÃ²»ÒªÓÃClearAllPlayerGameFBDictÀ´ÖØÖø±±¾Íæ¼Ò×ÖµäÐÅÏ¢£¬ÒòΪ±¾»î¶¯µÄµØÍ¼²¢·Ç¶ÀÁ¢»î¶¯µØÍ¼  | 
|     # ÈôʹÓø÷½Ê½ÖØÖ㬿ÉÄܻᵼÖÂÆäËû¹¦ÄܼǼµÄÁÙʱ¼Ç¼±»Çå³ý  | 
|     return  | 
|   | 
|   | 
| ## »ñÈ¡ÁìµØÕ½Ê£Óàʱ¼ä__GetRemainTick  | 
| #  @param tick  | 
| #  @return  | 
| def __GetRemainTick(tick):  | 
|     gameFB = GameWorld.GetGameFB()  | 
|     # ÉèÖõØÍ¼ÁìµØÕ½»î¶¯¿ªÊ¼Ê±¼ä  | 
|     startTick = gameFB.GetGameFBDictByKey(ManorWarDict_StartTick)  | 
|     passTick = max(0, tick - startTick)  | 
|     remainTick = max(0, __GetManorWarCfg()[Def_Time_OverTime] * 1000 - passTick)  | 
|     GameWorld.DebugLog("__GetRemainTick ÁìµØÕ½ remainTick=%s" % remainTick)  | 
|     return remainTick  | 
|   | 
|   | 
| ## ÁìµØÕ½¹Ø±Õ  | 
| #  @param tick  | 
| #  @return  | 
| def __OnClose(tick):  | 
|     GameWorld.DebugLog("__OnClose manorWar...")  | 
|     # ÊÕµ½GameServer֪ͨ»î¶¯½áÊø£¬Í¨ÖªGameServer±¾ÁìµØÕ¼Áì½á¹û  | 
|     # ×¢£º´Ëʱ»¹ÎÞ·¨½áËã»î¶¯£¬ÐèµÈ¸÷ÁìµØÍ¨ÖªGameServerºó£¬ÓÉGameServer·¢Æð½áËã֪ͨ  | 
|     __DoWinLogic()  | 
|     return  | 
|   | 
|   | 
| ##Õ½³¡½áËã´¦Àí  | 
| # @param tick Ê±¼ä´Á  | 
| # @return ÎÞÒâÒå  | 
| def __OnDoOver(tick):  | 
|     GameWorld.DebugLog("__OnDoOver manorWar...")  | 
|   | 
|     playerManager = GameWorld.GetMapCopyPlayerManager()  | 
|     for index in range(0, playerManager.GetPlayerCount()):  | 
|         curPlayer = playerManager.GetPlayerByIndex(index)  | 
|         if not curPlayer:  | 
|             continue  | 
|           | 
|         __DelFBGameBuff(curPlayer, [ChConfig.Def_SkillID_GetFlagFamilyBuff])  | 
|         CheckManorwarWinLeaderID(curPlayer)  | 
|           | 
|         if curPlayer.GetFamilyID() <= 0:  | 
|             continue  | 
|           | 
|         Sync_ManorWarResult(curPlayer, 1)  | 
|           | 
|     return  | 
|   | 
|   | 
| ##Íæ¼Ò½øÈ븱±¾  | 
| # @param curPlayer Íæ¼ÒʵÀý  | 
| # @param tick Ê±¼ä´Á  | 
| # @return ÎÞÒâÒå  | 
| # @remarks Íæ¼Ò½øÈ븱±¾  | 
| def DoEnterFB(curPlayer, tick):  | 
|     if not IsManorWarMap():  | 
|         return  | 
|       | 
|     if not IsManorWarFighting():  | 
|         return  | 
|       | 
|     GameWorld.DebugLog("ÁìµØÕ½ DoEnterFB...")  | 
|       | 
|     __DoPlayerJoinWar(curPlayer, tick)  | 
|     return  | 
|   | 
|   | 
| ##Íæ¼Ò¼ÓÈëÕ½³¡  | 
| # @param curPlayer  | 
| # @param tick  | 
| # @return  | 
| def __DoPlayerJoinWar(curPlayer, tick):  | 
|     GameWorld.DebugLog("ÁìµØÕ½ __DoPlayerJoinWar...", curPlayer.GetPlayerID())  | 
|     gameFB = GameWorld.GetGameFB()  | 
|     # Èç¹ûÔڻÖУ¬ÇҲμӻµÄÌìÊý²»µÈÓÚµ±Ç°¿ª·þÌìÊý£¬ÔòÖØÖøüР | 
|     serverDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay)  | 
|     lastJoinDay = FBCommon.GetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarJoinDay)  | 
|     if lastJoinDay != serverDay:  | 
|         FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarJoinDay, serverDay)  | 
|         FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarContinueTick, 0)  | 
|         FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarJoinAwardState, 0)  | 
|         Sync_ManorWarResult(curPlayer, 0)  | 
|           | 
|         GameWorld.DebugLog("    ¸üвÎÓëÌìÊý=%s£¬ÉÏ´ÎÌì=%s, ÖØÖôýÕ½³¡×Üʱ¼ä£¬²ÎÓ뽱״̬£¡"    | 
|                            % (serverDay, lastJoinDay), curPlayer.GetPlayerID())  | 
|       | 
|     lastEnterServerDay = gameFB.GetPlayerGameFBDictByKey(curPlayer.GetPlayerID(),   | 
|                                                          ManorWarPlayerDict_LastEnterServerDay)  | 
|     if lastEnterServerDay != serverDay:  | 
|         gameFB.SetPlayerGameFBDict(curPlayer.GetPlayerID(), ManorWarPlayerDict_LastEnterServerDay, serverDay)  | 
|         gameFB.SetPlayerGameFBDict(curPlayer.GetPlayerID(), ManorWarPlayerDict_StayTick, 0)  | 
|         gameFB.SetPlayerGameFBDict(curPlayer.GetPlayerID(), ManorWarPlayerDict_GetExpTotal, 0)  | 
|         gameFB.SetPlayerGameFBDict(curPlayer.GetPlayerID(), ManorWarPlayerDict_GetZhenQiTotal, 0)  | 
|         GameWorld.DebugLog("    ¸üнøÈë¸ÃÕ½³¡ÌìÊý=%s£¬ÉÏ´ÎÌì=%s, ÖØÖÃÍæ¼Ò¸ÃÕ½³¡Ïà¹Ø×ÖµäÐÅÏ¢£¡"    | 
|                            % (serverDay, lastEnterServerDay), curPlayer.GetPlayerID())  | 
|           | 
|     curFlagFamilyID = gameFB.GetGameFBDictByKey(ManorWarDict_GetFlagFamilyID)  | 
|       | 
|     __UpdateGetFlagBuff(curPlayer, curFlagFamilyID, tick)  | 
|       | 
|     # ¼ÇÂ¼Íæ¼Ò½ø³¡Ë¢ÐÂʱ¼ä      | 
|     gameFB.SetPlayerGameFBDict(curPlayer.GetPlayerID(), ManorWarPlayerDict_RefreshTick, tick)  | 
|       | 
|     # Í¨Öª»î¶¯Ê£Óàʱ¼ä  | 
|     curPlayer.Sync_TimeTick(IPY_GameWorld.tttFlagTake, 0, __GetRemainTick(tick), True)  | 
|     return  | 
|   | 
|   | 
| ##Íæ¼ÒÍ˳ö  | 
| # @param curPlayer Íæ¼ÒʵÀý  | 
| # @param tick Ê±¼ä´Á  | 
| # @return ÎÞÒâÒå  | 
| def DoExitFB(curPlayer, tick):  | 
|     if not IsManorWarMap():  | 
|         return False  | 
|       | 
|     if not IsManorWarFighting():  | 
|         return False  | 
|       | 
|     GameWorld.DebugLog("__DoPlayerExitManorWar...")  | 
|     __DelFBGameBuff(curPlayer, [ChConfig.Def_SkillID_GetFlagFamilyBuff])  | 
|     return  | 
|   | 
|   | 
| ##¸±±¾¶¨Ê±Æ÷  | 
| # @param tick Ê±¼ä´Á  | 
| # @return ·µ»ØÖµÎÞÒâÒå  | 
| # @remarks ¸±±¾¶¨Ê±Æ÷  | 
| def OnProcess(tick):  | 
|     if not IsManorWarMap():  | 
|         return  | 
|       | 
|     if not IsManorWarFighting():  | 
|         return  | 
|       | 
|     gameFB = GameWorld.GetGameFB()  | 
|   | 
|     mapID = GameWorld.GetGameWorld().GetMapID()  | 
|     manorWarInfo = __GetManorWarInfo(mapID)  | 
|     if not manorWarInfo:  | 
|         return  | 
|       | 
|     awardInterval, expFormat, zhenQiFormat = manorWarInfo[Def_TimeAward]  | 
|       | 
|     refreshInterval = min(awardInterval, 15) * 1000  | 
|     lastRefreshTick = gameFB.GetGameFBDictByKey(ManorWarDict_LastRefreshTick)  | 
|     if tick - lastRefreshTick < refreshInterval:  | 
|         return  | 
|       | 
|     gameFB.SetGameFBDict(ManorWarDict_LastRefreshTick, tick)  | 
|     #GameWorld.DebugLog("ÁìµØÕ½ OnProcess...")  | 
|       | 
|     isGiveAward = False  | 
|     lastAwardTick = gameFB.GetGameFBDictByKey(ManorWarDict_LastAwardTick)  | 
|     if tick - lastAwardTick > awardInterval * 1000:  | 
|         awardTick = lastAwardTick + awardInterval * 1000  | 
|         #GameWorld.DebugLog("    Õ½³¡¸£Àûʱ¼ä£º%s" % (awardTick))  | 
|         awardTick = min(awardTick, ChConfig.Def_UpperLimit_DWord)  | 
|         gameFB.SetGameFBDict(ManorWarDict_LastAwardTick, awardTick)  | 
|         isGiveAward = True  | 
|       | 
|       | 
|     # ¸üÐÂÍæ¼ÒÕ½³¡³ÖÐøÊ±¼ä  | 
|     playerManager = GameWorld.GetMapCopyPlayerManager()  | 
|     for index in range(0, playerManager.GetPlayerCount()):  | 
|         curPlayer = playerManager.GetPlayerByIndex(index)  | 
|         if not curPlayer:  | 
|             continue  | 
|           | 
|         if curPlayer.GetFamilyID() <= 0:  | 
|             continue  | 
|           | 
|         __WarPlayerProcess(curPlayer, isGiveAward, expFormat, zhenQiFormat, tick)  | 
|       | 
|     # Èç¹ûÒѾÓлñʤ½á¹û£¬Ôò²»ÐèÒªÔÙ´¦ÀíÆìÖÄÕ¼Áìʱ¼ä  | 
|     if gameFB.GetGameFBDictByKey(ManorWarDict_HadWinResult):  | 
|         #GameWorld.DebugLog("    ÒѾÓлñʤ½á¹û£¬Ôò²»ÐèÒªÔÙ´¦ÀíÆìÖÄÕ¼Áìʱ¼ä...")  | 
|         return  | 
|       | 
|     # ÅжÏÕ¼Áìʱ¼ä  | 
|     curFlagFamilyID = gameFB.GetGameFBDictByKey(ManorWarDict_GetFlagFamilyID)  | 
|     lastWinFamilyID = __GetLastWinFamilyID()  | 
|     # ²»ÊÇÉÏÒ»´Î»î¶¯Ê¤ÀûÕ½Ã˲Ŵ¦ÀíÕ¼Áì»ñʤÂß¼  | 
|     if curFlagFamilyID > 0 and curFlagFamilyID != lastWinFamilyID:  | 
|         collectFlagTick = gameFB.GetGameFBDictByKey(ManorWarDict_CollectFlagTick)  | 
|         ownTickTotal = tick - collectFlagTick  | 
|         gameFB.SetGameFBDict(ManorWarDict_OwnFlagTickTotal, ownTickTotal)  | 
|         #GameWorld.DebugLog("    Õ½ÃËid=%s Õ½Æì ²É¼¯tick=%s,tick=%s,ÓµÓÐʱ³¤=%s"   | 
|         #                   % (curFlagFamilyID, collectFlagTick, tick, ownTickTotal))  | 
|         if ownTickTotal >= __GetManorWarCfg()[Def_Time_Win] * 1000:  | 
|             # Ö´ÐÐÕ½ÃË»ñʤÂß¼  | 
|             __DoWinLogic(curFlagFamilyID)  | 
|   | 
|     return  | 
|   | 
|   | 
| ##Õ½³¡Íæ¼Ò´¦Àí  | 
| # @param curPlayer  | 
| # @param isGiveAward  | 
| # @param expFormat  | 
| # @param zhenQiFormat  | 
| # @param tick  | 
| # @return  | 
| def __WarPlayerProcess(curPlayer, isGiveAward, expFormat, zhenQiFormat, tick):  | 
|     gameFB = GameWorld.GetGameFB()  | 
|     playerID = curPlayer.GetPlayerID()  | 
|       | 
|     refreshTick = gameFB.GetPlayerGameFBDictByKey(playerID, ManorWarPlayerDict_RefreshTick)  | 
|     if refreshTick <= 0:  | 
|         #GameWorld.DebugLog("__WarPlayerProcess refreshTick=0", curPlayer.GetPlayerID())  | 
|         return  | 
|       | 
|     addTick = max(0, tick - refreshTick)  | 
|     #GameWorld.DebugLog("    __WarPlayerProcess tick=%s,refreshTick=%s,addTick=%s"   | 
|     #                                                % (tick, refreshTick, addTick))  | 
|     gameFB.SetPlayerGameFBDict(playerID, ManorWarPlayerDict_RefreshTick, tick)  | 
|       | 
|     # ¸üб¾Õ½³¡ÀÛ¼ÆÊ±¼ä  | 
|     curContinueTick = gameFB.GetPlayerGameFBDictByKey(playerID, ManorWarPlayerDict_StayTick)  | 
|     updTick = curContinueTick + addTick  | 
|     updTick = min(updTick, ChConfig.Def_UpperLimit_DWord)  | 
|     gameFB.SetPlayerGameFBDict(playerID, ManorWarPlayerDict_StayTick, updTick)  | 
|     #GameWorld.DebugLog("    ¸üдýÔÚ±¾Õ½³¡Ê±¼ä£ºcurTick=%s,addTick=%s,updTick=%s"   | 
|     #                   % (curContinueTick, addTick, updTick), playerID)  | 
|       | 
|     # ¸üÐÂÕ½³¡×ÜÀÛ¼ÆÊ±¼ä  | 
|     allContinueTick = FBCommon.GetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarContinueTick)  | 
|     updTick = allContinueTick + addTick  | 
|     updTick = min(updTick, ChConfig.Def_UpperLimit_DWord)  | 
|     FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarContinueTick, updTick)  | 
|     # ³¬¹ý¿ÉÁìÈ¡²ÎÓ뽱ʱ¼ä£¬ÉèÖÃΪ¿ÉÁìÈ¡  | 
|     if updTick >= __GetManorWarCfg()[Def_Time_JoinAward] * 1000 \  | 
|         and FBCommon.GetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarJoinAwardState) != 1:  | 
|         #GameWorld.DebugLog("    ÉèÖÿÉÁìÈ¡ÁìµØÕ½²ÎÓë½±£¡")  | 
|         FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarJoinAwardState, 1)  | 
|           | 
|     #GameWorld.DebugLog("    ¸üдýÔÚÕ½³¡×Üʱ¼ä£ºcurTick=%s,addTick=%s,updTick=%s"   | 
|     #                   % (allContinueTick, addTick, updTick), playerID)  | 
|       | 
|     # Õ½³¡¸£Àû  | 
|     if not isGiveAward:  | 
|         return  | 
|       | 
|     reLV = curPlayer.GetLV()  | 
|     reExp = PlayerControl.GetPlayerReExp(curPlayer)  | 
|     addExp = eval(expFormat)  | 
|     addZhenQi = eval(zhenQiFormat)  | 
|     playerControl = PlayerControl.PlayerControl(curPlayer)  | 
|     playerControl.AddExp(addExp)  | 
|     PlayerControl.PlayerAddZhenQi(curPlayer, addZhenQi, True, True, "ManorWar")  | 
|       | 
|     totalExp = gameFB.GetPlayerGameFBDictByKey(playerID, ManorWarPlayerDict_GetExpTotal) + addExp  | 
|     totalZhenQi = gameFB.GetPlayerGameFBDictByKey(playerID, ManorWarPlayerDict_GetZhenQiTotal) + addZhenQi  | 
|     gameFB.SetPlayerGameFBDict(playerID, ManorWarPlayerDict_GetExpTotal, totalExp)  | 
|     gameFB.SetPlayerGameFBDict(playerID, ManorWarPlayerDict_GetZhenQiTotal, totalZhenQi)  | 
|     #GameWorld.DebugLog("    Õ½³¡¸£ÀûreLV=%s,reExp=%s,addExp=%s,addZQ=%s,totalExp=%s,totalZQ=%s"   | 
|     #                   % (reLV, reExp, addExp, addZhenQi, totalExp, totalZhenQi), playerID)  | 
|     return  | 
|   | 
|   | 
| ##ʤÀûÂß¼´¦Àí  | 
| # @param winFamilyID Ä¬ÈÏid0  | 
| # @return  | 
| def __DoWinLogic(winFamilyID=0):  | 
|     global g_winFamilyName  | 
|     GameWorld.DebugLog("ÁìµØÕ½ __DoWinLogic()...winFamilyID=%s" % winFamilyID)  | 
|   | 
|     gameFB = GameWorld.GetGameFB()  | 
|   | 
|     if gameFB.GetGameFBDictByKey(ManorWarDict_HadWinResult):  | 
|         GameWorld.DebugLog("    ÒѾÓлñʤ½á¹û£¬Ôò²»ÐèÒªÔÙ´¦Àí»ñʤÂß¼...")  | 
|         return  | 
|       | 
|     getFlagFamilyID = gameFB.GetGameFBDictByKey(ManorWarDict_GetFlagFamilyID)  | 
|     lastWinFamilyID = __GetLastWinFamilyID()  | 
|       | 
|     # Ã»ÓлñʤսÃË  | 
|     if winFamilyID <= 0:  | 
|         # Èç¹ûÓÐÉÏÒ»´Î»î¶¯Ê¤ÀûÕ½ÃË£¬Ôò´ú±í·ÀÊØ³É¹¦  | 
|         if lastWinFamilyID > 0:  | 
|             winFamilyID = lastWinFamilyID  | 
|           | 
|         # Èç¹ûÉÏÒ»´Î»î¶¯Ã»Óб»Õ¼Á죬Ôò»ñʤÕßΪµ±Ç°»ñµÃÕ½ÆìµÄÕ½ÃË  | 
|         elif getFlagFamilyID > 0:  | 
|             winFamilyID = getFlagFamilyID  | 
|               | 
|         # ÎÞÈËÕ¼Áì  | 
|         else:  | 
|             pass  | 
|           | 
|     if winFamilyID == getFlagFamilyID:  | 
|         g_winFamilyName = g_getFlagFamilyName  | 
|           | 
|               | 
|     gameFB.SetGameFBDict(ManorWarDict_WinFamilyID, winFamilyID)  | 
|     gameFB.SetGameFBDict(ManorWarDict_HadWinResult, 1)  | 
|       | 
|     # Í¨ÖªGameServer¸üÐÂÕ¼ÁìȨ  | 
|     mapID = GameWorld.GetGameWorld().GetMapID()  | 
|     sendMsg = '%s' % ([mapID, winFamilyID])   | 
|     GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'ManorWarWinner',  | 
|                                                               sendMsg, len(sendMsg))  | 
|     return  | 
|   | 
|   | 
| ##»ñµÃ¸±±¾°ïÖúÐÅÏ¢, ÓÃÓÚ֪ͨÕóÓª±È·ÖÌõ  | 
| # @param curPlayer Íæ¼ÒʵÀý  | 
| # @param tick Ê±¼ä´Á  | 
| # @return ÎÞÒâÒå  | 
| # @remarks ÓÃÓÚ֪ͨÕóÓª±È·ÖÌõ  | 
| def DoFBHelp(curPlayer, tick):  | 
|     if not IsManorWarMap():  | 
|         return False  | 
|       | 
|     if not IsManorWarFighting():  | 
|         return False  | 
|   | 
|     gameFB = GameWorld.GetGameFB()  | 
|       | 
|     playerID = curPlayer.GetPlayerID()  | 
|     getExp = gameFB.GetPlayerGameFBDictByKey(playerID, ManorWarPlayerDict_GetExpTotal)  | 
|     getZhenQi = gameFB.GetPlayerGameFBDictByKey(playerID, ManorWarPlayerDict_GetZhenQiTotal)  | 
|     stayTick = gameFB.GetPlayerGameFBDictByKey(playerID, ManorWarPlayerDict_StayTick)  | 
|     curFlagFamilyID = gameFB.GetGameFBDictByKey(ManorWarDict_GetFlagFamilyID)  | 
|     getName = g_getFlagFamilyName if curFlagFamilyID else ''  | 
|     winFamilyID = gameFB.GetGameFBDictByKey(ManorWarDict_WinFamilyID)  | 
|     winName = g_winFamilyName if winFamilyID else ''  | 
|     helpDict = {  | 
|                 'isOver':gameFB.GetGameFBDictByKey(ManorWarDict_HadWinResult),  | 
|                 'winName':winName, 'getName':getName,  | 
|                 'ownTick':gameFB.GetGameFBDictByKey(ManorWarDict_OwnFlagTickTotal),  | 
|                 'getExp':getExp, 'getZhenQi':getZhenQi, 'stayTick':stayTick  | 
|                 }  | 
|   | 
|     #GameWorld.DebugLog("DoFBHelp manorWar helpDict=%s" % str(helpDict), playerID)  | 
|   | 
|     #֪ͨ¸±±¾°ïÖú½çÃæ  | 
|     FBCommon.Notify_FBHelp(curPlayer, helpDict)  | 
|     return  | 
|   | 
|   | 
| ##Íæ¼ÒÍ˳ö¼Ò×å´¦Àí  | 
| # @param curPlayer Íæ¼ÒʵÀý  | 
| # @param tick Ê±¼ä´Á  | 
| # @return ·µ»ØÖµÎÞÒâÒå  | 
| def OnLeaveFamily(curPlayer, tick):  | 
|     GameWorld.DebugLog("OnLeaveFamily manorWar...")  | 
|     if not IsManorWarMap():  | 
|         return False  | 
|       | 
|     if not IsManorWarFighting():  | 
|         return False  | 
|       | 
|     # É¾³ý¶áÆìbuff  | 
|     __DelFBGameBuff(curPlayer, [ChConfig.Def_SkillID_GetFlagFamilyBuff])  | 
|     return  | 
|   | 
| ## ¿É·ñ¹¥»÷  | 
| def CanManorWarAtk():  | 
|     return IsManorWarMap() and IsManorWarFighting()  | 
|   | 
| ### Íæ¼Ò¹¥»÷Íæ¼ÒÊÇ·ñÓгͷ£  | 
| ##  @param atkPlayer: ¹¥»÷·½  | 
| ##  @param defPlayer: ·ÀÊØ·½  | 
| ##  @return Íæ¼Ò¹¥»÷Íæ¼ÒÊÇ·ñÓгͷ£  | 
| #def DoFBAttackHasPunish(atkPlayer, defPlayer):  | 
| #    # Èç¹ûÔÚÁìµØÕ½µØÍ¼£¬ÇÒÔڻÖУ¬PKÎ޳ͷ£  | 
| #    if IsManorWarMap() and IsManorWarFighting():  | 
| #        return False  | 
| #      | 
| #    return True  | 
|   | 
|   | 
| ##¸±±¾ÖÐ,Õ¼ÁìNPCµÄLoadingʱ¼ä.  | 
| # @param curPlayer Íæ¼ÒʵÀý  | 
| # @param curNPC NPCʵÀý  | 
| # @return ·µ»ØÖµ, Loadingʱ¼ä  | 
| # @remarks ¸±±¾ÖÐ,Õ¼ÁìNPCµÄLoadingʱ¼ä  | 
| def GetFBPrepareTime(curPlayer, curNPC):  | 
|     return __GetManorWarCfg()[Def_Time_FlagPrepare] * 1000  | 
|   | 
|   | 
| ##ÊÇ·ñ¿ÉÒÔ¶áÆì  | 
| # @param curPlayer Íæ¼ÒʵÀý  | 
| # @param curNPC NPCʵÀý  | 
| # @param tick Ê±¼ä´Á  | 
| # @return ÎÞÒâÒå  | 
| # @remarks  | 
| def OnCanCollect(curPlayer, curNPC, tick):  | 
|     if not IsManorWarMap(curPlayer):  | 
|         return  | 
|       | 
|     # Ã»ÓÐÕ½Ã˵IJ»Äܲɼ¯  | 
|     if curPlayer.GetFamilyID() <= 0:  | 
|         PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_273188")  | 
|         return  | 
|       | 
|     gameFB = GameWorld.GetGameFB()  | 
|       | 
|     # ·ÇÕ½¶·½×¶Î²»¿É²É¼¯  | 
|     if not IsManorWarFighting():  | 
|         PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_740826")  | 
|         return False  | 
|       | 
|     # Èç¹ûÒѾÓÐʤÀû½á¹û£¬Ôò²»ÐèÒªÔÙ´¦Àí  | 
|     if gameFB.GetGameFBDictByKey(ManorWarDict_HadWinResult):  | 
|         curWinFamilyID = gameFB.GetGameFBDictByKey(ManorWarDict_WinFamilyID)  | 
|         if curWinFamilyID <= 0 or curWinFamilyID == curPlayer.GetFamilyID():  | 
|             PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_740826")  | 
|         else:  | 
|             PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_341290")                | 
|         return  | 
|       | 
|     # ÒÑ»ñµÃÕ½ÆìµÄÕ½Ã˲»¿É²É¼¯  | 
|     getFlagFamilyID = gameFB.GetGameFBDictByKey(ManorWarDict_GetFlagFamilyID)  | 
|     if getFlagFamilyID == curPlayer.GetFamilyID():  | 
|         PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_976459")  | 
|         return False  | 
|       | 
|     manorCfg = __GetManorWarCfg()  | 
|     # ËùÐè³ÉԱְλ  | 
|     if curPlayer.GetFamilyMemberLV() < manorCfg[Def_GetFlagNeedMemberLV]:          | 
|         PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_221749")  | 
|         return False  | 
|       | 
|     # Õ½Ã˵ȼ¶¿ÉÕ¼ÁìÊýÁ¿  | 
|     curFamilyGetCnt = 0  | 
|     warMapList = __GetManorWarMapID()  | 
|     for mapID in warMapList:  | 
|         tempFamilyIDKey = ShareDefine.Def_Notify_WorldKey_ManorWarTempFamilyID % mapID  | 
|         if GameWorld.GetGameWorld().GetGameWorldDictByKey(tempFamilyIDKey) == curPlayer.GetFamilyID():  | 
|             curFamilyGetCnt += 1  | 
|     canGetCnt = manorCfg[Def_FamilyLVGetFlagCntDict].get(curPlayer.GetFamilyLV(), 0)  | 
|     if canGetCnt <= curFamilyGetCnt:  | 
|         PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_577188", [curPlayer.GetFamilyLV(), canGetCnt])  | 
|         return False  | 
|       | 
|     mapID = GameWorld.GetGameWorld().GetMapID()  | 
|     manorWarInfo = __GetManorWarInfo(mapID)  | 
|     if not manorWarInfo:  | 
|         return False  | 
|       | 
|     # ²É¼¯µÈ¼¶  | 
|     limitLV = manorWarInfo[Def_CollectLVLimit]  | 
|     if limitLV > curPlayer.GetLV():  | 
|         PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_818877", [limitLV])  | 
|         return False  | 
|       | 
|     # ²É¼¯Õ½ÃË×ʽðÏûºÄ      | 
|     familyMoneyCost = manorWarInfo[Def_CollectFamilyMoneyCost]  | 
|     familyMoney = curPlayer.GetFamilyMoney()  | 
|     if familyMoney < familyMoneyCost:  | 
|         PlayerControl.NotifyCode(curPlayer, "Collect_liubo_817032", [familyMoneyCost])  | 
|         return False  | 
|       | 
|     return True  | 
|   | 
|   | 
| ##Íæ¼ÒÊÕ¼¯³É¹¦(Ëþ, Æì)  | 
| # @param curPlayer Íæ¼ÒʵÀý  | 
| # @param tick Ê±¼ä´Á  | 
| # @return ÎÞÒâÒå  | 
| # @remarks  | 
| def OnCollectOK(curPlayer, npcID, tick):  | 
|     global g_getFlagFamilyName  | 
|   | 
|     if not IsManorWarMap(curPlayer):  | 
|         return  | 
|       | 
|     GameWorld.DebugLog("ManorWar OnCollectOK...familyID=%s,tick=%s"   | 
|                        % (curPlayer.GetFamilyID(), tick), curPlayer.GetPlayerID())  | 
|   | 
|     # ·ÇÕ½¶·½×¶Î²»¿É²É¼¯  | 
|     if not IsManorWarFighting():  | 
|         return False  | 
|       | 
|     # Èç¹ûÒѾÓнá¹û£¬Ôò²»¿É²É¼¯  | 
|     gameFB = GameWorld.GetGameFB()  | 
|     if gameFB.GetGameFBDictByKey(ManorWarDict_HadWinResult) > 0:            | 
|         return  | 
|       | 
|     tagObj = curPlayer.GetActionObj()  | 
|       | 
|     if not tagObj:  | 
|         return  | 
|       | 
|     if tagObj.GetGameObjType() != IPY_GameWorld.gotNPC:  | 
|         return  | 
|       | 
|     curNPC = GameWorld.GetNPCManager().GetNPCByIndex(tagObj.GetIndex())  | 
|     AICommon.ClearPlayerPreparing(curNPC)  | 
|   | 
|     curFlagFamilyID = gameFB.GetGameFBDictByKey(ManorWarDict_GetFlagFamilyID)  | 
|     nextFlagFamilyID = curPlayer.GetFamilyID()  | 
|     if nextFlagFamilyID <= 0:  | 
|         return  | 
|       | 
|     if curFlagFamilyID == nextFlagFamilyID:  | 
|         return  | 
|       | 
|     mapID = curPlayer.GetMapID()  | 
|     manorWarInfo = __GetManorWarInfo(mapID)  | 
|     if not manorWarInfo:  | 
|         return False  | 
|       | 
|     familyMoneyCost = manorWarInfo[Def_CollectFamilyMoneyCost]  | 
|     # ·¢ËÍÇëÇóµ½ÊÀ½ç·þÎñÆ÷¿Û³ý°ÎÆìÏûºÄ[familyID, ÏûºÄ×ʽð]  | 
|     sendMsg = '%s' % ([mapID, nextFlagFamilyID, familyMoneyCost])   | 
|     GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'ManorWarGetFlagCost',  | 
|                                                               sendMsg, len(sendMsg))  | 
|       | 
|     # ¸üÐÂÕ½Æì¹éÊôÐÅÏ¢£¬»ñµÃÕ½Æìʱ¼ä£¬ÖØÖÃÓµÓÐÕ½Æìʱ¼ä  | 
|     gameFB.SetGameFBDict(ManorWarDict_GetFlagFamilyID, nextFlagFamilyID)  | 
|     lastWinFamilyID = __GetLastWinFamilyID()  | 
|     if nextFlagFamilyID != lastWinFamilyID:  | 
|         gameFB.SetGameFBDict(ManorWarDict_CollectFlagTick, tick)  | 
|         gameFB.SetGameFBDict(ManorWarDict_OwnFlagTickTotal, 0)  | 
|       | 
|     # ¸üÐÂÕ½ÆìbuffÌØÐ§  | 
|     for index in range(GameWorld.GetMapCopyPlayerManager().GetPlayerCount()):  | 
|         player = GameWorld.GetMapCopyPlayerManager().GetPlayerByIndex(index)  | 
|         if not player:  | 
|             continue  | 
|           | 
|         __UpdateGetFlagBuff(player, nextFlagFamilyID, tick)  | 
|       | 
|     # Õ¼Áì¹ã²¥  | 
|     PlayerControl.WorldNotify(0, "FB_liubo_149184", [curPlayer.GetFamilyName(),   | 
|                                                curPlayer.GetPlayerName(), mapID, curNPC.GetNPCID()])  | 
|     GameWorld.DebugLog("    lastWinFamilyID=%s,curFlagFamilyID=%s"   | 
|                        % (lastWinFamilyID, curFlagFamilyID), curPlayer.GetPlayerID())  | 
|     # ¸øÒ»³¡»î¶¯Ê¤ÀûÕ½ÃË·¢ÆµµÀÏûÏ¢  | 
|     if lastWinFamilyID > 0 and nextFlagFamilyID != lastWinFamilyID:  | 
|         PlayerControl.FamilyNotify(lastWinFamilyID, "PK_liubo_293296", [mapID])  | 
|       | 
|     # ¸øÉÏÒ»´Î°ÎÆìÕ½ÃË·¢ÆµµÀÏûÏ¢  | 
|     if curFlagFamilyID > 0 and curFlagFamilyID != lastWinFamilyID:  | 
|         PlayerControl.FamilyNotify(curFlagFamilyID, "PK_liubo_293296", [mapID])  | 
|       | 
|     g_getFlagFamilyName = curPlayer.GetFamilyName()  | 
|     return  | 
|   | 
| ##¸üжáÆìbuff  | 
| # @param curPlayer  | 
| # @param curFlagFamilyID  | 
| # @param tick  | 
| # @return ÎÞ  | 
| def __UpdateGetFlagBuff(curPlayer, curFlagFamilyID, tick):  | 
|     # ÇåÌØÐ§  | 
|     if curPlayer.GetFamilyID() != curFlagFamilyID:  | 
|         __DelFBGameBuff(curPlayer, [ChConfig.Def_SkillID_GetFlagFamilyBuff])  | 
|           | 
|     # ¼ÓÌØÐ§  | 
|     elif curPlayer.GetFamilyID() == curFlagFamilyID and curFlagFamilyID > 0:  | 
|         SkillCommon.AddBuffBySkillType(curPlayer, ChConfig.Def_SkillID_GetFlagFamilyBuff, tick)  | 
|     return  | 
|   | 
| ##ɾ³ýBUFF  | 
| # @param curPlayer Íæ¼Ò  | 
| # @param buffList BuffIDÁÐ±í  | 
| # @return ÎÞ  | 
| # @remarks É¾³ýBUFF  | 
| def __DelFBGameBuff(curPlayer, buffList):  | 
|     tick = GameWorld.GetGameWorld().GetTick()  | 
|     for skillTypeID in buffList:  | 
|         if not skillTypeID or skillTypeID <= 0:  | 
|             continue  | 
|           | 
|         BuffSkill.DelBuffBySkillID(curPlayer, skillTypeID, tick)  | 
|     return  | 
|           | 
|   | 
| ##²éÕÒÍæ¼ÒBUFF  | 
| # @param curPlayer Íæ¼Ò  | 
| # @param skillTypeID BuffID  | 
| # @return BUFFºÍBUFF¹ÜÀíÆ÷  | 
| # @remarks ²éÕÒÍæ¼ÒBUFF  | 
| def __FindBuffByID(curPlayer, skillTypeID):  | 
|     findSkill = GameWorld.GetGameData().GetSkillBySkillID(skillTypeID)  | 
|     if not findSkill:  | 
|         GameWorld.ErrLog("Êý¾Ý¿âÖÐûÓÐÕÒµ½¼¼ÄÜ£¬skillTypeID = %s" % skillTypeID)  | 
|         return None, None  | 
|       | 
|     buffType = SkillCommon.GetBuffType(findSkill)  | 
|     buffTuple = SkillCommon.GetBuffManagerByBuffType(curPlayer, buffType)  | 
|     #ͨ¹ýÀàÐÍ»ñȡĿ±êµÄbuff¹ÜÀíÆ÷Ϊ¿Õ£¬ÔòÌø³ö  | 
|     if buffTuple == ():  | 
|         return None, None  | 
|       | 
|     buffManager = buffTuple[0]  | 
|       | 
|     findBuff = buffManager.FindBuff(skillTypeID)  | 
|       | 
|     return findBuff, buffManager  | 
|   | 
| ###---------------------------------------------------------------------  | 
| ##// AB 01 ÁìÈ¡ÁìµØÕù¶áÕ½²ÎÓë½± #tagCMGetManorWarJoinAward  | 
| ## ÁìÈ¡ÁìµØÕù¶áÕ½²ÎÓë½±  | 
| #  @param None  | 
| #  @return None  | 
| def OnGetManorWarJoinAward(index, clientData, tick):  | 
|     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  | 
|       | 
|     GameWorld.Log("ÁìÈ¡ÁìµØÕù¶áÕ½²ÎÓë½±...", curPlayer.GetPlayerID())  | 
|   | 
|     if curPlayer.GetFamilyID() <= 0:  | 
|         GameWorld.Log("    Íæ¼ÒÎÞÕ½ÃË£¬²»¿ÉÁì½±!", curPlayer.GetPlayerID())  | 
|         return  | 
|       | 
|     if IsManorWarFighting():  | 
|         GameWorld.Log("    »î¶¯ÖУ¬²»¿ÉÁì½±!", curPlayer.GetPlayerID())  | 
|         PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_672958")  | 
|         return  | 
|       | 
|     forbidState = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ForbidFamilyAward)  | 
|     if forbidState&pow(2, ShareDefine.Def_FamActivity_Manor):  | 
|         GameWorld.Log("    µ±Èջ¿ªÆôºó±ä¸ü¹ýÕ½ÃË£¬ÎÞ·¨ÁìÈ¡½±Àø!", curPlayer.GetPlayerID())  | 
|         PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_193917")  | 
|         return  | 
|       | 
|     joinAwardState = FBCommon.GetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarJoinAwardState)  | 
|     if joinAwardState == 2:  | 
|         GameWorld.Log("    ÒÑÁìÈ¡¹ý²ÎÓë½±!", curPlayer.GetPlayerID())  | 
|         return  | 
|       | 
|     if joinAwardState == 0:  | 
|         GameWorld.Log("    Ã»ÓÐÁìÈ¡²ÎÓ뽱ȨÏÞ!", curPlayer.GetPlayerID())  | 
|         return  | 
|       | 
|     familyWinState = __GetFamilyWarResult(curPlayer)  | 
|     if familyWinState not in [1, 2]:  | 
|         GameWorld.Log("    Õ½ÃËʤ¸ºÇé¿öδ֪!familyID=%s" % curPlayer.GetFamilyID(),  | 
|                            curPlayer.GetPlayerID())  | 
|         return  | 
|       | 
|     awardIndex = 0 if familyWinState == 1 else 1 # Ê¤Àû0£¬Ê§°Ü1  | 
|       | 
|     reLV = curPlayer.GetLV()  | 
|     reExp = PlayerControl.GetPlayerReExp(curPlayer)  | 
|       | 
|     familyActiveAwardList = __GetManorWarCfg()[Def_JoinAwardFamilyActiveList]  | 
|     addFamilyActive = familyActiveAwardList[awardIndex]  | 
|     expAwardList = __GetManorWarCfg()[Def_JoinAwardExpList]  | 
|     addExp = eval(expAwardList[awardIndex])  | 
|       | 
|     FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarJoinAwardState, 2)  | 
|     Sync_ManorWarResult(curPlayer, 0)  | 
|       | 
| #    PlayerFamily.AddPlayerFamilyActiveValue(curPlayer, addFamilyActive, True, \  | 
| #                                                    PlayerFamily.Def_AddFAVReason_ManorWar)  | 
|     PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_243780", [addFamilyActive])  | 
|       | 
|     playerControl = PlayerControl.PlayerControl(curPlayer)  | 
|     playerControl.AddExp(addExp)  | 
|       | 
|     GameWorld.Log("    Õ½ÃËʤ¸º=%s,addFamilyActive=%s,addExp=%s£¬Áì½±OK!"   | 
|                        % (familyWinState, addFamilyActive, addExp), curPlayer.GetPlayerID())  | 
|     return    | 
|   | 
|   | 
| ##// AB 02 ÁìÈ¡ÁìµØÕù¶áսÿÈÕ½±Àø #tagCMGetManorWarDailyAward  | 
| ## ÁìÈ¡ÁìµØÕù¶áսÿÈÕ½±Àø  | 
| #  @param None  | 
| #  @return None  | 
| def OnGetManorWarDailyAward(index, clientData, tick):  | 
|     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  | 
|       | 
|     awardIndex = clientData.MapID # ½±ÀøË÷Òý  | 
|     #GameWorld.Log("ÁìÈ¡ÁìµØÕù¶áսÿÈÕ½±Àø, awardIndex=%s" % awardIndex, curPlayer.GetPlayerID())  | 
|       | 
|     familyID = curPlayer.GetFamilyID()  | 
|     if familyID <= 0:  | 
|         GameWorld.Log("    Íæ¼ÒÎÞÕ½ÃË£¬²»¿ÉÁì½±!", curPlayer.GetPlayerID())  | 
|         return  | 
|       | 
|     if IsManorWarFighting():  | 
|         GameWorld.Log("    »î¶¯ÖУ¬²»¿ÉÁì½±!", curPlayer.GetPlayerID())  | 
|         PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_672958")  | 
|         return  | 
|       | 
|     forbidState = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ForbidFamilyAward)  | 
|     if forbidState&pow(2, ShareDefine.Def_FamActivity_Manor):  | 
|         GameWorld.Log("    µ±Èջ¿ªÆôºó±ä¸ü¹ýÕ½ÃË£¬ÎÞ·¨ÁìÈ¡½±Àø!", curPlayer.GetPlayerID())  | 
|         PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_193917")  | 
|         return  | 
|       | 
|     awardRecord = FBCommon.GetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarDailyAwardRecord)  | 
|     if awardRecord&pow(2, awardIndex):  | 
|         GameWorld.Log("    ÒÑÁìÈ¡¸ÃÁìµØµ±ÈÕ½±Àø£¬ÎÞ·¨ÁìÈ¡!", curPlayer.GetPlayerID())  | 
|         PlayerControl.NotifyCode(curPlayer, "PK_liubo_341290")  | 
|         return  | 
|       | 
|     winCnt = 0 # Õ¼ÁìµÄÁìµØÊý  | 
|     winLeaderID = 0 # Õ¼ÁìʱµÄÃËÖ÷ID  | 
|     mapIDList = __GetManorWarMapID()  | 
|     for mapID in mapIDList:  | 
|         winFamilyIDKey = ShareDefine.Def_Notify_WorldKey_ManorWarWinFamilyID % mapID  | 
|         if GameWorld.GetGameWorld().GetGameWorldDictByKey(winFamilyIDKey) != familyID:  | 
|             continue  | 
|         winCnt += 1  | 
|         leaderIDKey = ShareDefine.Def_Notify_WorldKey_ManorWarFamilyLeaderID % mapID  | 
|         winLeaderID = GameWorld.GetGameWorld().GetGameWorldDictByKey(leaderIDKey)  | 
|       | 
|     manorWarDailyAwardDict = ReadChConfig.GetEvalChConfig("ManorWarDailyAward")  | 
|     if awardIndex not in manorWarDailyAwardDict:  | 
|         GameWorld.ErrLog("    Ã»ÓÐÅäÖÃÁìµØ¶ÔÓ¦½±Àø£¬Çë¼ì²éManorWarDailyAward.txt£¡awardIndex=%s"   | 
|                          % awardIndex, curPlayer.GetPlayerID())  | 
|         return  | 
|     needWinCnt, awardItemList, leaderItemExList = manorWarDailyAwardDict[awardIndex]  | 
|     if needWinCnt > winCnt:  | 
|         GameWorld.Log("    Õ¼ÁìÁìµØ¸öÊý²»×ã, ·¨ÁìÈ¡!needWinCnt(%s) > winCnt(%s),familyID=%s"   | 
|                       % (needWinCnt, winCnt, familyID), curPlayer.GetPlayerID())  | 
|         return  | 
|       | 
|     totalItemList = awardItemList  | 
|     if curPlayer.GetPlayerID() == winLeaderID:  | 
|         totalItemList = awardItemList + leaderItemExList  | 
|       | 
|     # ¼ì²é±³°ü  | 
|     packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem)  | 
|     if len(totalItemList) > packSpace:  | 
|         PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")  | 
|         return  | 
|       | 
|     updAwardRecord = awardRecord|pow(2, awardIndex)  | 
|     __UpdDailyAwardRecord(curPlayer, updAwardRecord)  | 
|       | 
|     # ¸ø½±Àø  | 
|     packIndexList = [IPY_GameWorld.rptItem, IPY_GameWorld.rptAnyWhere]   | 
|     for itemID, itemCount, itemBind in totalItemList:  | 
|         ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, itemBind, packIndexList, True, showSysInfo=True)  | 
|           | 
|     addDataDict = {"AwardIndex":awardIndex, "WinLeaderID":winLeaderID, "AwardItemList":totalItemList}  | 
|     DataRecordPack.DR_FuncGiveItem(curPlayer, "ManorWar", addDataDict)  | 
|     return  | 
|   | 
| ## ¸üÐÂÿÈÕ½±Àø¼Ç¼  | 
| #  @param curPlayer  | 
| #  @param record  | 
| #  @return  | 
| def __UpdDailyAwardRecord(curPlayer, record):  | 
|     FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarDailyAwardRecord, record)  | 
|       | 
|     # Í¨Öª±ä¸ü  | 
|     Sync_ManorDailyAward(curPlayer)  | 
|     return  | 
|   | 
| ###---------------------------------------------------------------------  | 
|   | 
| ## »ñÈ¡ÉÏÒ»³¡ÁìµØÕ½½á¹û  | 
| #  @param curPlayer  | 
| #  @return  | 
| def __GetFamilyWarResult(curPlayer, resultType=0):  | 
|     # »î¶¯ÖÐĬÈÏΪδ֪  | 
|     if (not resultType and IsManorWarFighting()) or curPlayer.GetFamilyID() <= 0:  | 
|         return 0  | 
|       | 
|     warMapList = __GetManorWarMapID()  | 
|     for mapID in warMapList:  | 
|         winFamilyIDKey = ShareDefine.Def_Notify_WorldKey_ManorWarWinFamilyID % mapID  | 
|         winFamilyID = GameWorld.GetGameWorld().GetGameWorldDictByKey(winFamilyIDKey)  | 
|         # Ö»ÒªÓÐÒ»¸öÕ½³¡»ñʤ¾ÍËãʤÀû  | 
|         if winFamilyID > 0 and winFamilyID == curPlayer.GetFamilyID():  | 
|             return 1  | 
|           | 
|     return 2  | 
|   | 
|   | 
| ## Í¬²½ÁìµØÕ½½á¹û  | 
| #  @param curPlayer  | 
| #  @param resultType ÀàÐÍ0-Êý¾Ýͬ²½£¬1-»î¶¯½áËãÊý¾Ý£¬¿Í»§¶Ë¸ù¾Ý´ËÀàÐ;ö¶¨ÊÇ·ñµ¯½çÃæ  | 
| #  @return  | 
| def Sync_ManorWarResult(curPlayer, resultType):  | 
|     manorWar = ChPyNetSendPack.tagMCManorWarResult()  | 
|     manorWar.Clear()          | 
|     manorWar.Type = resultType  | 
|     manorWar.Result = __GetFamilyWarResult(curPlayer, resultType)  | 
|     manorWar.JoinTime = FBCommon.GetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarContinueTick)  | 
|     manorWar.JoinAward = FBCommon.GetFBPDictValue(curPlayer, ChConfig.Def_PDict_ManorWarJoinAwardState)  | 
|     NetPackCommon.SendFakePack(curPlayer, manorWar)  | 
|     return  | 
|   | 
|   | 
| ## Í¬²½ÁìµØÕ½Ã¿ÈÕ½±Àø  | 
| #  @param curPlayer  | 
| #  @return  | 
| def Sync_ManorDailyAward(curPlayer):  | 
|     dailyAward = ChPyNetSendPack.tagMCManorDailyAward()  | 
|     dailyAward.Clear()          | 
|     dailyAward.AwardRecord = FBCommon.GetFBPDictValue(curPlayer,  | 
|                                                       ChConfig.Def_PDict_ManorWarDailyAwardRecord)  | 
|     NetPackCommon.SendFakePack(curPlayer, dailyAward)  | 
|     return  | 
|   | 
| def CalcManorWarFamilyAttrPrize(curPlayer, allAttrList):  | 
|     # ¸ù¾ÝÉÏ´ÎÕ¼ÁìÁìµØÊýÁ¿»ñµÃÊôÐÔ½±Àø¼Ó³É  | 
|     # Ö»ÔÚÁìµØPKÇøÓòÏíÊܼӳɣ¬ÇøÓòÒѾÑéÖ¤¹ý»î¶¯µÄÓÐЧÐÔ£¬ÕâÀï²»ÔÙÖØ¸´ÑéÖ¤£¬Ö»ÅжÏÊÇ·ñÁìµØPKÇøÓò¼´¿É  | 
|     if GameMap.GetAreaTypeByMapPos(curPlayer.GetPosX(), curPlayer.GetPosY()) != ShareDefine.gatManor:  | 
|         GameWorld.DebugLog("·ÇÁìµØPKÇøÓò, ²»ÏíÊܼӳÉ!", curPlayer.GetPlayerID())  | 
|         return  | 
|       | 
|     warMapList = __GetManorWarMapID()  | 
|     gameWorldMgr = GameWorld.GetGameWorld()  | 
|     lastFamilyWinCntDict = {}  | 
|     maxWinCnt = 0  | 
|     for mapID in warMapList:  | 
|         lastFamilyID = gameWorldMgr.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ManorWarLastFamilyID % mapID)  | 
|         if not lastFamilyID:  | 
|             continue  | 
|         updCnt = lastFamilyWinCntDict.get(lastFamilyID, 0) + 1  | 
|         lastFamilyWinCntDict[lastFamilyID] = updCnt  | 
|         if updCnt > maxWinCnt:  | 
|             maxWinCnt = updCnt  | 
|               | 
|     familyID = curPlayer.GetFamilyID()  | 
|     curWinCnt = lastFamilyWinCntDict.get(familyID, 0)  | 
|     diffValue = maxWinCnt - curWinCnt  | 
|     if diffValue <= 0:  | 
|         GameWorld.DebugLog("²»ÏíÊÜÁìµØÕ½ÊôÐÔ¼Ó³É! Óë×î¶àÕ¼Áì¸öÊý²îֵΪ: %s, familyID=%s,lastFamilyWinCntDict=%s"   | 
|                            % (diffValue, familyID, lastFamilyWinCntDict), curPlayer.GetPlayerID())  | 
|         return  | 
|       | 
|     GameWorld.DebugLog("ÁìµØÕ½ÊôÐÔ¼Ó³É: diffValue=%s,familyID=%s, %s"   | 
|                        % (diffValue, familyID, lastFamilyWinCntDict), curPlayer.GetPlayerID())  | 
|     attrPrizeDict = ReadChConfig.GetEvalChConfig("ManorWarAttrPrize")  | 
|     for attrName, attrFormat in attrPrizeDict.items():  | 
|         PlayerControl.CalcAttrDict_Type(attrName, eval(attrFormat), allAttrList)  | 
|           | 
|     return  | 
|   | 
| def CheckManorwarWinLeaderID(curPlayer):  | 
|     return  | 
|   |