From 597f6350370aeea090967ac02f81e85d0385db22 Mon Sep 17 00:00:00 2001 From: hch <305670599@qq.com> Date: 星期六, 01 九月 2018 18:12:14 +0800 Subject: [PATCH] 3192 合服数据后台发送 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCustomRefresh.py | 87 ++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 80 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..d4d422f 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,28 @@ def NPCRefresh_100(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) + + 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 当前时间 @@ -348,7 +371,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 +382,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 +437,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 +454,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 +483,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