| | |
| | | import ShareDefine
|
| | | import ReadChConfig
|
| | | import GameLogic_SealDemon
|
| | | import CrossRealmPlayer
|
| | | import PlayerControl
|
| | | import IPY_GameWorld
|
| | | import IpyGameDataPY
|
| | |
| | | def NPCRefresh_98(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_99(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_100(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_180(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_181(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_182(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_183(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_184(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_185(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_186(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_187(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_188(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_189(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_190(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_191(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_192(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_193(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_194(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_195(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_196(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_197(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_198(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_199(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | | def NPCRefresh_200(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
|
| | |
|
| | |
|
| | | def ResetActivityBossRefreshCount():
|
| | | ## 重置活动boss刷怪个数
|
| | | gameFB = GameWorld.GetGameFB()
|
| | | gameNPC = GameWorld.GetNPCManager()
|
| | | |
| | | # gameFb 要取活动线
|
| | | activityLineIndex = 0 # 活动线, 默认1线
|
| | | mapID = GameWorld.GetMap().GetMapID()
|
| | | activityMapLineDict = IpyGameDataPY.GetFuncEvalCfg("MapLine", 2, {})
|
| | | if mapID in activityMapLineDict:
|
| | | activityLineIndex = max(0, activityMapLineDict[mapID] - 1)
|
| | | |
| | | gameWorld = IPY_GameWorld.IPY_GameWorld(activityLineIndex)
|
| | | gameFB = gameWorld.GetGameFBByFbIndex(activityLineIndex)
|
| | | |
| | | gameNPC = GameWorld.GetNPCManager() # NPC标识点的无所谓,哪条线都可以,因为都一样
|
| | | for i in xrange(gameNPC.GetCustomNPCRefreshCount()):
|
| | | npcRefresh = gameNPC.GetCustomNPCRefreshAt(i)
|
| | | refreshMark = npcRefresh.GetRefreshMark()
|
| | | if gameFB.GetGameFBDictByKey(ChConfig.Map_NPC_ActivityBossRebornCount % refreshMark):
|
| | | gameFB.SetGameFBDict(ChConfig.Map_NPC_ActivityBossRebornCount % refreshMark, 0)
|
| | | GameWorld.DebugLog("重置活动boss刷怪点刷怪个数: refreshMark=%s" % refreshMark)
|
| | | GameWorld.DebugLog("重置活动boss刷怪点刷怪个数: activityLineIndex=%s,refreshMark=%s" % (activityLineIndex, refreshMark))
|
| | | return
|
| | |
|
| | | ## 世界boss刷怪
|
| | |
| | | '''非分流地图boss只在一线刷
|
| | | 分流地图boss每条线都刷新,其他分流线路boss在没人打的情况下同生同死
|
| | | '''
|
| | | if GameWorld.IsCrossServer():
|
| | | __DoRefreshWorldBossCrossServer(npcRefresh, tick)
|
| | | return
|
| | | mapID = GameWorld.GetMap().GetMapID()
|
| | | refreshMark = npcRefresh.GetRefreshMark()
|
| | | lineID = GameWorld.GetGameWorld().GetLineID()
|
| | | |
| | | relatedType, relatedID = 0, 0
|
| | | isNeedShunt = 0
|
| | | if mapID == ChConfig.Def_FBMapID_SealDemon:
|
| | | bossID = GameLogic_SealDemon.CurFBLineBOSSID()
|
| | | stoneNPCID = 0
|
| | |
| | | return
|
| | | stoneNPCID = ipyData.GetStoneNPCID()
|
| | | bossID = ipyData.GetNPCID()
|
| | | relatedType = ipyData.GetRelatedType()
|
| | | relatedID = ipyData.GetRelatedID()
|
| | | isNeedShunt = ipyData.GetIsNeedShunt()
|
| | | if not bossID and not stoneNPCID:
|
| | | return
|
| | |
|
| | | gameFB = GameWorld.GetGameFB()
|
| | | gameWorldMgr = GameWorld.GetGameWorld()
|
| | | relatedType = ipyData.GetRelatedType()
|
| | | relatedID = ipyData.GetRelatedID()
|
| | | isActivityBoss = False
|
| | | isActivityBoss = False # 是否活动boss
|
| | | # 关联日常活动
|
| | | if relatedType == 1:
|
| | | actionKey = ShareDefine.Def_Notify_WorldKey_DailyActionState % relatedID
|
| | |
| | | rebornBossState = 0
|
| | | stoneNPCID = 0 # 活动线暂不刷墓碑
|
| | |
|
| | | isNeedShunt = NPCCommon.IsMapNeedBossShunt(mapID) and ipyData.GetIsNeedShunt()
|
| | | isNeedShunt = NPCCommon.IsMapNeedBossShunt(mapID) and isNeedShunt
|
| | |
|
| | | curNPC = None
|
| | | if npcRefresh.GetCount() > 0:
|
| | |
| | | '''分流boss是否需要处理
|
| | | 无伤血、仇恨、没人看到他、他没看到别人
|
| | | '''
|
| | | if curNPC.GetPlayerHurtList().GetHurtCount():
|
| | | #GameWorld.DebugLog("分流boss有伤血,不可以清除!npcID=%s" % curNPC.GetNPCID(), GameWorld.GetGameWorld().GetLineID())
|
| | | return True
|
| | | |
| | | if curNPC.GetAttentionPlayersCount() or curNPC.GetInSightObjCount():
|
| | | #GameWorld.DebugLog("分流boss有人看到,不可以清除!npcID=%s" % curNPC.GetNPCID(), GameWorld.GetGameWorld().GetLineID())
|
| | | return True
|
| | | |
| | | GameWorld.DebugLog("分流boss不需要处理了,可以清除!npcID=%s" % curNPC.GetNPCID(), GameWorld.GetGameWorld().GetLineID())
|
| | | return False
|
| | | # 策划暂时修改分流boss不同步死亡
|
| | | return True
|
| | | # if curNPC.GetPlayerHurtList().GetHurtCount():
|
| | | # #GameWorld.DebugLog("分流boss有伤血,不可以清除!npcID=%s" % curNPC.GetNPCID(), GameWorld.GetGameWorld().GetLineID())
|
| | | # return True
|
| | | # |
| | | # if curNPC.GetAttentionPlayersCount() or curNPC.GetInSightObjCount():
|
| | | # #GameWorld.DebugLog("分流boss有人看到,不可以清除!npcID=%s" % curNPC.GetNPCID(), GameWorld.GetGameWorld().GetLineID())
|
| | | # return True
|
| | | # |
| | | # GameWorld.DebugLog("分流boss不需要处理了,可以清除!npcID=%s" % curNPC.GetNPCID(), GameWorld.GetGameWorld().GetLineID())
|
| | | # return False
|
| | |
|
| | | #===================================================================================================
|
| | |
|
| | | def __DoRefreshWorldBossCrossServer(npcRefresh, tick):
|
| | | ## 跨服服务器刷boss
|
| | | |
| | | mapID = GameWorld.GetGameWorld().GetMapID() # dataMapID
|
| | | if mapID not in ChConfig.Def_CrossMapIDList:
|
| | | return
|
| | | |
| | | refreshMark = npcRefresh.GetRefreshMark()
|
| | | lineID = GameWorld.GetGameWorld().GetLineID()
|
| | | bossIpyData = IpyGameDataPY.GetIpyGameDataByCondition('BOSSInfo', {'RefreshMark':refreshMark, 'MapID':mapID}, isLogNone=False)
|
| | | if not bossIpyData:
|
| | | return
|
| | | |
| | | stoneNPCID = bossIpyData.GetStoneNPCID()
|
| | | bossID = bossIpyData.GetNPCID()
|
| | | if not bossID and not stoneNPCID:
|
| | | return
|
| | | |
| | | if mapID not in ChConfig.Def_CrossZoneTableName:
|
| | | return
|
| | | tableName = ChConfig.Def_CrossZoneTableName[mapID]
|
| | | realMapID = GameWorld.GetGameWorld().GetRealMapID()
|
| | | copyMapID = GameWorld.GetGameWorld().GetCopyMapID()
|
| | | zoneIpyData = IpyGameDataPY.GetIpyGameDataNotLog(tableName, realMapID, mapID, copyMapID)
|
| | | if not zoneIpyData:
|
| | | return
|
| | | zoneID = zoneIpyData.GetZoneID()
|
| | | |
| | | gameFB = GameWorld.GetGameFB()
|
| | | bosskey = ShareDefine.Def_Notify_WorldKey_GameWorldBossRebornCross % (zoneID, bossID)
|
| | | rebornBossState = GameWorld.GetGameWorld().GetGameWorldDictByKey(bosskey)
|
| | | curNPC = None
|
| | | if npcRefresh.GetCount() > 0:
|
| | | curNPC = npcRefresh.GetAt(0)
|
| | | |
| | | # 复活状态
|
| | | if rebornBossState:
|
| | | if curNPC:
|
| | | if curNPC.GetNPCID() == bossID:
|
| | | return
|
| | | #去掉非bossNPC
|
| | | NPCCommon.SetDeadEx(curNPC)
|
| | | |
| | | # 死亡状态
|
| | | else:
|
| | | if curNPC:
|
| | | if curNPC.GetNPCID() == stoneNPCID:
|
| | | return
|
| | | #去掉非墓碑NPC
|
| | | NPCCommon.SetDeadEx(curNPC)
|
| | | |
| | | # 延迟刷墓碑
|
| | | bossDeadTick = gameFB.GetGameFBDictByKey(ChConfig.Map_NPC_WorldBossDeadTick % bossID)
|
| | | bossStoneDelayTime = IpyGameDataPY.GetFuncCfg('BossStoneDelayTime')
|
| | | if tick - bossDeadTick <= bossStoneDelayTime:
|
| | | return
|
| | | gameFB.SetGameFBDict(ChConfig.Map_NPC_WorldBossDeadTick % bossID, tick)
|
| | | |
| | | rebornNPCID = bossID if rebornBossState else stoneNPCID
|
| | | if not rebornNPCID:
|
| | | return
|
| | | rebornTickKey = ChConfig.Map_NPC_WorldBossLastReBornTick % rebornNPCID
|
| | | lastRebornTick = gameFB.GetGameFBDictByKey(rebornTickKey)
|
| | | if tick - lastRebornTick <= 50 * 1000:
|
| | | GameWorld.DebugLog("CrossBossRefresh mapID=%s,realMapID=%s,copyMapID=%s,refreshMark=%s,rebornNPCID=%s,tick=%s,lastRebornTick=%s 不重复刷新!" |
| | | % (mapID, realMapID, copyMapID, refreshMark, rebornNPCID, tick, lastRebornTick))
|
| | | return
|
| | | |
| | | npcRefresh.Refresh(rebornNPCID, ChConfig.Def_SuperBossAngryCount, 1, False)
|
| | | #初始化NPC
|
| | | __InitNewBornNPC(npcRefresh, tick)
|
| | | gameFB.SetGameFBDict(rebornTickKey, tick)
|
| | | |
| | | GameWorld.DebugLog("CrossBossRefresh mapID=%s,realMapID=%s,copyMapID=%s,refreshMark=%s,rebornNPCID=%s,OK!" |
| | | % (mapID, realMapID, copyMapID, refreshMark, rebornNPCID), lineID)
|
| | | return
|
| | |
|
| | | ################################ 通用刷怪逻辑 ####################################
|
| | | def GetNPCRefreshCountList(refreshID):
|
| | | ## 获取刷怪标识点规则ID需要刷新的NPC个数信息;
|