#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#-------------------------------------------------------------------------------  
 | 
#  
 | 
#-------------------------------------------------------------------------------  
 | 
#  
 | 
##@package GameWorldMergeBoss  
 | 
#  
 | 
# @todo:¿ç·þboss  
 | 
# @author hxp  
 | 
# @date 2015-9-21  
 | 
# @version 1.3  
 | 
#  
 | 
# ÏêϸÃèÊö: ¿ç·þboss  
 | 
# @change: "2015-10-10 10:10" hxp Ôö¼Ó¶àµØÍ¼Ö§³Ö  
 | 
# @change: "2017-05-23 10:30" hxp ±¾·þ¿ç·þplayerIDΨһͨÓ÷½Ê½ÐÞ¸Ä  
 | 
# @change: "2017-07-06 20:30" hxp Ôö¼Ó¹¦Ñ«·½Ê½Ð޸ģ»»î¶¯ÖÐÁÙʱ·þÎñÆ÷ά»¤´¦ÀíÖ§³Ö  
 | 
#  
 | 
#---------------------------------------------------------------------  
 | 
#"""Version = 2017-07-06 20:30"""  
 | 
#---------------------------------------------------------------------  
 | 
import GameWorld  
 | 
import ReadChConfig  
 | 
import PlayerCompensation  
 | 
import PlayerMergeRegister  
 | 
import MergeBroadcast  
 | 
import ShareDefine  
 | 
import ChConfig  
 | 
import PlayerControl  
 | 
import PlayerMergeEvent  
 | 
  
 | 
import time  
 | 
  
 | 
g_mergeBossOverPlayerList = [] # ÒѾ½áËãÍê¿ç·þbossµÄ±¾·þÍæ¼ÒIDÁÐ±í  
 | 
  
 | 
def IsMergeBossOpen(curPlayer, isNotify):  
 | 
    global g_mergeBossOverPlayerList  
 | 
      
 | 
    if GameWorld.GetGameWorld().GetDictByKey(ShareDefine.Def_Notify_WorldKey_MergeBoss) != 1:  
 | 
        if isNotify:  
 | 
            PlayerControl.NotifyCode(curPlayer, "GeRen_hgg_21675")  
 | 
        return False  
 | 
      
 | 
    # ÒѾ´òÍê½áËãÁË  
 | 
    if curPlayer.GetPlayerID() in g_mergeBossOverPlayerList:  
 | 
        if isNotify:  
 | 
            PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_884824")  
 | 
        return False  
 | 
      
 | 
    return True  
 | 
  
 | 
def OnClientServerInitOK(tick):  
 | 
    # ×Ó·þÆô¶¯³É¹¦Ê±  ¿ç·þ·þÎñÆ÷֪ͨ×Ó·þÐÅÏ¢  
 | 
    mergeBossState = GameWorld.GetGameWorld().GetDictByKey(ShareDefine.Def_Notify_WorldKey_MergeBoss)  
 | 
    dictKeyValue = {ShareDefine.Def_Notify_WorldKey_MergeBoss:mergeBossState}  
 | 
    MergeBroadcast.SendBroadcastMerge(ChConfig.Def_MergeDictKeyValue, 0, dictKeyValue, False)  
 | 
    return  
 | 
  
 | 
def MergeBoss_ChangeState(state):  
 | 
    ##¿ç·þboss»î¶¯×´Ì¬±ä¸ü  
 | 
    global g_mergeBossOverPlayerList  
 | 
      
 | 
    if GameWorld.IsMergeServer():  
 | 
        pass  
 | 
    else:  
 | 
        g_mergeBossOverPlayerList = []  
 | 
          
 | 
    return  
 | 
  
 | 
## ¿ç·þboss±»»÷ɱÊÕµ½ÐÅÏ¢´¦Àí  
 | 
#  @param infoDict ÐÅÏ¢×Öµä  
 | 
#  @return None  
 | 
def RecvMergeBossKilled(infoDict):  
 | 
    if GameWorld.IsMergeServer():  
 | 
        return  
 | 
      
 | 
    npcID = infoDict["NPCID"] # ±»»÷ɱµÄbossID  
 | 
    lastHurtPlayerID = infoDict["LastHurtID"] # ×îºóÒ»»÷Íæ¼Ò  
 | 
    orderPlayerIDList = infoDict["OrderIDList"] # Íæ¼ÒÉËѪÅÅÐÐ  
 | 
      
 | 
    __GiveMergeBossLastHurtAward(npcID, lastHurtPlayerID)  
 | 
    __GiveMergeBossHurtOrderAward(npcID, orderPlayerIDList)  
 | 
    return  
 | 
  
 | 
## ¸ø¿ç·þboss×îºóÒ»»÷²¹µ¶½±Àø  
 | 
def __GiveMergeBossLastHurtAward(npcID, lastHurtPlayerID):  
 | 
    lastHurtAwardInfo = ReadChConfig.GetEvalChConfig("MergeBoss_LastHurtAward")  
 | 
      
 | 
    title, contentTemple, getDays = lastHurtAwardInfo[0]  
 | 
    awardItemDict = lastHurtAwardInfo[1]  
 | 
    if npcID not in awardItemDict:  
 | 
        GameWorld.ErrLog("ÕÒ²»µ½¿ç·þboss×îºóÒ»»÷½±ÀøÐÅÏ¢£¡bossID=%s, ¼ì²éMergeBoss_LastHurtAward.txt" % npcID)  
 | 
        return  
 | 
      
 | 
    regRecData = PlayerMergeRegister.GetRegisterPlayerRec(lastHurtPlayerID)  
 | 
    # ²»ÊDZ¾·þÍæ¼Ò  
 | 
    if not regRecData:  
 | 
        GameWorld.DebugLog("²»ÊDZ¾·þÍæ¼ÒlastHurtPlayerID=%s" % lastHurtPlayerID)  
 | 
        return  
 | 
      
 | 
    addItemList = awardItemDict[npcID]  
 | 
    content = contentTemple % npcID  
 | 
    PlayerCompensation.SendPersonalItemMailEx(title, content, getDays, [lastHurtPlayerID], addItemList)  
 | 
    return  
 | 
  
 | 
## ¸ø¿ç·þbossÉ˺¦ÅÅÐаñ½±Àø  
 | 
def __GiveMergeBossHurtOrderAward(npcID, orderPlayerIDList):  
 | 
    orderAwardInfo = ReadChConfig.GetEvalChConfig("MergeBoss_HurtOrderAward")  
 | 
      
 | 
    title, contentTemple, getDays = orderAwardInfo[0]  
 | 
    awardItemDict = orderAwardInfo[1]  
 | 
    if npcID not in awardItemDict:  
 | 
        GameWorld.ErrLog("ÕÒ²»µ½¿ç·þbossÉ˺¦ÅÅÐн±ÀøÐÅÏ¢£¡bossID=%s, ¼ì²éMergeBoss_HurtOrderAward.txt" % npcID)  
 | 
        return  
 | 
      
 | 
    orderItemDict = awardItemDict[npcID]  
 | 
    for order, orderPlayerID in enumerate(orderPlayerIDList, 1):  
 | 
        if order not in orderItemDict:  
 | 
            GameWorld.ErrLog("ÕÒ²»µ½¿ç·þbossÉ˺¦ÅÅÐн±Àø£¡bossID=%s,order=%s,playerID=%s, ¼ì²éMergeBoss_HurtOrderAward.txt"   
 | 
                             % (npcID, order, orderPlayerID))  
 | 
            continue  
 | 
  
 | 
        regRecData = PlayerMergeRegister.GetRegisterPlayerRec(orderPlayerID)  
 | 
        # ²»ÊDZ¾·þÍæ¼Ò  
 | 
        if not regRecData:  
 | 
            GameWorld.DebugLog("²»ÊDZ¾·þÍæ¼ÒorderPlayerID=%s" % orderPlayerID)  
 | 
            continue  
 | 
      
 | 
        content = contentTemple % (npcID, order)  
 | 
        addItemList = orderItemDict[order]  
 | 
        PlayerCompensation.SendPersonalItemMailEx(title, content, getDays, [orderPlayerID], addItemList)  
 | 
    return  
 | 
  
 | 
  
 | 
## ¿ç·þboss»î¶¯½áËãÊÕµ½ÐÅÏ¢´¦Àí  
 | 
#  @param infoDict ÐÅÏ¢×Öµä  
 | 
#  @return None  
 | 
def RecvMergeBossResult(infoDict):  
 | 
    global g_mergeBossOverPlayerList  
 | 
      
 | 
    if GameWorld.IsMergeServer():  
 | 
        return  
 | 
      
 | 
    totalOrderAwardInfo = ReadChConfig.GetEvalChConfig("MergeBoss_TotalOrderAward")  
 | 
    title, contentTemple, getDays = totalOrderAwardInfo[0]  
 | 
    awardItemDict = totalOrderAwardInfo[1]  
 | 
      
 | 
    playerScoreDict = infoDict["PlayerScore"] # Íæ¼Ò×îÖջÃ÷ϸÇé¿ö  
 | 
      
 | 
    curTime = int(time.time())  
 | 
    universalRecMgr = GameWorld.GetUniversalRecMgr()    
 | 
    mergeEventRec = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_MergeEvent)  
 | 
      
 | 
    for playerID, scoreInfo in playerScoreDict.items():  
 | 
          
 | 
        regRecData = PlayerMergeRegister.GetRegisterPlayerRec(playerID)  
 | 
        # ²»ÊDZ¾·þÍæ¼Ò  
 | 
        if not regRecData:  
 | 
            GameWorld.DebugLog("²»ÊDZ¾·þÍæ¼ÒplayerID=%s" % playerID)  
 | 
            continue  
 | 
          
 | 
        if playerID not in g_mergeBossOverPlayerList:  
 | 
            g_mergeBossOverPlayerList.append(playerID)  
 | 
              
 | 
        accID = PlayerMergeRegister.GetMergeRegRecAccID(regRecData)  
 | 
      
 | 
        order, gongXun = scoreInfo  
 | 
        content = contentTemple % (order)  
 | 
        if order in awardItemDict:  
 | 
            addItemList = awardItemDict[order]  
 | 
            PlayerCompensation.SendPersonalItemMailEx(title, content, getDays, [playerID], addItemList)  
 | 
        else:  
 | 
            GameWorld.ErrLog("ÕÒ²»µ½¿ç·þbossÕóÓª×ÜÉ˺¦ÅÅÐн±Àø£¡order=%s, ¼ì²éMergeBoss_TotalOrderAward.txt" % (order))  
 | 
          
 | 
        if gongXun > 0:  
 | 
            # ²åÈë½áËãʼþ  
 | 
            player = GameWorld.GetPlayerManager().FindPlayerByID(playerID)  
 | 
            eventData = gongXun  
 | 
            PlayerMergeEvent.AddMergePlayerEvent(mergeEventRec, playerID, PlayerMergeEvent.Def_MSPEvent_AddGongXun,   
 | 
                                                 curTime, eventData, player)  
 | 
              
 | 
        GameWorld.Log("¿ç·þBoss×ܽáËã: playerID=%s,accID=%s,order=%s,gongXun=%s"   
 | 
                      % (playerID, accID, order, gongXun))  
 | 
          
 | 
    return  
 | 
  
 | 
  
 |