From fd929faf55ab49f558ee2f7b5ef9adcba0de82c6 Mon Sep 17 00:00:00 2001 From: xdh <xiefantasy@qq.com> Date: 星期四, 30 八月 2018 19:26:25 +0800 Subject: [PATCH] fix:3101 【后端】仙盟贡献物品效果 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCustomRefresh.py | 77 +++++++++++++++++++++++++++++++++++--- 1 files changed, 70 insertions(+), 7 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 92db14a..ab13355 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCustomRefresh.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCustomRefresh.py @@ -17,6 +17,7 @@ import ShareDefine import ReadChConfig import GameLogic_SealDemon +import PlayerControl import IPY_GameWorld import IpyGameDataPY import GameWorld @@ -337,6 +338,18 @@ def NPCRefresh_100(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick) +def ResetActivityBossRefreshCount(): + ## 重置活动boss刷怪个数 + gameFB = GameWorld.GetGameFB() + gameNPC = GameWorld.GetNPCManager() + 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) + return + ## 世界boss刷怪 # @param npcRefresh 刷新实例 # @param tick 当前时间 @@ -348,7 +361,8 @@ 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 @@ -358,14 +372,48 @@ 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() - bosskey = ShareDefine.Def_Notify_WorldKey_GameWorldBossReborn % bossID - rebornBossState = gameWorldMgr.GetGameWorldDictByKey(bosskey) - isNeedShunt = NPCCommon.IsMapNeedBossShunt(mapID) + isActivityBoss = False + # 关联日常活动 + if relatedType == 1: + actionKey = ShareDefine.Def_Notify_WorldKey_DailyActionState % relatedID + rebornBossState = 1 if gameWorldMgr.GetGameWorldDictByKey(actionKey) else 0 + isActivityBoss = True + # 关联运营活动,待扩展 + elif relatedType == 2: + pass + else: + bosskey = ShareDefine.Def_Notify_WorldKey_GameWorldBossReborn % bossID + rebornBossState = gameWorldMgr.GetGameWorldDictByKey(bosskey) + + rebornLineID = 0 + activityLineID = 0 # 活动线, 默认1线 + activityMapLineDict = IpyGameDataPY.GetFuncEvalCfg("MapLine", 2, {}) + if mapID in activityMapLineDict: + activityLineID = max(0, activityMapLineDict[mapID] - 1) + + # 活动boss只在活动线路刷 + if isActivityBoss: + activityBossRebornCount = gameFB.GetGameFBDictByKey(ChConfig.Map_NPC_ActivityBossRebornCount % refreshMark) + rebornLineID = activityLineID # 活动boss只刷在活动线 + # 不是活动线 + if rebornBossState and lineID != rebornLineID: + rebornBossState = 0 + + # 非活动boss活动线不刷, 1线除外 + else: + if activityLineID and lineID == activityLineID: + rebornBossState = 0 + stoneNPCID = 0 # 活动线暂不刷墓碑 + + isNeedShunt = NPCCommon.IsMapNeedBossShunt(mapID) and isNeedShunt curNPC = None if npcRefresh.GetCount() > 0: @@ -379,8 +427,13 @@ #去掉非bossNPC NPCCommon.SetDeadEx(curNPC) - # 非一线 且 不需要分流的地图 且 不是封魔坛 不允许复活 - if lineID != 0 and not isNeedShunt and mapID != ChConfig.Def_FBMapID_SealDemon: + # 非复活线 且 不需要分流的地图 且 不是封魔坛 不允许复活 + if lineID != rebornLineID and not isNeedShunt and mapID != ChConfig.Def_FBMapID_SealDemon: + return + + if isActivityBoss and activityBossRebornCount > 0: + #GameWorld.DebugLog("活动线已经刷过不再刷活动boss: lineID=%s,rebornLineID=%s,refreshMark=%s,bossID=%s,activityBossRebornCount=%s" + # % (lineID, rebornLineID, refreshMark, bossID, activityBossRebornCount)) return # 死亡状态 @@ -391,6 +444,11 @@ return if curNPC.GetNPCID() == stoneNPCID: return + # 活动的boss + if curNPC.GetNPCID() == bossID and isActivityBoss: + GameWorld.Log("活动boss,活动结束,系统设置boss死亡!bossID=%s" % bossID) + PlayerControl.FBNotify("FairyGrabBossNoDead", [bossID]) + #去掉非墓碑NPC NPCCommon.SetDeadEx(curNPC) @@ -415,7 +473,12 @@ #初始化NPC __InitNewBornNPC(npcRefresh, tick) gameFB.SetGameFBDict(key, tick) - GameWorld.DebugLog("BossRefresh mapID=%s,refreshMark=%s,rebornNPCID=%s,isNeedShunt=%s,OK!" % (mapID, refreshMark, rebornNPCID, isNeedShunt), lineID) + + if isActivityBoss and rebornBossState: + gameFB.SetGameFBDict(ChConfig.Map_NPC_ActivityBossRebornCount % refreshMark, activityBossRebornCount + 1) + + GameWorld.DebugLog("BossRefresh mapID=%s,rebornLineID=%s,refreshMark=%s,rebornNPCID=%s,isNeedShunt=%s,OK!" + % (mapID, rebornLineID, refreshMark, rebornNPCID, isNeedShunt), lineID) return def IsShuntBossNeedProcess(curNPC): -- Gitblit v1.8.0