#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#-------------------------------------------------------------------------------  
 | 
#  
 | 
#-------------------------------------------------------------------------------  
 | 
#  
 | 
##@package GameWorldMixServerCampaign  
 | 
#  
 | 
# @todo:ºÏ·þ»î¶¯  
 | 
# @author hxp  
 | 
# @date 2014-12-03  
 | 
# @version 1.2  
 | 
#  
 | 
# ÏêϸÃèÊö: ºÏ·þ»î¶¯  
 | 
# @change: "2015-07-10 17:30" ljd ÅÅÐаñ¼ÓÍæ¼Òƽ̨²ÎÊýName2  
 | 
# @change: "2016-11-21 10:30" xdh Ôö¼ÓÓʼþ²¹·¢ºÏ·þ½±Àø,Ôö¼ÓÕ½ÃË»÷ɱboss»î¶¯  
 | 
#  
 | 
#---------------------------------------------------------------------  
 | 
"""Version = 2016-11-21 10:30"""  
 | 
  
 | 
  
 | 
import GameWorld  
 | 
import PlayerDBGSEvent  
 | 
import PlayerBillboard  
 | 
import DataRecordPack  
 | 
import ReadChConfig  
 | 
import ShareDefine  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
      
 | 
#½±ÀøÅÅÐаñcopyÊý¾ÝÀ´Ô´  
 | 
Def_MixAward_Billboard_Copy_Dict = {  
 | 
    #ShareDefine.Def_BT_MixCampaign_PlayerBattle:ShareDefine.Def_BT_FightPower, # Õ½¶·Á¦  
 | 
}  
 | 
  
 | 
#MixServerCampaign±í×ÖµäÖµÁбíö¾Ù  
 | 
(  
 | 
Def_MixCampaign_Index_InterceptTime, # ½±ÀøÊý¾Ý½ØÈ¡Ê±¼ä  
 | 
Def_MixCampaign_Index_AwardTime, # Á콱ʱ¼ä  
 | 
Def_MixCampaign_Index_MaxPlace, # Ç°¼¸Ãû¿ÉÁì½±  
 | 
Def_MixCampaign_Index_Max,  
 | 
) = range(0, 3 + 1)  
 | 
  
 | 
  
 | 
## Ã¿Ìì´¥·¢  
 | 
#  @param None  
 | 
#  @return: None   
 | 
def MixServerOnDay():  
 | 
      
 | 
    # ¿ç·þ·þÎñÆ÷¹¦ÄÜÏÞÖÆ  
 | 
    if GameWorld.IsMergeServer():  
 | 
        return  
 | 
      
 | 
    isMixServer = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_IsMixServer) # ÊÇ·ñºÏ·þ  
 | 
    if not isMixServer:  
 | 
        return  
 | 
      
 | 
    sendMSCMailTypeList = UpdateMixServerCampaignState()  
 | 
      
 | 
    mixServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_MixServerDay) # ºÏ·þÌìÊý  
 | 
    GameWorld.DebugLog("ºÏ·þ¹ýÌì mixServerDay=%s,sendMSCMailTypeList=%s" % (mixServerDay, sendMSCMailTypeList))  
 | 
#    for key, value in ShareDefine.Def_MixCampaign_Billboard_Dict.items():  
 | 
#          
 | 
#        #»î¶¯ÒѾ½áÊø,ɾ³ýÅÅÐаñÊý¾Ý  
 | 
#        if __IsClearMixCampaignBillboard(key):  
 | 
#            billboardType = ShareDefine.Def_MixCampaign_Billboard_Dict.get(key)  
 | 
#              
 | 
#            #Çå³ýÅÅÐаñÊý¾Ý  
 | 
#            PlayerBillboard.ClearBillboardByIndex(billboardType)  
 | 
#            continue  
 | 
#      
 | 
#        if not __CanCopyMixCampaignBillboardData(key):  
 | 
#            #²»ÊǽØÈ¡»î¶¯ÅÅÐаñʱ¼ä  
 | 
#            GameWorld.DebugLog("    ²»ÊǽØÈ¡»î¶¯ÅÅÐаñʱ¼ä cType=%s" % key)  
 | 
#            continue  
 | 
#          
 | 
#        #¿½±´ÅÅÐаñ½±ÀøÓÃÓÚ½±Àø  
 | 
#        copyBillboard = Def_MixAward_Billboard_Copy_Dict.get(value)  # ÊµÊ±°ñ  
 | 
#        GameWorld.DebugLog("    ¿½±´ÅÅÐаñ½±ÀøÓÃÓÚ½±Àø cType=%s,value=%s,copyBillboard=%s"   
 | 
#                           % (key, value, copyBillboard))  
 | 
#          
 | 
#        if not copyBillboard:  
 | 
#            continue  
 | 
#          
 | 
#        PlayerBillboard.CopyBillboard(value, copyBillboard)  
 | 
#        DataRecordPack.DR_BillboardData(value, "MixCampaignBillboard", {"MixServerDay":mixServerDay})  
 | 
          
 | 
      
 | 
    # Áì½±½áÊøºó, ²¹·¢Î´ÁìÈ¡µÄ½±ÀøÓʼþ, ±ØÐëÔÚÊý¾Ý¿½±´Íê±Ïºó´¦Àí  
 | 
    __SendMSCAwardMailOnOver(sendMSCMailTypeList)  
 | 
    return  
 | 
  
 | 
  
 | 
def __SendMSCAwardMailOnOver(overTypeList):  
 | 
    if not overTypeList:  
 | 
        return  
 | 
      
 | 
    playerManager = GameWorld.GetPlayerManager()  
 | 
    for i in range(0, playerManager.GetPlayerCount()):  
 | 
        curPlayer = playerManager.GetPlayerByIndex(i)  
 | 
        if curPlayer == None or not curPlayer.GetInitOK():  
 | 
            continue  
 | 
          
 | 
        resultName = '%s' % __GetMSCQueryMailAwardResult(curPlayer, [ShareDefine.Def_MSCGameServerQuery_MailAward, overTypeList])  
 | 
        curPlayer.MapServer_QueryPlayerResult(0, 0, 'MixServerCampaignAward', resultName, len(resultName))  
 | 
    return  
 | 
  
 | 
  
 | 
## »ñÈ¡·¢ËͺϷþ»î¶¯Óʼþ½±ÀøËùÐèµÄÐÅÏ¢  
 | 
def __GetMSCQueryMailAwardResult(curPlayer, msgList):  
 | 
    #queryType = msgList[0]  
 | 
    oscTypeList = msgList[1]  
 | 
    queryResultList = []  
 | 
    # ²¹·¢ÓʼþµÄÀàÐÍÅúÁ¿´¦Àí  
 | 
    for oscType in oscTypeList:  
 | 
        queryResultList.append(__GetGiveCampaignAwardInfo(curPlayer, oscType))  
 | 
      
 | 
    msgList.append(queryResultList)  
 | 
    GameWorld.DebugLog("ÇëÇó·¢ËͺϷþ»î¶¯Óʼþ: oscTypeList=%s,queryResultList=%s,msgList=%s" % (oscTypeList, queryResultList, msgList))  
 | 
    return msgList  
 | 
  
 | 
## »ñÈ¡Áì½±ËùÐèµÄÐÅÏ¢  
 | 
def __GetGiveCampaignAwardInfo(curPlayer, campaignType):  
 | 
  
 | 
    if campaignType in ShareDefine.DoOnMapServerMixCampaignTypeList:  
 | 
        GameWorld.DebugLog("    µØÍ¼·þÎñÆ÷µ¥¶À´¦ÀíµÄÀàÐÍ!")  
 | 
        return []  
 | 
      
 | 
    curPlayerID = curPlayer.GetID()  
 | 
      
 | 
    # ½±Àø°ñÏà¹Ø  
 | 
    awardBillboardType = ShareDefine.Def_MixCampaign_Billboard_Dict.get(campaignType)  
 | 
    if not awardBillboardType:  
 | 
        return []  
 | 
      
 | 
    billBoard = GameWorld.GetBillboard().FindBillboard(awardBillboardType)  
 | 
    if billBoard:  
 | 
        memberLV = 0  
 | 
        # #Õ½ÃË»÷ɱbossÅÅÐÐ È¡Íæ¼ÒËùÔÚÕ½Ã˵ÄÅÅÃû  
 | 
        if campaignType == ShareDefine.Def_MixCampaign_Type_FamilyKillBoss:  
 | 
            familyID = curPlayer.GetFamilyID()  
 | 
            if not familyID:  
 | 
                GameWorld.DebugLog("__GetGiveCampaignAwardInfo ->Íæ¼ÒûÓмÒ×å" , curPlayerID)  
 | 
                return []  
 | 
            billIndex = billBoard.IndexOfByID(familyID)  
 | 
            if billIndex < 0:  
 | 
                GameWorld.DebugLog("__GetGiveCampaignAwardInfo ->Íæ¼ÒËùÔÚ¼Ò×åûÃû´Î" , curPlayerID)  
 | 
                return []  
 | 
            order = billIndex + 1  
 | 
        else:  
 | 
            order = billBoard.IndexOfByID(curPlayerID) + 1  # Íæ¼ÒÔÚÅÅÐаñÖеÄÃû´Î  
 | 
  
 | 
        GameWorld.DebugLog("    ½±Àø°ñ: awardBillboardType=%s,order=%s" % (awardBillboardType, order))  
 | 
        return [order, memberLV]  
 | 
      
 | 
      
 | 
    return []  
 | 
  
 | 
  
 | 
  
 | 
## ¸üкϷþ»î¶¯×´Ì¬  
 | 
#  @param isSoonNotify:ÊÇ·ñÂíÉÏ֪ͨ  
 | 
#  @return: None  
 | 
def UpdateMixServerCampaignState(isSoonNotify=False):  
 | 
    dataStateChangeOverList = []  
 | 
    sendMSCMailTypeList = []  
 | 
    isMixServer = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_IsMixServer) # ÊÇ·ñºÏ·þ  
 | 
    mixServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_MixServerDay) # ºÏ·þÌìÊý  
 | 
    for campaignType in ShareDefine.Def_MixCampaign_Type_List:  
 | 
        updSaveDataState = ShareDefine.Def_CampaignDataState_None  
 | 
        campaignInfoList = __GetMixCampaignInfoList(campaignType)  
 | 
        if len(campaignInfoList) != Def_MixCampaign_Index_Max:  
 | 
            continue  
 | 
        interceptTimeList = campaignInfoList[Def_MixCampaign_Index_InterceptTime]  
 | 
        if isMixServer and interceptTimeList != []:  
 | 
            if mixServerDay in interceptTimeList:  
 | 
                updSaveDataState = ShareDefine.Def_CampaignDataState_Save  
 | 
            elif mixServerDay > max(interceptTimeList): # ³¬¹ý×î´óµÄÓÐЧÊý¾ÝÌìÊýÔòΪ»î¶¯½áÊø  
 | 
                updSaveDataState = ShareDefine.Def_CampaignDataState_Over  
 | 
          
 | 
        # Í¬²½MapServerºÏ·þ»î¶¯±£´æÊý¾Ý½×¶Î  
 | 
        saveDataKey = ShareDefine.Def_Notify_WorldKey_MixServerCampaignSaveData % campaignType  
 | 
        curSaveState = GameWorld.GetGameWorld().GetDictByKey(saveDataKey)  
 | 
        if __IsNeedNoticeMapServer(saveDataKey, updSaveDataState, isSoonNotify):  
 | 
            GameWorld.SendMapServerMsgEx(saveDataKey, updSaveDataState)  
 | 
        GameWorld.GetGameWorld().SetDict(saveDataKey, updSaveDataState)  
 | 
        # ´ÓÓÐЧ״̬±äΪ½áÊø×´Ì¬  
 | 
        if curSaveState == ShareDefine.Def_CampaignDataState_Save and updSaveDataState == ShareDefine.Def_CampaignDataState_Over:  
 | 
            dataStateChangeOverList.append(campaignType)  
 | 
              
 | 
        awardTimeList = campaignInfoList[Def_MixCampaign_Index_AwardTime]  
 | 
        updGetAwardState = ShareDefine.Def_CampaignAwardState_None  
 | 
        if isMixServer and awardTimeList != []:  
 | 
            if mixServerDay in awardTimeList:  
 | 
                updGetAwardState = ShareDefine.Def_CampaignAwardState_Allow  
 | 
            elif mixServerDay > max(awardTimeList):  
 | 
                updGetAwardState = ShareDefine.Def_CampaignAwardState_Over  
 | 
        # Í¬²½MapServerºÏ·þ»î¶¯Áì½±½×¶Î  
 | 
        getAwardKey = ShareDefine.Def_Notify_WorldKey_MixServerCampaignGetAward % campaignType  
 | 
        curAwardState = GameWorld.GetGameWorld().GetDictByKey(getAwardKey)  
 | 
          
 | 
        if __IsNeedNoticeMapServer(getAwardKey, updGetAwardState, isSoonNotify):  
 | 
            GameWorld.SendMapServerMsgEx(getAwardKey, updGetAwardState)  
 | 
        GameWorld.GetGameWorld().SetDict(getAwardKey, updGetAwardState)  
 | 
          
 | 
        # ´ÓÁì½±ÓÐЧ״̬±äΪ½áÊø×´Ì¬ or Î´ÅäÖÃÁì½±ÁбíÇÒÓÐЧÊý¾Ý±äΪ½áÊø×´Ì¬  
 | 
        if (curAwardState == ShareDefine.Def_CampaignAwardState_Allow and updGetAwardState == ShareDefine.Def_CampaignAwardState_Over) or \  
 | 
            (not awardTimeList and campaignType in dataStateChangeOverList):  
 | 
            sendMSCMailTypeList.append(campaignType)  
 | 
              
 | 
    return sendMSCMailTypeList  
 | 
      
 | 
## ÊÇ·ñÐèҪ֪ͨMapServer»î¶¯ÐÅÏ¢  
 | 
#  @param key:֪ͨÀàÐÍkey  
 | 
#  @param noticeType:֪ͨÀàÐÍ  
 | 
#  @param isSoonNotify:ÊÇ·ñÂíÉÏ֪ͨ  
 | 
#  @return: None  
 | 
def __IsNeedNoticeMapServer(key, noticeType, isSoonNotify):  
 | 
    curType = GameWorld.GetGameWorld().GetDictByKey(key)  
 | 
      
 | 
    if noticeType != curType or isSoonNotify:  
 | 
        return True  
 | 
             
 | 
    return False  
 | 
  
 | 
      
 | 
## »ñÈ¡»î¶¯ÐÅÏ¢  
 | 
#  @param campaignType: »î¶¯ÀàÐÍ  
 | 
#  @return: »î¶¯ÐÅÏ¢  
 | 
def __GetMixCampaignInfoList(campaignType):  
 | 
    openServerCampaignDict = ReadChConfig.GetEvalChConfig("MixServerCampaign")  
 | 
    campaignInfoList = openServerCampaignDict.get(campaignType, [])  
 | 
    return campaignInfoList  
 | 
  
 | 
  
 | 
## »ñÈ¡»î¶¯ÊÇ·ñÒѾ½áÊø  
 | 
#  @param campaignType: »î¶¯ÀàÐÍ  
 | 
#  @return: »î¶¯ÊÇ·ñÒѾ½áÊø  
 | 
def __IsClearMixCampaignBillboard(campaignType):  
 | 
    if campaignType not in ShareDefine.Def_MixCampaign_Type_List:  
 | 
        #»î¶¯ÀàÐÍ´íÎó  
 | 
        return True  
 | 
      
 | 
    campaignInfoList = __GetMixCampaignInfoList(campaignType)  
 | 
    if len(campaignInfoList) != Def_MixCampaign_Index_Max:  
 | 
        #»î¶¯ÐÅÏ¢±íÅäÖôíÎó  
 | 
        return True  
 | 
      
 | 
    awardTimeList = campaignInfoList[Def_MixCampaign_Index_AwardTime]  
 | 
    if awardTimeList == []:  
 | 
        return True  
 | 
      
 | 
    mixServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_MixServerDay) # ºÏ·þÌìÊý  
 | 
    if mixServerDay == max(awardTimeList) + 1:  
 | 
        #ÒѾ¹ýÁËÁ콱ʱ¼ä, »î¶¯½áÊø  
 | 
        return True  
 | 
      
 | 
    return False  
 | 
  
 | 
  
 | 
## ÊÇ·ñcopyÅÅÐаñÊý¾ÝÓÃÓÚ½±Àø  
 | 
#  @param campaignType: »î¶¯ÀàÐÍ  
 | 
#  @return: ÊÇ·ñcopyÅÅÐаñÊý¾ÝÓÃÓÚ½±Àø  
 | 
def __CanCopyMixCampaignBillboardData(campaignType):  
 | 
    campaignInfoList = __GetMixCampaignInfoList(campaignType)  
 | 
    if len(campaignInfoList) != Def_MixCampaign_Index_Max:  
 | 
        #»î¶¯ÐÅÏ¢±íÅäÖôíÎó  
 | 
        return False  
 | 
      
 | 
    #½±ÀøÊý¾Ý½ØÈ¡Ê±¼ä  
 | 
    interceptTimeList = campaignInfoList[Def_MixCampaign_Index_InterceptTime]  
 | 
    if interceptTimeList == []:  
 | 
        return False  
 | 
      
 | 
    mixServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_MixServerDay) # ºÏ·þÌìÊý  
 | 
    if mixServerDay > max(interceptTimeList):  
 | 
        #ÒѾ½ØÈ¡ÅÅÐаñÊý¾Ý  
 | 
        return False  
 | 
      
 | 
    if mixServerDay not in interceptTimeList:  
 | 
        #²»ÊǽØÈ¡ÅÅÐаñÊý¾Ýʱ¼ä  
 | 
        return False  
 | 
      
 | 
    return True  
 | 
  
 | 
  
 | 
## ¿É·ñÁìÈ¡ºÏ·þÎñ»î¶¯½±Àø  
 | 
#  @param curPlayer: Íæ¼ÒʵÀý  
 | 
#  @param msgList: ½±ÀøÁìÈ¡ÐÅÏ¢[ÇëÇóÀàÐÍ, »î¶¯ÀàÐÍ, ÁìÈ¡Ë÷Òý, ¼Ò×åID]  
 | 
#  @return: [²éѯÀàÐÍ, »î¶¯ÀàÐÍ, ²éѯ½±ÀøË÷Òý, Ãû´Î, ¼Ò×åµÈ¼¶, ¼Ò×åְλ]  
 | 
def CanGiveMixCampaignAward(curPlayer, msgList):  
 | 
    queryType = msgList[0]  # ÇëÇóÀàÐÍ(Áì½±, Óʼþ)  
 | 
      
 | 
    if queryType == ShareDefine.Def_MSCGameServerQuery_MailAward:  
 | 
        return __GetMSCQueryMailAwardResult(curPlayer, msgList)  
 | 
      
 | 
    campaignType = msgList[1]  # »î¶¯ÀàÐÍ  
 | 
    awardIndex = msgList[2]  # ÏëÒªÁìÈ¡µÄ½±ÀøË÷Òý  
 | 
    familyID = msgList[3]  # ¼Ò×åID  
 | 
      
 | 
    mixServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_MixServerDay) # ºÏ·þÌìÊý  
 | 
    GameWorld.DebugLog("CanGiveMixCampaignAward: mixServerDay=%s,msgList=%s"   
 | 
                       % (mixServerDay, str(msgList)))  
 | 
      
 | 
    if campaignType not in ShareDefine.Def_MixCampaign_Type_List:  
 | 
        #ÁìÈ¡µÄ½±ÀøÀàÐÍ´íÎó  
 | 
        GameWorld.ErrLog("    ÁìÈ¡µÄºÏ·þ½±ÀøÀàÐÍ´íÎó campaignType=%s" % (campaignType))  
 | 
        return [queryType, campaignType, awardIndex, 0, 0, 0]  
 | 
          
 | 
    campaignInfoList = __GetMixCampaignInfoList(campaignType)  
 | 
    if len(campaignInfoList) != Def_MixCampaign_Index_Max:  
 | 
        #»î¶¯ÐÅÏ¢±íÅäÖôíÎó  
 | 
        GameWorld.ErrLog("    MixServerCampaign: ºÏ·þ»î¶¯ÐÅÏ¢±íÅäÖôíÎó")  
 | 
        return [queryType, campaignType, awardIndex, 0, 0, 0]  
 | 
      
 | 
    awardTimeList = campaignInfoList[Def_MixCampaign_Index_AwardTime]  
 | 
    if awardTimeList == []:  
 | 
        GameWorld.ErrLog("    MixServerCampaign: awardTimeList is []")  
 | 
        return [queryType, campaignType, awardIndex, 0, 0, 0]  
 | 
      
 | 
    interceptTimeList = campaignInfoList[Def_MixCampaign_Index_InterceptTime]  
 | 
    if interceptTimeList == []:  
 | 
        GameWorld.ErrLog("    MixServerCampaign: interceptTimeList is []")  
 | 
        return [queryType, mixServerDay, campaignType, awardIndex, 0, 0, 0]  
 | 
      
 | 
    if mixServerDay not in awardTimeList:  
 | 
        GameWorld.DebugLog("    MixServerCampaign: ·ÇÁ콱ʱ¼ä mixServerDay=%s,awardTimeList=%s"   
 | 
                           % (mixServerDay, str(awardTimeList)))  
 | 
        return [queryType, campaignType, awardIndex, 0, 0, 0]  
 | 
  
 | 
    curPlayerID = curPlayer.GetID()  
 | 
      
 | 
    awardBillboardType = ShareDefine.Def_MixCampaign_Billboard_Dict.get(campaignType)  
 | 
    if not awardBillboardType:  
 | 
        GameWorld.DebugLog("    ÕÒ²»µ½Def_MixCampaign_Billboard_Dict¶ÔÓ¦ÅÅÐаñ %s" % campaignType)  
 | 
        return [queryType, campaignType, awardIndex, 0, 0, 0]  
 | 
      
 | 
    billBoard = GameWorld.GetBillboard().FindBillboard(awardBillboardType)  
 | 
    if not billBoard:  
 | 
        GameWorld.DebugLog("    ÕÒ²»µ½ÅÅÐаñÊý¾Ý")  
 | 
        #ÕÒ²»µ½ÅÅÐаñÊý¾Ý  
 | 
        return [queryType, campaignType, awardIndex, 0, 0, 0]  
 | 
  
 | 
    maxPlace = campaignInfoList[Def_MixCampaign_Index_MaxPlace]  # ¿ÉÁì½±Ãû´Î  
 | 
    if campaignType == ShareDefine.Def_MixCampaign_Type_FamilyKillBoss:  
 | 
        #Õ½ÃË»÷ɱbossÅÅÐÐ È¡Íæ¼ÒËùÔÚÕ½Ã˵ÄÅÅÃû  
 | 
        billBoardIndex = billBoard.IndexOfByID(familyID)  
 | 
    else:  
 | 
        billBoardIndex = billBoard.IndexOfByID(curPlayerID)  
 | 
    order = billBoardIndex + 1  # Íæ¼ÒÔÚÅÅÐаñÖеÄÃû´Î  
 | 
    GameWorld.DebugLog("    billBoardIndex=%s,order=%s,maxPlace=%s"   
 | 
                       % (billBoardIndex, order, maxPlace))  
 | 
    if billBoardIndex < 0 or order > maxPlace:  
 | 
        GameWorld.DebugLog("    ²»ÔÚ¿ÉÁìÃû´Î")  
 | 
        return [queryType, campaignType, awardIndex, 0, 0, 0]  
 | 
          
 | 
    return [queryType, campaignType, awardIndex, order, 0, 0]  
 | 
  
 | 
##ºÏ·þ»î¶¯Õ½ÃË»÷ɱbossÅÅÐиüР 
 | 
# @param cmdList ¼Ç¼ÄÚÈÝ  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
def UpdMixCampaignFamiliyBossCnt(curPlayer, cmdList):  
 | 
    isMixServer = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_IsMixServer) # ÊÇ·ñºÏ·þ  
 | 
    # ·ÇºÏ·þ²»´¦Àí  
 | 
    if not isMixServer:  
 | 
        GameWorld.DebugLog("·ÇºÏ·þ ²»¸üкϷþ»î¶¯Õ½ÃË»÷ɱbossÅÅÐÐ")  
 | 
        return  
 | 
      
 | 
    campaignType = ShareDefine.Def_MixCampaign_Type_FamilyKillBoss  
 | 
    if not __CanCopyMixCampaignBillboardData(campaignType):  
 | 
        GameWorld.DebugLog("²»ÊǸüÐÂʱ»ú ²»¸üкϷþ»î¶¯Õ½ÃË»÷ɱbossÅÅÐÐ")  
 | 
        return  
 | 
      
 | 
    addCnt = cmdList[0]  
 | 
    curPlayerID = curPlayer.GetPlayerID()  
 | 
    curFamily = curPlayer.GetFamily()  
 | 
      
 | 
    if curFamily == None:  
 | 
        GameWorld.DebugLog("UpdMixCampaignFamiliyBossCnt ->Íæ¼ÒûÓмÒ×å" , curPlayerID)  
 | 
        return  
 | 
    curMember = curFamily.FindMember(curPlayerID)  
 | 
    if curMember == None:  
 | 
        GameWorld.DebugLog("UpdMixCampaignFamiliyBossCnt ->Î޴˳ÉÔ±" , curPlayerID)  
 | 
        return  
 | 
    billboardIndex = ShareDefine.Def_BT_MixCampaign_FamilyKillBoss  
 | 
    billboard = GameWorld.GetBillboard().FindBillboard(billboardIndex)  
 | 
    if not billboard:  
 | 
        GameWorld.ErrLog("    ÕÒ²»µ½Õ½ÃË»÷ɱbossÅÅÐаñ!!!")  
 | 
        return  
 | 
    familyID = curFamily.GetID()  
 | 
    familyName = curFamily.GetName()  
 | 
    familyLV = curFamily.GetLV()  
 | 
      
 | 
    killCnt = 0  
 | 
    billboardCnt = billboard.GetCount()  
 | 
    for index in range(0, billboardCnt):  
 | 
        objBillboard = billboard.At(index)  
 | 
        objID = objBillboard.GetID()  
 | 
        if familyID != objID:  
 | 
            continue  
 | 
        killCnt = objBillboard.GetCmpValue()  
 | 
        break  
 | 
    newCnt = killCnt + addCnt  
 | 
      
 | 
    PlayerBillboard.UpdatePlayerBillboard(familyID, familyName, 0, ShareDefine.Def_BT_MixCampaign_FamilyKillBoss, 0, 0, 0, newCnt, cmpValue2=familyLV)  
 | 
    return  
 | 
  
 |