| | |
| | | import PlayerUniversalGameRec
|
| | | import PlayerCompensation
|
| | | import IpyGameDataPY
|
| | | import MergePlayer
|
| | | import PyGameDataStruct
|
| | | import PyDataManager
|
| | | import PlayerControl
|
| | |
| | | #
|
| | | # return
|
| | |
|
| | | #// A9 04 查询boss信息 #tagCGQueryBossInfo
|
| | | #
|
| | | #
|
| | | #struct tagCGQueryBossInfo
|
| | | #{
|
| | | # tagHead Head;
|
| | | # BYTE Count; //数量
|
| | | # DWORD BossIDList[Count]; //boosid
|
| | | #};
|
| | | def OnQueryBossInfo(index, clientData, tick):
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | bossIDList = clientData.BossIDList
|
| | | Sync_BossInfo(curPlayer, bossIDList)
|
| | | return
|
| | |
|
| | |
|
| | | ## 同步boss相关信息
|
| | |
| | | state = gameWorld.GetDictByKey(ChConfig.Def_WorldKey_OperationActionState % ShareDefine.OperationActionName_BossReborn)
|
| | | if state:
|
| | | Sync_BossRebornPoint(curPlayer)
|
| | | Sync_DogzNPCRefreshTime(curPlayer)
|
| | | return
|
| | |
|
| | | ## 地图启动ok通知
|
| | |
| | | playerCntDict[bossid] = playerCntDict.get(bossid, 0) + 1
|
| | | GameWorld.DebugLog(' boss等级信息对应本服在线人数 %s' % playerCntDict)
|
| | |
|
| | | # 此处需要统计累加当前在跨服服务器的玩家
|
| | | mergeServerOnlinePlayerDict = MergePlayer.GetMergeServerOnlinePlayerInfo()
|
| | | for playerInfo in mergeServerOnlinePlayerDict.values():
|
| | | findLV = playerInfo[MergePlayer.Def_MSOLPlayer_LV]
|
| | | for bossid, lvLimit in bossRebornDict.items():
|
| | | if lvLimit[0] <= findLV <= lvLimit[1]:
|
| | | playerCntDict[bossid] = playerCntDict.get(bossid, 0) + 1
|
| | | GameWorld.DebugLog(' boss等级信息对应本服及跨服在线人数 %s' % playerCntDict)
|
| | | |
| | | for bossid, curOnlineCnt in playerCntDict.items():
|
| | | SetBossOnlineHeroCnt(bossid, curOnlineCnt)
|
| | |
|
| | |
| | | return
|
| | | onlineCnt = __GetBossOnlineHeroCnt(bossid)[0]
|
| | | LVLimit = ipyData.GetLVLimit()
|
| | | if PyGameData.g_yesterdayPlayerLVDict: |
| | | openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay)
|
| | | if openServerDay != 0 and LVLimit and len(LVLimit) == 2:
|
| | | yesterdayCnt = len([1 for lv in PyGameData.g_yesterdayPlayerLVDict.values() if LVLimit[0]<=lv <= LVLimit[1]]) #参数昨日活跃人数
|
| | | else:
|
| | | yesterdayCnt = IpyGameDataPY.GetFuncCfg('FirstDayActivePlayerCnt')
|
| | |
| | | refreshTime = 0
|
| | | PyGameData.g_sortBOSSRefreshList[i] = [bossID, killedTime, refreshTime]
|
| | | bossIDList.append(bossID)
|
| | | curTime = int(time.time())
|
| | | PyGameData.g_sortBOSSRefreshList.sort(key=lambda asd:max(0, asd[2] - (curTime - asd[1])))
|
| | | GameWorld.Log(' boss复活活动 重生boss bossIDList=%s'%bossIDList)
|
| | | g_lastBossRebornTime = int(time.time())
|
| | | g_lastBossRebornTime = curTime
|
| | | else:
|
| | | #广播
|
| | | needNotifyPointPerList = IpyGameDataPY.GetFuncEvalCfg('BossRebornNotify')
|
| | |
| | | NetPackCommon.SendFakePack(curPlayer, packData)
|
| | | return
|
| | |
|
| | | def Sync_DogzNPCRefreshTime(msgList):
|
| | | def Sync_DogzNPCRefreshTime(curPlayer=None):
|
| | | #同步神兽副本NPC刷新时间
|
| | | playerID, refreshTimeDict = msgList
|
| | | curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID) if playerID else None
|
| | | if playerID and not curPlayer:
|
| | | return
|
| | | refreshTimeDict = PyGameData.g_dogzNPCRefreshTimeDict
|
| | |
|
| | | if not refreshTimeDict:
|
| | | return
|
| | | curTime = int(time.time())
|
| | | packData = ChPyNetSendPack.tagGCDogzNPCRefreshTime()
|
| | | packData.InfoList=[]
|
| | | for npcid, rTime in refreshTimeDict.items():
|
| | | for npcid, timeinfo in refreshTimeDict.items():
|
| | | lastRefreshTime, nextNeedTime = timeinfo
|
| | | remainTime = max(0, nextNeedTime - curTime + lastRefreshTime)
|
| | | timeInfo = ChPyNetSendPack.tagDogzTimeInfoObj()
|
| | | timeInfo.NPCID = npcid
|
| | | timeInfo.RefreshSecond = rTime
|
| | | timeInfo.RefreshSecond = remainTime
|
| | | packData.InfoList.append(timeInfo)
|
| | | packData.Cnt = len(packData.InfoList)
|
| | | if not playerID:
|
| | | if not curPlayer:
|
| | | playerManager = GameWorld.GetPlayerManager()
|
| | | for i in xrange(playerManager.GetActivePlayerCount()):
|
| | | curPlayer = playerManager.GetActivePlayerAt(i)
|
| | |
| | | if curMember.GetFamilyLV() == IPY_GameServer.fmlMember:
|
| | | GameWorld.DebugLog("普通成员无法召集!", playerID)
|
| | | return
|
| | | PlayerControl.FamilyNotify(curFamily.GetID(), "FairyGrabBossHelp", [npcID])
|
| | | PlayerControl.FamilyNotify(curFamily.GetID(), "FairyGrabBossHelp", [curPlayer.GetName(), npcID])
|
| | | return
|
| | |
|