| | |
| | | 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
|
| | |
|
| | |
| | | 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):
|
| | |
| | | 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
|
| | |
|
| | |
|
| | |
| | | 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)
|
| | |
| | | __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]
|
| | |
| | |
|
| | | 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
|
| | |
| | | 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)
|