hxp
2018-09-26 0a17e139006a7e19bc3a100fa394ad7d9b4bb716
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py
@@ -153,11 +153,8 @@
    GameWorld.DebugLog('    PyGameData.g_sortBOSSRefreshList=%s'%PyGameData.g_sortBOSSRefreshList)
    return
## 世界boss重生
#  @param msgList 信息列表
#  @param tick 时间戳
#  @return None
def DoGameWorldBossOnReborn(msgList, tick):
def OnGameWorldBossStateChange(msgList, tick):
    ## 世界boss状态变更
    if len(msgList) <= 0:
        return
@@ -165,17 +162,19 @@
    isAlive = msgList[1]
    mapID = msgList[2] if len(msgList) > 2 else None
    lineID = msgList[3] if len(msgList) > 3 else None
    GameWorld.DebugLog("世界boss DoGameWorldBossOnReborn...mapID=%s,lineID=%s,bossID=%s,state=%s,tick=%s" % (mapID, lineID, bossID, isAlive, tick))
    GameWorld.Log("世界boss状态变更: mapID=%s,lineID=%s,bossID=%s,state=%s,tick=%s" % (mapID, lineID, bossID, isAlive, tick))
    
    if bossID <= 0:
        return
    
    bossShuntMapIDList = IpyGameDataPY.GetFuncEvalCfg("BossShunt")
    isBossShuntMap = mapID in bossShuntMapIDList
    isMapNeedShunt = IsMapNeedBossShunt(mapID)
    if not isAlive:
        DoRemoveBossShuntPlayerByNPCID(mapID, lineID, bossID)
        
    if isMapNeedShunt:
        __UpdBossLineState(bossID, lineID, isAlive)
    if isBossShuntMap:
        __UpdBossLineState(bossID, lineID, isAlive, isMapNeedShunt)
    
    #__GetBossRecDataByID(bossID) # 检查是否有该boss记录,没有的话创建新纪录
    if isAlive != __GetIsAlive(bossID):
@@ -188,26 +187,22 @@
        PyGameData.g_familyOwnerBossInfo.pop(bossID)
    return
def __UpdBossLineState(bossID, lineID, isAlive):
def __UpdBossLineState(bossID, lineID, isAlive, isMapNeedShunt):
    if lineID == None:
        return
    bossDeadLineList = PyGameData.g_bossShuntDeadLine.get(bossID, [])
    if isAlive and lineID in bossDeadLineList:
        bossDeadLineList.remove(lineID)
    elif not isAlive and lineID not in bossDeadLineList:
        bossDeadLineList.append(lineID)
    else:
    bossLineStateDict = PyGameData.g_bossShuntLineState.get(bossID, {})
    if bossLineStateDict.get(lineID) == isAlive:
        return
    bossLineStateDict[lineID] = isAlive
    PyGameData.g_bossShuntLineState[bossID] = bossLineStateDict
    # 为方便内网清除开服天测试,状态都更新
    if not isMapNeedShunt:
        return
    
    PyGameData.g_bossShuntDeadLine[bossID] = bossDeadLineList
    if not bossDeadLineList:
        PyGameData.g_bossShuntDeadLine.pop(bossID)
    if bossID not in PyGameData.g_bossShuntDeadLineChangeBoss:
        PyGameData.g_bossShuntDeadLineChangeBoss.append(bossID)
    #GameWorld.SendCommMapServerMsg(ShareDefine.Def_Notify_WorldKey_BossShuntDeadLine, PyGameData.g_bossShuntDeadLine)
    GameWorld.DebugLog("    boss已死亡线路变更: %s" % PyGameData.g_bossShuntDeadLine)
    if bossID not in PyGameData.g_bossShuntStateChangeBoss:
        PyGameData.g_bossShuntStateChangeBoss.append(bossID)
    GameWorld.Log("    分流Boss线路状态变更: %s" % PyGameData.g_bossShuntLineState)
    return
@@ -339,6 +334,7 @@
        killedTime = universalRecData.GetValue2() 
        refreshTime = __GetBossRefreshTime(bossInfoObj.BossID)
        bossInfoObj.RefreshSecond = max(0, refreshTime - (curTime - killedTime))
        bossInfoObj.RefreshCD = refreshTime
        #bossInfoObj.KilledCnt = __GetKilledCnt(universalRecData)
            
        bossInfo.BossInfoList.append(bossInfoObj)
@@ -481,7 +477,7 @@
    __SendMapServerAliveBoss()
    if IsMapNeedBossShunt(0):
        GameWorld.SendCommMapServerMsg(ShareDefine.Def_Notify_WorldKey_BossShuntPlayer, PyGameData.g_bossShuntPlayerInfo)
        GameWorld.SendCommMapServerMsg(ShareDefine.Def_Notify_WorldKey_BossShuntDeadLine, PyGameData.g_bossShuntDeadLine)
        GameWorld.SendCommMapServerMsg(ShareDefine.Def_Notify_WorldKey_BossShuntLineState, PyGameData.g_bossShuntLineState)
    #通知一个参数
    bossID = IpyGameDataPY.GetFuncCfg('DogzFBRefreshCfg', 2)
    onlineCnt = __GetBossOnlineHeroCnt(bossID)[0]
@@ -814,10 +810,10 @@
def DoCheckWorldBossShuntInfo(curTime, tick):
    ## 定时检查boss分流信息数据
    if PyGameData.g_bossShuntDeadLineChangeBoss and curTime % 2 == 0:
        GameWorld.SendCommMapServerMsg(ShareDefine.Def_Notify_WorldKey_BossShuntDeadLine, PyGameData.g_bossShuntDeadLine)
        Sync_BossShuntLineInfo(None, PyGameData.g_bossShuntDeadLineChangeBoss)
        PyGameData.g_bossShuntDeadLineChangeBoss = []
    if PyGameData.g_bossShuntStateChangeBoss and curTime % 5 == 0:
        GameWorld.SendCommMapServerMsg(ShareDefine.Def_Notify_WorldKey_BossShuntLineState, PyGameData.g_bossShuntLineState)
        Sync_BossShuntLineInfo(None, PyGameData.g_bossShuntStateChangeBoss)
        PyGameData.g_bossShuntStateChangeBoss = []
        
    if curTime % 10 != 0:
        return
@@ -872,16 +868,23 @@
def Sync_BossShuntLineInfo(curPlayer=None, syncBOSSIDList=[]):
    
    if not syncBOSSIDList:
        syncBOSSIDList = PyGameData.g_bossShuntDeadLine.keys()
        syncBOSSIDList = PyGameData.g_bossShuntLineState.keys()
    
    bossShuntLineInfo = ChPyNetSendPack.tagGCBossShuntLineStateInfo()
    bossShuntLineInfo.Clear()
    bossShuntLineInfo.BossLineStateInfo = []
    for bossID in syncBOSSIDList:
        bossLineStateDict = PyGameData.g_bossShuntLineState.get(bossID, {})
        lineIDList = []
        stateList = []
        for lineID, state in bossLineStateDict.items():
            lineIDList.append(lineID)
            stateList.append(state)
        bossLineState = ChPyNetSendPack.tagGCBossShuntLineState()
        bossLineState.BossID = bossID
        bossLineState.DeadLineList = PyGameData.g_bossShuntDeadLine.get(bossID, [])
        bossLineState.DeadLineCount = len(bossLineState.DeadLineList)
        bossLineState.LineIDList = lineIDList
        bossLineState.StateList = stateList
        bossLineState.LineCount = len(bossLineState.LineIDList)
        bossShuntLineInfo.BossLineStateInfo.append(bossLineState)
        
    bossShuntLineInfo.Count = len(bossShuntLineInfo.BossLineStateInfo)