#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#---------------------------------------------------------------------  
 | 
#  
 | 
#---------------------------------------------------------------------  
 | 
##@package PlayerMergeRegister.py  
 | 
# @todo: Íæ¼Ò¿ç·þÈü±¨Ãû  
 | 
#  
 | 
# @author: wdb  
 | 
# @date 2012-10-31 16:50  
 | 
# @version 2.2  
 | 
# @note:  
 | 
# @change: "2013-03-13 17:00" wdb É¾³ý·â°ü  
 | 
# @change: "2015-09-11 15:00" hxp »Ö¸´¿ç·þÊý¾ÝÉÏ´«£¬¿ç·þÕ˺Ųéѯ£»Ôö¼Ó¿ç·þboss  
 | 
# @change: "2015-09-21 20:00" hxp ¿ç·þÕ˺ÅÐÅÏ¢¼Ç¼Ôö¼Ó±¾·þÕ˺ÅÐÅÏ¢  
 | 
# @change: "2015-09-24 20:00" hxp Ôö¼ÓIsMergeOpenÅжÏ; Ôö¼Ó»î¶¯Î´¿ªÆô¼°Ìáǰ½áÊøÌáʾ  
 | 
# @change: "2015-09-26 15:30" hxp ¿ç·þÖ÷·þÎñÆ÷²»ÔÊÐíÉÏ´«±¨ÃûÊý¾Ý  
 | 
# @change: "2015-10-28 00:00" hxp Ôö¼Ó¿ç·þPK  
 | 
# @change: "2015-11-05 12:00" hxp ¿ç·þÐÂÕ˺Åͬ²½Ôö¼ÓÕ½Á¦ÐÅÏ¢  
 | 
# @change: "2015-11-13 17:00" hxp Ôö¼ÓÍõÕßÕù°Ô  
 | 
# @change: "2015-12-02 16:00" hxp Ôö¼ÓÉÏ´«¼°²éѯ¿ç·þÕ˺ÅÈÕÖ¾  
 | 
# @change: "2016-12-20 17:30" hxp ÓÀºã°æÐÞ¸Ä  
 | 
# @change: "2017-06-22 15:00" hxp ¿ç·þºé»ÄÖ®Á¦Ö§³Ö; ¿ç·þ»î¶¯µØÍ¼·ÖÅ乿Ôò¸ÄΪÔÚGameServerÅäÖà  
 | 
# @change: "2017-07-06 20:30" hxp ¿ç·þboss½ø³¡·ÖÅäÈËÊý·½Ê½Ð޸ģ»Ö§³ÖÖ¸¶¨µØÍ¼¼°°´ÈËÊý·ÖÅäµØÍ¼Á½ÖÖģʽ²¢´æ  
 | 
#---------------------------------------------------------------------  
 | 
#"""Version = 2017-07-06 20:30"""  
 | 
#---------------------------------------------------------------------  
 | 
import ChConfig  
 | 
import GameWorld  
 | 
import ChPyNetSendPack  
 | 
import NetPackCommon  
 | 
import ShareDefine  
 | 
import PlayerUniversalGameRec  
 | 
import GameWorldMergeBoss  
 | 
import GameWorldMergeKing  
 | 
import GameWorldMergePK  
 | 
import PlayerControl  
 | 
import MergeChildMsg  
 | 
import ReadChConfig  
 | 
  
 | 
import random  
 | 
import time  
 | 
#---------------------------------------------------------------------  
 | 
#//C0 11 ÉÏ´«Êý¾ÝµÄ»î¶¯ÀàÐÍ #tagActionMergeRegister  
 | 
#  
 | 
#struct    tagActionMergeRegister  
 | 
#{  
 | 
#    tagHead        Head;  
 | 
#    BYTE        ActionType;        //»î¶¯ÀàÐÍ          
 | 
#};  
 | 
#---------------------------------------------------------------------  
 | 
  
 | 
## ¿ç·þÈü±¨Ãû£¨ÉÏ´«Êý¾Ý£©  
 | 
#  @param index Íæ¼ÒË÷Òý  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
def MergeWarRegisterPack(index, clientData, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
      
 | 
    if not curPlayer:  
 | 
        return  
 | 
      
 | 
    playerID = curPlayer.GetPlayerID()  
 | 
    actionType = clientData.ActionType  
 | 
    GameWorld.Log("MergeWarRegisterPack actionType=%s" % actionType, playerID)  
 | 
      
 | 
    if GameWorld.IsMergeServer():  
 | 
        GameWorld.Log("    ¿ç·þ·þÎñÆ÷²»ÔÊÐíÉÏ´«±¨ÃûÊý¾Ý!", playerID)  
 | 
        return  
 | 
      
 | 
    if actionType >= ShareDefine.Def_MergeAction_TypeMax:  
 | 
        return     
 | 
  
 | 
    #¼ä¸ôδµ½  
 | 
    if not GameWorld.RefurbishPlayerTick(curPlayer, ChConfig.TYPE_Player_Tick_MergeRegister, tick):  
 | 
        GameWorld.Log("    ÉÏ´«¼ä¸ôδµ½ %s" % actionType, playerID)  
 | 
        return  
 | 
  
 | 
    # µ±Ç°»î¶¯µÄÉÏ´«Êý¾ÝÊÇ·ñ¿ªÆô  
 | 
    if not IsCurActionRegisterOpen(actionType, curPlayer, True):  
 | 
        GameWorld.Log("    µ±Ç°»î¶¯µÄÉÏ´«Êý¾Ý먦Æô %s" % actionType, playerID)  
 | 
        return  
 | 
  
 | 
    # Íæ¼ÒÊÇ·ñÓе±Ç°»î¶¯µÄÉÏ´«Êý¾Ý×ʸñ  
 | 
    if not CheckPlayerCanMergeRegister(curPlayer, actionType):  
 | 
        GameWorld.Log("    Íæ¼ÒûÓе±Ç°»î¶¯µÄÉÏ´«Êý¾Ý×ʸñ %s" % actionType, playerID)  
 | 
        return  
 | 
      
 | 
    mapPosInfo = [ChConfig.Def_MergeTransMapID, ChConfig.Def_MergeTransMapID, 0] + ChConfig.Def_MergeTransMapPos  
 | 
    #if actionType in [ShareDefine.Def_MergeAction_Boss]:  
 | 
    #    mapPosInfo = GetMergeActionMapPos(actionType)  
 | 
          
 | 
    SendMergeActionReg(curPlayer, actionType, mapPosInfo)  
 | 
    return  
 | 
  
 | 
def SendMergeActionReg(curPlayer, actionType, mapPosInfo):  
 | 
    # ·¢ËÍ¿ç·þÕ˺Å×¢²áÉÏ´«Êý¾Ý  
 | 
    # ÉèÖÃÉÏ´«Êý¾ÝµÄÀàÐÍ  
 | 
    curPlayer.SetDict(ChConfig.Def_PlayerKey_MergeRegisterType, actionType)  
 | 
    sysMsg = str([actionType] + mapPosInfo)  
 | 
    curPlayer.MapServer_QueryPlayerResult(0, 0, 'MergeWarRegister', sysMsg, len(sysMsg))              
 | 
    GameWorld.Log("    MapServer_QueryPlayerResult  MergeWarRegister actionType=%s, sysMsg=%s"   
 | 
                  % (actionType, sysMsg), curPlayer.GetPlayerID())  
 | 
    return  
 | 
  
 | 
def GetMergeActionMapPos(actionType):  
 | 
    # »ñÈ¡¿ç·þ»î¶¯¶ÔÓ¦ÉÏ´«Êý¾ÝµØÍ¼×ø±ê   
 | 
    # @return: [mapID,dataMapID,copyMapID,posX,posY]  
 | 
      
 | 
    MergeActionMapPosDict = ReadChConfig.GetEvalChConfig("MergeActionMapPos")  
 | 
    if actionType not in MergeActionMapPosDict:  
 | 
        #GameWorld.ErrLog("¿ç·þÉÏ´«Êý¾ÝÕÒ²»µ½»î¶¯ÀàÐÍ(%s)¶ÔÓ¦µØÍ¼×ø±êÅäÖ㬼ì²éMergeActionMapPos.txt!" % actionType)  
 | 
        return  
 | 
      
 | 
    mapPosDict = MergeActionMapPosDict[actionType]  
 | 
    if not mapPosDict:  
 | 
        #GameWorld.ErrLog("¿ç·þÉÏ´«Êý¾ÝÕÒ²»µ½»î¶¯ÀàÐÍ(%s)¶ÔÓ¦µØÍ¼×ø±êÅäÖ㬼ì²éMergeActionMapPos.txt!!" % actionType)  
 | 
        return  
 | 
      
 | 
    mapPosList = []  
 | 
    # Íæ¼ÒËùÊôÔʼ·þÎñÆ÷ID  
 | 
    mergeServerID = GameWorld.GetMergeServerID()  
 | 
    for serverIDTupleKey, posList in mapPosDict.items():  
 | 
        for serverID in serverIDTupleKey:  
 | 
            if (isinstance(serverID, int) and serverID == mergeServerID) or \  
 | 
                (isinstance(serverID, tuple) and len(serverID) == 2 \  
 | 
                    and serverID[0] <= mergeServerID <= serverID[1]):  
 | 
                mapPosList = posList  
 | 
                break  
 | 
              
 | 
        if mapPosList:  
 | 
            break  
 | 
      
 | 
    if not mapPosList:  
 | 
        #GameWorld.ErrLog("¿ç·þÉÏ´«Êý¾ÝÕÒ²»µ½»î¶¯ÀàÐÍ(%s),serverID=%s,¶ÔÓ¦µØÍ¼×ø±êÅäÖ㬼ì²éMergeActionMapPos.txt!!"   
 | 
        #                 % (actionType, mergeServerID))  
 | 
        return  
 | 
      
 | 
    mapPosInfo = random.choice(mapPosList)  
 | 
    if len(mapPosInfo) != 5:  
 | 
        GameWorld.ErrLog("¿ç·þÉÏ´«Êý¾Ý»î¶¯ÀàÐÍ(%s),serverID=%s,¶ÔÓ¦µØÍ¼×ø±êÅäÖôíÎ󣬼ì²éMergeActionMapPos.txt!"   
 | 
                         % (actionType, mergeServerID))  
 | 
        return  
 | 
      
 | 
    return mapPosInfo  
 | 
  
 | 
## ¿ç·þÈü±¨Ãû»ñµÃÐÂÕ˺Š 
 | 
#  @param playerID: Íæ¼ÒʵÀý  
 | 
#  @param msgList: ±»É±Íæ¼Òid  
 | 
#  @param tick  
 | 
#  @return: None  
 | 
def MergeWarRegisterNewAcc(playerID, msgList, tick):   
 | 
    actionType = ShareDefine.Def_MergeAction_MergeWar  
 | 
      
 | 
    accID = ""  
 | 
    curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)  
 | 
    if curPlayer != None:  
 | 
        # ÉèÖÃÉÏ´«Êý¾ÝµÄÀàÐÍ  
 | 
        actionType = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MergeRegisterType)     
 | 
        accID = curPlayer.GetAccID()  
 | 
              
 | 
    # ÐÂÕ˺Å, Ä¿Ç°Õ˺ÅÒÑÈ·±£ÔÚËùÓÐÆ½Ì¨ÖÐΨһ£¬¹Ê¿ç·þÕ˺ÅÖ±½ÓÓñ¾·þÕ˺ż´¿É  
 | 
    newAccID, newPwd, fightPower, playerLV, maxHP = msgList  
 | 
    if not accID:  
 | 
        accID = newAccID  
 | 
        
 | 
    #¿ç·þÈüÊý¾Ý  
 | 
    universalRecMgr = GameWorld.GetUniversalRecMgr()    
 | 
    recTypeListData = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_MergeRegister)  
 | 
      
 | 
    # ²éÕÒÊÇ·ñÒÑÓмǼ  
 | 
    playerRec = None  
 | 
    for index in xrange(recTypeListData.Count()):  
 | 
        universalRecData = recTypeListData.At(index)  
 | 
        if universalRecData.GetValue1() == playerID:  
 | 
            playerRec = universalRecData  
 | 
            break  
 | 
          
 | 
    if playerRec == None:            
 | 
        #»¹Î´¼Ç¼£¬ÔòÌí¼ÓÒ»¸ö¼Ç¼¶ÔÏó  
 | 
        playerRec = recTypeListData.AddRec()          
 | 
        playerRec.SetValue1(playerID)  
 | 
      
 | 
    curTime = int(time.time())  
 | 
    playerRec.SetTime(curTime)  
 | 
    playerRec.SetStrValue2(newPwd)  
 | 
    PlayerUniversalGameRec.SetUniversalGameRecStrValue3(playerRec, newAccID)  
 | 
  
 | 
    GameWorld.Log("¿ç·þÈü±¨Ãû»ñµÃÐÂÕ˺ŠnewAccID=%s, newPwd=%s, actionType=%s, curTime=%s"   
 | 
                  % (newAccID, newPwd, actionType, curTime), playerID)  
 | 
    if not curPlayer:  
 | 
        return  
 | 
      
 | 
    playerID = curPlayer.GetPlayerID()  
 | 
    # ¿ç·þPKÉÏ´«Êý¾ÝÍê±Ï£¬Í¨Öª¿ç·þ·þÎñÆ÷£¬×¼±¸Íê±Ï  
 | 
    if actionType == ShareDefine.Def_MergeAction_MergePK:  
 | 
        regVSRoomID = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MergeRegisterRoomID)   
 | 
        vsRoomID = curPlayer.GetVsRoomId()  
 | 
          
 | 
        if regVSRoomID != vsRoomID:  
 | 
            GameWorld.Log("ÉÏ´«¿ç·þ·þÎñÆ÷µÄregVSRoomID=%s£¬ÓëÍæ¼Òµ±Ç°µÄroomID=%s²»Í¬!²»·¢ËÍ×¼±¸Íê±Ï£¡"   
 | 
                          % (regVSRoomID, vsRoomID), playerID)  
 | 
            return  
 | 
          
 | 
        dataMsg = {  
 | 
                   "playerAccID":accID, # ½ÇÉ«Õ˺ÅID  
 | 
                   "playerID":playerID, # ½ÇÉ«ID  
 | 
                   "playerName":curPlayer.GetName(), # ½ÇÉ«Ãû  
 | 
                   "playerJob":curPlayer.GetJob(), # ½Çɫְҵ  
 | 
                   "vsRoomID":vsRoomID, # ËùÊô¶ÔÕ½·¿¼äID  
 | 
                   "fightPower":fightPower, # Õ½¶·Á¦  
 | 
                   "playerLV":playerLV, # Íæ¼ÒµÈ¼¶  
 | 
                   "maxHP":maxHP, # ×î´óѪÁ¿  
 | 
                   }  
 | 
        MergeChildMsg.SendMergerChildToCenterStringData(ChConfig.Def_MergePKPrepareOK, dataMsg)  
 | 
        GameWorld.Log("֪ͨ¿ç·þ·þÎñÆ÷, Íæ¼ÒÆ¥ÅäPK×¼±¸Íê±Ï£¡%s" % str(dataMsg), playerID)  
 | 
      
 | 
    # ÉÏ´«Êý¾ÝÍê±Ï£¬Í¨ÖªÍæ¼Ò½øÈë¿ç·þÍõÕßÕù°Ô  
 | 
    elif actionType == ShareDefine.Def_MergeAction_MergeKing:  
 | 
        GameWorldMergeKing.Notify_PlayerEnterMergeKing(curPlayer)  
 | 
    #elif actionType == ShareDefine.Def_MergeAction_Boss:  
 | 
    #    # Ôݲ»´¦Àí  
 | 
    #    pass  
 | 
    # ÆäËûµÄ£¬ÔÚÉÏ´«Êý¾ÝÍê±Ïºó£¬Ê¹ÓÃͨÓõÄ֪ͨ¿É½øÈë¿ç·þ  
 | 
    else:  
 | 
        NotifyCanEnterMergeServer(curPlayer, actionType, newAccID, newPwd)  
 | 
      
 | 
    # hxp 2015.09.10 ¿ç·þboss£¬ºóÃæµÄÔÝʱ²»ÐèÒª  
 | 
    return  
 | 
  
 | 
def GetMergeRegRecAccID(recData): return recData.GetStrValue3()  
 | 
  
 | 
## ¿ç·þÈü±¨Ãû»ñµÃÍæ¼Ò¼Ç¼  
 | 
#  @param playerID: Íæ¼ÒʵÀý  
 | 
#  @return: None  
 | 
def GetRegisterPlayerRec(playerID):   
 | 
        
 | 
    #¿ç·þÈüÊý¾Ý  
 | 
    recType = ShareDefine.Def_UniversalGameRecType_MergeRegister  
 | 
    universalRecMgr = GameWorld.GetUniversalRecMgr()    
 | 
    recTypeListData = universalRecMgr.GetTypeList(recType)  
 | 
      
 | 
    # ²éÕÒÊÇ·ñÒÑÓмǼ  
 | 
    for index in xrange(recTypeListData.Count()):  
 | 
        universalRecData = recTypeListData.At(index)  
 | 
          
 | 
        if universalRecData.GetValue1() != playerID:  
 | 
            continue  
 | 
          
 | 
        # ÐÂÕ˺Å,ÃÜÂë  
 | 
        return universalRecData  
 | 
      
 | 
    return None  
 | 
  
 | 
def GetRegisterPlayerID(newAccID):   
 | 
    ## ¸ù¾Ý¿ç·þÈüÐÂÕ˺ŻñµÃÍæ¼Òid  
 | 
    if not newAccID:  
 | 
        return 0  
 | 
      
 | 
    #¿ç·þÈüÊý¾Ý  
 | 
    recType = ShareDefine.Def_UniversalGameRecType_MergeRegister  
 | 
    universalRecMgr = GameWorld.GetUniversalRecMgr()    
 | 
    recTypeListData = universalRecMgr.GetTypeList(recType)  
 | 
      
 | 
    # ²éÕÒÊÇ·ñÒÑÓмǼ  
 | 
    for index in xrange(recTypeListData.Count()):  
 | 
        universalRecData = recTypeListData.At(index)  
 | 
          
 | 
        if universalRecData.GetStrValue3() != newAccID:  
 | 
            continue  
 | 
          
 | 
        return universalRecData.GetValue1()  
 | 
      
 | 
    return 0  
 | 
  
 | 
def NotifyCanEnterMergeServer(curPlayer, actionType, newAccID, newPwd):  
 | 
    # Í¨Óðü£¬Í¨Öª¿Í»§¶Ë¿É½øÈë¿ç·þ·þÎñÆ÷  
 | 
    mapID, lineID = 0, 0  
 | 
    mapPosInfo = GetMergeActionMapPos(actionType)  
 | 
    if mapPosInfo:  
 | 
        mapID = mapPosInfo[0]  
 | 
        lineID = mapPosInfo[2]  
 | 
          
 | 
    canEnterMServer = ChPyNetSendPack.tagCanEnterMergeServer()  
 | 
    canEnterMServer.Clear()  
 | 
    canEnterMServer.ActionType = actionType  
 | 
    canEnterMServer.MapID = mapID  
 | 
    canEnterMServer.LineID = lineID  
 | 
    canEnterMServer.NewAccID = newAccID  
 | 
    canEnterMServer.NewAccIDLen = len(canEnterMServer.NewAccID)  
 | 
    canEnterMServer.NewPsw = newPwd  
 | 
    canEnterMServer.NewPswLen = len(canEnterMServer.NewPsw)  
 | 
    NetPackCommon.SendFakePack(curPlayer, canEnterMServer)  
 | 
    return  
 | 
  
 | 
#----------------------------------------------------------------------  
 | 
#//C0 12 ¿ç·þÈüÕ˺Ųéѯ #tagMergeWarAccQuery  
 | 
#  
 | 
#struct    tagMergeWarAccQuery  
 | 
#{  
 | 
#    tagHead        Head;  
 | 
#};  
 | 
#----------------------------------------------------------------------  
 | 
## ¿ç·þÈüÕ˺Ųéѯ  
 | 
#  @param index Íæ¼ÒË÷Òý  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
def MergeWarAccQueryPack(index, clientData, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
  
 | 
    actionType = clientData.ActionType  
 | 
    if actionType >= ShareDefine.Def_MergeAction_TypeMax:  
 | 
        GameWorld.ErrLog("    ·Ç·¨¿ç·þ»î¶¯ÀàÐÍ£¡actionType=%s" % actionType, curPlayer.GetPlayerID())  
 | 
        return   
 | 
      
 | 
    # µ±Ç°»î¶¯µÄÉÏ´«Êý¾ÝÊÇ·ñ¿ªÆô  
 | 
    if not IsCurActionRegisterOpen(actionType, curPlayer):  
 | 
        GameWorld.Log("¿ç·þÈüÕ˺Ųéѯ£º ÉÏ´«Êý¾Ý먦Æô£¡actionType=%s" % actionType, curPlayer.GetPlayerID())  
 | 
        return  
 | 
      
 | 
    # ¿ç·þÈü±¨Ãû»ñµÃÍæ¼Ò¼Ç¼  
 | 
    newPlayerInfo = GetRegisterPlayerRec(curPlayer.GetID())  
 | 
    if newPlayerInfo == None:  
 | 
        GameWorld.Log("    ÕÒ²»µ½¿ç·þÕ˺ÅÊý¾Ý£¡", curPlayer.GetPlayerID())  
 | 
        return  
 | 
      
 | 
    newAccID = newPlayerInfo.GetStrValue3()  
 | 
    newPsw = newPlayerInfo.GetStrValue2()  
 | 
      
 | 
    resultPack = ChPyNetSendPack.tagMergeRegisterQueryResult()  
 | 
    resultPack.Clear()  
 | 
    resultPack.NewAccIDLen = len(newAccID)  
 | 
    resultPack.NewAccID = newAccID  
 | 
    resultPack.NewPswLen = len(newPsw)  
 | 
    resultPack.NewPsw = newPsw  
 | 
    NetPackCommon.SendFakePack(curPlayer, resultPack)  
 | 
    GameWorld.Log("¿ç·þÈüÕ˺ŲéѯactionType=%s,newAccID=%s,newPsw=%s" % (actionType, newAccID, newPsw), curPlayer.GetPlayerID())  
 | 
    return  
 | 
  
 | 
## µ±Ç°»î¶¯µÄÉÏ´«Êý¾ÝÊÇ·ñ¿ªÆô  
 | 
#  @param actionType »î¶¯ÀàÐÍ  
 | 
#  @return bool  
 | 
def IsCurActionRegisterOpen(actionType, curPlayer, isNotify=False):  
 | 
      
 | 
    if not GameWorld.IsMergeOpen():  
 | 
        GameWorld.Log("IsCurActionRegisterOpen False!(Because IsMergeOpen() return False!)")  
 | 
        return False  
 | 
      
 | 
    # ¿ç·þboss  
 | 
    if actionType == ShareDefine.Def_MergeAction_Boss:  
 | 
        return GameWorldMergeBoss.IsMergeBossOpen(curPlayer, isNotify)  
 | 
      
 | 
    # ¿ç·þPK  
 | 
    elif actionType == ShareDefine.Def_MergeAction_MergePK:  
 | 
        return GameWorldMergePK.IsMergePKMatchOpen()  
 | 
      
 | 
    # ¿ç·þÍõÕßÕù°Ô  
 | 
    elif actionType == ShareDefine.Def_MergeAction_MergeKing:  
 | 
        return GameWorld.GetGameWorld().GetDictByKey(ShareDefine.Def_Notify_WorldKey_Merge_King) > 0  
 | 
          
 | 
    if isNotify:  
 | 
        PlayerControl.NotifyCode(curPlayer, "GeRen_hgg_21675")  
 | 
          
 | 
    return False  
 | 
  
 | 
  
 | 
## Íæ¼Òµ±Ç°»î¶¯ÊÇ·ñ¿ÉÒÔÉÏ´«Êý¾Ý  
 | 
#  @param curPlayer Íæ¼ÒʵÀý  
 | 
#  @param actionType »î¶¯ÀàÐÍ  
 | 
#  @return bool  
 | 
def CheckPlayerCanMergeRegister(curPlayer, actionType):  
 | 
      
 | 
    # ¿ç·þboss  
 | 
    if actionType == ShareDefine.Def_MergeAction_Boss:  
 | 
        return __CheckCanJoinMergeBoss(curPlayer)  
 | 
      
 | 
    return True  
 | 
  
 | 
  
 | 
## ¿ªÆô¿ç·þÈü±¨Ãû  
 | 
#  @param None  
 | 
#  @return: None  
 | 
def __CheckCanJoinMergeBoss(curPlayer):  
 | 
    joinCondition = ReadChConfig.GetEvalChConfig("MergeBoss_Condition")  
 | 
    needLV = joinCondition[0]  
 | 
    needFPOrder = joinCondition[1]  
 | 
      
 | 
    playerLV = curPlayer.GetLV()  
 | 
    if needLV > 0 and playerLV < needLV:  
 | 
        return False  
 | 
      
 | 
    if needFPOrder > 0:  
 | 
        fpBillboardType = ShareDefine.Def_BT_FightPower  
 | 
        billBoard = GameWorld.GetBillboard().FindBillboard(fpBillboardType)  
 | 
        if not billBoard:  
 | 
            GameWorld.ErrLog("__CheckCanJoinMergeBoss ÕÒ²»µ½ÅÅÐаñÊý¾Ý(%s)" % fpBillboardType)  
 | 
            return False  
 | 
          
 | 
        order = billBoard.IndexOfByID(curPlayer.GetPlayerID()) + 1  # Íæ¼ÒÔÚÅÅÐаñÖеÄÃû´Î  
 | 
        if order > needFPOrder or order <= 0:  
 | 
            return False  
 | 
      
 | 
    return True  
 | 
  
 |