From ad66d3a18003f0451e5620c4cc39bd6dfa63d66b Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期六, 14 三月 2020 16:57:51 +0800 Subject: [PATCH] 8401 【后端】BOSS复活修改(活动boss刷新支持) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCustomRefresh.py | 71 +++++++++++++++-------------------- 1 files changed, 31 insertions(+), 40 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCustomRefresh.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCustomRefresh.py index 2a17501..31f12b4 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCustomRefresh.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCustomRefresh.py @@ -22,6 +22,7 @@ import PlayerControl import IPY_GameWorld import IpyGameDataPY +import PyGameData import GameWorld import FBCommon import FBLogic @@ -315,31 +316,6 @@ def NPCRefresh_219(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick) def NPCRefresh_220(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick) - -def ResetActivityBossRefreshCount(): - ## 重置活动boss刷怪个数 - - # 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) - if not gameFB: - return - - 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刷怪点刷怪个数: activityLineIndex=%s,refreshMark=%s" % (activityLineIndex, refreshMark)) - return - ## 世界boss刷怪 # @param npcRefresh 刷新实例 # @param tick 当前时间 @@ -355,7 +331,7 @@ mapID = GameWorld.GetMap().GetMapID() refreshMark = npcRefresh.GetRefreshMark() lineID = GameWorld.GetGameWorld().GetLineID() - relatedType, relatedID = 0, 0 + relatedType, relatedID = 0, "" isNeedShunt = 0 if mapID == ChConfig.Def_FBMapID_SealDemon: bossID = GameLogic_SealDemon.CurFBLineBOSSID() @@ -392,15 +368,21 @@ return gameFB = GameWorld.GetGameFB() gameWorldMgr = GameWorld.GetGameWorld() - isActivityBoss = False # 是否活动boss + forceReborn = False # 强制重生 + actBossRebornSign = 0 + mapActBossRebornSign = 0 # 关联日常活动 if relatedType == 1: + relatedID = int(relatedID) actionKey = ShareDefine.Def_Notify_WorldKey_DailyActionState % relatedID rebornBossState = 1 if gameWorldMgr.GetGameWorldDictByKey(actionKey) else 0 - isActivityBoss = True + # 关联运营活动,待扩展 elif relatedType == 2: - pass + operationActionInfo = PyGameData.g_operationActionDict.get(relatedID, {}) + operationActionState = operationActionInfo.get(ShareDefine.ActKey_State, 0) + rebornBossState = 1 if operationActionState else 0 + else: bosskey = ShareDefine.Def_Notify_WorldKey_GameWorldBossReborn % bossID rebornBossState = gameWorldMgr.GetGameWorldDictByKey(bosskey) @@ -410,13 +392,19 @@ if mapID in activityMapLineDict: activityLineID = max(0, activityMapLineDict[mapID] - 1) - # 活动boss只在活动线路刷 - if isActivityBoss: - activityBossRebornCount = gameFB.GetGameFBDictByKey(ChConfig.Map_NPC_ActivityBossRebornCount % refreshMark) + # 关联活动boss + if relatedType: rebornLineID = activityLineID # 活动boss只刷在活动线 # 不是活动线 if rebornBossState and lineID != rebornLineID: rebornBossState = 0 + + # 关联活动boss只要复活标记与上次不同,则强制重生 + actBossRebornSign = gameWorldMgr.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ActionBossRebornSign % relatedID) + mapActBossRebornSign = gameFB.GetGameFBDictByKey(ChConfig.Map_NPC_ActBossLastRebornSign % refreshMark) + rebornBossState = rebornBossState and actBossRebornSign + if rebornBossState and actBossRebornSign != mapActBossRebornSign: + forceReborn = True # 非活动boss活动线不刷, 1线除外 else: @@ -433,7 +421,7 @@ # 复活状态 if rebornBossState: if curNPC: - if curNPC.GetNPCID() == bossID: + if not forceReborn and curNPC.GetNPCID() == bossID: return #去掉非bossNPC NPCCommon.SetDeadEx(curNPC) @@ -442,9 +430,9 @@ if lineID != rebornLineID and not isNeedShunt and mapID not in [ChConfig.Def_FBMapID_SealDemon, ChConfig.Def_FBMapID_ZhuXianBoss]: return - if isActivityBoss and activityBossRebornCount > 0: - #GameWorld.DebugLog("活动线已经刷过不再刷活动boss: lineID=%s,rebornLineID=%s,refreshMark=%s,bossID=%s,activityBossRebornCount=%s" - # % (lineID, rebornLineID, refreshMark, bossID, activityBossRebornCount)) + if mapActBossRebornSign and actBossRebornSign == mapActBossRebornSign: + #GameWorld.DebugLog("活动线已经刷过不再刷活动boss: lineID=%s,rebornLineID=%s,refreshMark=%s,bossID=%s,actBossRebornSign=%s" + # % (lineID, rebornLineID, refreshMark, bossID, actBossRebornSign)) return # 死亡状态 @@ -456,9 +444,12 @@ if curNPC.GetNPCID() == stoneNPCID: return # 活动的boss - if curNPC.GetNPCID() == bossID and isActivityBoss: + if curNPC.GetNPCID() == bossID and relatedType: GameWorld.Log("活动boss,活动结束,系统设置boss死亡!bossID=%s" % bossID) - PlayerControl.FBNotify("FairyGrabBossNoDead", [bossID]) + if relatedID == ShareDefine.DailyActionID_FamilyRobBoss: + PlayerControl.FBNotify("FairyGrabBossNoDead", [bossID]) + elif relatedID == ShareDefine.OperationActionName_BossReborn: + pass #去掉非墓碑NPC NPCCommon.SetDeadEx(curNPC) @@ -485,8 +476,8 @@ __InitNewBornNPC(npcRefresh, tick) gameFB.SetGameFBDict(key, tick) - if isActivityBoss and rebornBossState: - gameFB.SetGameFBDict(ChConfig.Map_NPC_ActivityBossRebornCount % refreshMark, activityBossRebornCount + 1) + if actBossRebornSign and rebornBossState: + gameFB.SetGameFBDict(ChConfig.Map_NPC_ActBossLastRebornSign % refreshMark, actBossRebornSign) GameWorld.DebugLog("BossRefresh mapID=%s,rebornLineID=%s,refreshMark=%s,rebornNPCID=%s,isNeedShunt=%s,OK!" % (mapID, rebornLineID, refreshMark, rebornNPCID, isNeedShunt), lineID) -- Gitblit v1.8.0