#!/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  
 | 
  
 |