| | |
| | | return
|
| | | ##------------------------------------------------------------------------------
|
| | |
|
| | | ## 合服活动BOSS(勇者大陆)
|
| | | # @param npcRefresh 刷新的npc对象
|
| | | # @param tick 当前时间
|
| | | # @return None
|
| | | def NPCRefresh_63(npcRefresh, tick): return __RefreshMixBoss(npcRefresh, tick)
|
| | | def NPCRefresh_64(npcRefresh, tick): return __RefreshMixBoss(npcRefresh, tick)
|
| | | def NPCRefresh_65(npcRefresh, tick): return __RefreshMixBoss(npcRefresh, tick)
|
| | |
|
| | | ## 合服活动BOSS(勇者大陆)
|
| | | # @param npcRefresh 刷新的npc对象
|
| | | # @param tick 当前时间
|
| | | # @return None
|
| | | def __RefreshMixBoss(npcRefresh, tick):
|
| | | gameWorld = GameWorld.GetGameWorld()
|
| | | isMixServer = gameWorld.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_IsMixServer)
|
| | | mixDay = gameWorld.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_MixServerDay)
|
| | | refreshMark = npcRefresh.GetRefreshMark()
|
| | | |
| | | # 配置
|
| | | mixBossInfo = ReadChConfig.GetEvalChConfig("MixBossInfo")
|
| | | curBossInfo = mixBossInfo.get(refreshMark)
|
| | | if not curBossInfo:
|
| | | #GameWorld.DebugLog("__RefreshMixBoss() hasn't configuration refreshMark(%s)"%refreshMark)
|
| | | return
|
| | | npcId, mixTime, refreshTimeList = curBossInfo
|
| | | |
| | | # 合服期间
|
| | | if not isMixServer or mixDay < mixTime[0] or mixDay > mixTime[1]:
|
| | | #GameWorld.DebugLog("__RefreshMixBoss() no mix server")
|
| | | return
|
| | | |
| | | # 一线刷新
|
| | | lineId = GameWorld.GetGameWorld().GetLineID()
|
| | | if lineId != 0:
|
| | | #GameWorld.DebugLog("__RefreshMixBoss() not in 1 line(%s), now"%lineId)
|
| | | return
|
| | | |
| | | # 有怪
|
| | | if npcRefresh.GetCount() > 0:
|
| | | #GameWorld.DebugLog("__RefreshMixBoss() have mix server boss(%s), now"%refreshMark)
|
| | | return
|
| | | |
| | | # 刷新时间匹配
|
| | | curTime = GameWorld.GetCurrentTime()
|
| | | if (curTime.hour, curTime.minute) not in refreshTimeList:
|
| | | #GameWorld.DebugLog("__RefreshMixBoss() npcId(%s) isn't refresh(%s) time(%s)"
|
| | | # % (npcId, str((curTime.hour, curTime.minute)), refreshTimeList))
|
| | | return
|
| | | |
| | | # 刷新Tick 一分钟内不再刷新
|
| | | refreshTickKey = ChConfig.Map_NPC_WorldBossLastReBornTick % npcId
|
| | | lastRefreshTick = gameWorld.GetGameWorldDictByKey(refreshTickKey)
|
| | | if tick - lastRefreshTick <= 60 * 1000:
|
| | | #GameWorld.DebugLog("__RefreshMixBoss() not refresh inside minute, npcID(%s) tick(%s) lastTick(%s)"
|
| | | # % (npcId, tick, lastRefreshTick))
|
| | | return
|
| | | gameWorld.SetGameWorldDict(refreshTickKey, tick)
|
| | | |
| | | # 刷新NPC
|
| | | npcRefresh.Refresh(npcId, ChConfig.Def_SuperBossAngryCount, 1, False)
|
| | | # 初始化NPC
|
| | | __InitNewBornNPC(npcRefresh, tick)
|
| | | |
| | | GameWorld.DebugLog("__RefreshMixBoss() refresh mix server boss npcId(%s) success!!!" % (npcId))
|
| | | return
|
| | |
|
| | | ## 地图M个点随机刷N只怪
|
| | | # @param npcRefresh 刷新实例
|
| | | # @param tick 当前时间
|
| | |
| | | if not bossID and not stoneNPCID:
|
| | | return
|
| | |
|
| | | if mapID not in ChConfig.Def_CrossZoneTableName:
|
| | | if mapID not in ChConfig.Def_CrossZoneMapTableName:
|
| | | return
|
| | | tableName = ChConfig.Def_CrossZoneTableName[mapID]
|
| | | tableName = ChConfig.Def_CrossZoneMapTableName[mapID]
|
| | | realMapID = GameWorld.GetGameWorld().GetRealMapID()
|
| | | copyMapID = GameWorld.GetGameWorld().GetCopyMapID()
|
| | | zoneIpyData = IpyGameDataPY.GetIpyGameDataNotLog(tableName, realMapID, mapID, copyMapID)
|
| | |
| | | 注意:同个虚拟线路中,标试点不可重复!标试点不可重复!标试点不可重复!
|
| | | '''
|
| | | mapID = gameWorld.GetMapID()
|
| | | # {mapID:{编号:[[多个NPCID], [多个标试点], 单个点最大数量, 所有点总数量, 刷怪间隔秒], ...}, ...}
|
| | | # {mapID:{编号:[[多个NPCID], [多个标试点], 单个点最大数量, 所有点总数量, 刷怪间隔秒, 每整X小时], ...}, ...}
|
| | | randRefreshNPCDict = IpyGameDataPY.GetFuncEvalCfg("RandomRefreshNPC", 1, {})
|
| | | if mapID not in randRefreshNPCDict:
|
| | | return
|
| | |
| | | return
|
| | | gameFB.SetGameFBDict(ChConfig.Def_RMark_RandomRefreshNPCTick, tick)
|
| | |
|
| | | curTime = int(time.time())
|
| | | serverTime = GameWorld.GetCurrentTime()
|
| | | curHour, curMinute = serverTime.hour, serverTime.minute
|
| | | refreshNumList = []
|
| | | for num, refreshInfo in mapRandRefreshNPCDict.items():
|
| | | refreshCD = refreshInfo[-1]
|
| | | numLastTime = gameFB.GetGameFBDictByKey(ChConfig.Def_RMark_RandomRefreshNPCNumTime % num)
|
| | | if numLastTime and curTime - numLastTime < refreshCD:
|
| | | refreshCD = refreshInfo[4]
|
| | | numLastTick = gameFB.GetGameFBDictByKey(ChConfig.Def_RMark_RandomRefreshNPCNumTime % num)
|
| | | perHours = refreshInfo[5]
|
| | | if numLastTick and perHours:
|
| | | if curHour % perHours != 0 or curMinute != 0:
|
| | | continue
|
| | | refreshCD = 65 # 1分钟内不重复刷新
|
| | | if numLastTick and tick - numLastTick < refreshCD * 1000:
|
| | | continue
|
| | | gameFB.SetGameFBDict(ChConfig.Def_RMark_RandomRefreshNPCNumTime % num, curTime)
|
| | | gameFB.SetGameFBDict(ChConfig.Def_RMark_RandomRefreshNPCNumTime % num, tick)
|
| | | refreshNumList.append(num)
|
| | |
|
| | | if not refreshNumList:
|
| | |
| | |
|
| | | #GameWorld.DebugLog("npcCountDict=%s" % npcCountDict, copyMapID)
|
| | | for num in refreshNumList:
|
| | | npcIDList, markList, maxCount, totalMaxCount = mapRandRefreshNPCDict[num][:-1]
|
| | | npcIDList, markList, maxCount, totalMaxCount = mapRandRefreshNPCDict[num][:4]
|
| | |
|
| | | curTotalCount = 0
|
| | | for rMark in markList:
|