From ba674caa1427c6dbe0246b27f85262a44fbb7a2b Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期四, 13 六月 2019 19:23:41 +0800
Subject: [PATCH] 860312 副本地图上线切换才加无敌buff

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py |  145 ++++++++++++++++++++++++++++++++++--------------
 1 files changed, 103 insertions(+), 42 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py
index d2a1be6..4ff972f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py
@@ -30,6 +30,7 @@
 import EventReport
 import PlayerFamily
 import PlayerActivity
+import ItemControler
 import PlayerSuccess
 import GameFuncComm
 import PyGameData
@@ -95,6 +96,8 @@
 Over_leaderID = 'leaderID' #渡劫玩家ID
 Over_xianyuanCoin = 'xianyuanCoin' #获得仙缘币信息 [获得仙缘币数, 没有获得的原因] 原因: 1-达到助战次数上限,2-达到每日获得仙缘币上限
 Over_helpPlayer = 'helpPlayer' #助战玩家信息 {"玩家ID":{玩家信息key:value, ...}, ...}
+Over_ownerID = 'ownerID' #归属玩家ID
+Over_ownerName = 'ownerName' #归属玩家名
 
 #副本行为
 (
@@ -162,6 +165,10 @@
 def CheckCanEnterFBComm(curPlayer, mapID, lineID, fbIpyData, fbLineIpyData, reqEnterCnt=1, isNotify=True, isTeamAsk=False):
     # 可否进入副本通用检查, 扫荡通用
     playerID = curPlayer.GetPlayerID()
+    
+    if not FBLogic.OnNeedCheckCanEnterFBComm(curPlayer, mapID, lineID):
+        return ShareDefine.EntFBAskRet_OK
+    
     # 总表通用检查
     if fbIpyData:
         #开服天开放检查
@@ -201,15 +208,6 @@
             if isNotify:
                 PlayerControl.NotifyCode(curPlayer, "FbLV", [mapID])
             return ShareDefine.EntFBAskRet_LVLimit
-        
-        #职业阶判断
-        jobRankLimit = fbLineIpyData.GetJobRankLimit()
-        if jobRankLimit and PlayerControl.GetJobRank(curPlayer) < jobRankLimit:
-            GameWorld.Log("玩家职业阶级不足, 无法进入副本!mapID=%s,lineID=%s,jobRank=%s < jobRankLimit=%s" 
-                          % (mapID, lineID, PlayerControl.GetJobRank(curPlayer), jobRankLimit), playerID)
-            if isNotify:
-                PlayerControl.NotifyCode(curPlayer, "SingleEnterJob", [mapID])
-            return ShareDefine.EntFBAskRet_JobRankLimit
         
         #门票判断
         if not GetFBEnterTicket(curPlayer, mapID, lineID, fbLineIpyData, reqEnterCnt, isTeamAsk)[0]:
@@ -448,18 +446,18 @@
 #  @return
 def SetFBPropertyMark(propertyMark, setPlayer=None):
     GameWorld.GetGameFB().SetGameFBDict(ChConfig.Map_FBDict_PropertyMark, propertyMark + 1) # 存储时+1才能判断是否存储过
-    if setPlayer != None:
-        PlayerControl.SetFBFuncLineID(setPlayer, propertyMark)
-        GameWorld.DebugLog("SetFBPropertyMark 设置玩家副本功能线路ID: %s" % propertyMark, setPlayer.GetPlayerID())
-        return
-    
-    playerManager = GameWorld.GetMapCopyPlayerManager()
-    for index in xrange(playerManager.GetPlayerCount()):
-        curPlayer = playerManager.GetPlayerByIndex(index)
-        if not curPlayer.GetPlayerID():
-            continue
-        PlayerControl.SetFBFuncLineID(curPlayer, propertyMark)
-        GameWorld.DebugLog("SetFBPropertyMark 广播玩家副本功能线路ID: %s" % propertyMark, curPlayer.GetPlayerID())
+#    if setPlayer != None:
+#        PlayerControl.SetFBFuncLineID(setPlayer, propertyMark)
+#        GameWorld.DebugLog("SetFBPropertyMark 设置玩家副本功能线路ID: %s" % propertyMark, setPlayer.GetPlayerID())
+#        return
+#    
+#    playerManager = GameWorld.GetMapCopyPlayerManager()
+#    for index in xrange(playerManager.GetPlayerCount()):
+#        curPlayer = playerManager.GetPlayerByIndex(index)
+#        if not curPlayer.GetPlayerID():
+#            continue
+#        PlayerControl.SetFBFuncLineID(curPlayer, propertyMark)
+#        GameWorld.DebugLog("SetFBPropertyMark 广播玩家副本功能线路ID: %s" % propertyMark, curPlayer.GetPlayerID())
     return
 
 ## 是否已经扣除入场券/进入次数等
@@ -473,6 +471,15 @@
 #  @return
 def SetHadDelTicket(curPlayer, delSign=1):
     GameWorld.GetGameFB().SetPlayerGameFBDict(curPlayer.GetID(), ChConfig.FBPlayerDict_IsDelTicket, delSign)
+    return
+
+## 自定义场景阶段
+def GetCustomMapStep(curPlayer, mapID, lineID):
+    return curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_CustomMapStep % (mapID, lineID))
+def SetCustomMapStep(curPlayer, mapID, lineID, step):
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_CustomMapStep % (mapID, lineID), step)
+    if step == ChConfig.CustomMapStep_Over:
+        PlayerControl.SetCustomMap(curPlayer, 0, 0)
     return
 
 def GetCurSingleFBPlayer():
@@ -601,7 +608,7 @@
                 continue
             itemDict['ItemID'] = itemInfo.GetItemTypeID()
             itemDict['Count'] = itemInfo.GetCount()
-            itemDict['IsAuctionItem'] = 0 if itemInfo.GetIsBind() else 1
+            itemDict['IsAuctionItem'] = ItemControler.GetIsAuctionItem(itemInfo)
             #itemDict['IsSuite'] = int(itemInfo.GetIsSuite())
             itemDict['UserData'] = itemInfo.GetUserData()
         jsonItemList.append(itemDict)
@@ -1020,6 +1027,35 @@
     #可以进入
     return True
 #---------------------------------------------------------------------
+def Sync_FBNPC(mapID=0, npcIDList=[], curPlayer=None):
+    ## 同步当前副本NPC给副本中的所有玩家
+    if not mapID:
+        mapID = GameWorld.GetMap().GetMapID()
+        mapID = GetRecordMapID(mapID)
+    npcCntDict = {}
+    gameNPCManager = GameWorld.GetNPCManager()
+    for index in xrange(gameNPCManager.GetNPCCount()):
+        curNPC = gameNPCManager.GetNPCByIndex(index)
+        npcID = curNPC.GetNPCID()
+        if not npcID:
+            continue
+        if curNPC.GetGameNPCObjType() == IPY_GameWorld.gnotPet:
+            continue
+        if npcIDList and npcID not in npcIDList:
+            continue
+        npcCntDict[npcID] = npcCntDict.get(npcID, 0) + 1
+        
+    if curPlayer:
+        NPCCommon.SyncNPCCntInfo(curPlayer, mapID, npcCntDict)
+    else:
+        playerManager = GameWorld.GetMapCopyPlayerManager()
+        for i in xrange(playerManager.GetPlayerCount()):
+            curPlayer = playerManager.GetPlayerByIndex(i)
+            if curPlayer.GetID() == 0:
+                continue
+            NPCCommon.SyncNPCCntInfo(curPlayer, mapID, npcCntDict)
+    return npcCntDict
+
 ##获得地图上的NPC列表
 # @param 无参数
 # @return 返回值, NPC实例列表[curNPC,curNPC,,,,,]
@@ -1915,7 +1951,7 @@
 #  @param tick 当前时间
 #  @param isMaxlv 是否直接满级
 #  @return None
-def FbEncourageBuff(curPlayer, key, encourageType, tick, isMaxlv=False):
+def FbEncourageBuff(curPlayer, key, encourageType, tick, ownerID=0):
     #GameWorld.Log("FbEncourageBuff moneyType=%s" % (moneyType))
     curMapID = curPlayer.GetMapID()
     curMapID = GetRecordMapID(curMapID)
@@ -1924,10 +1960,10 @@
         return
     maxCnt = ipyData.GetInspireMaxLV()
     gameFB = GameWorld.GetGameFB()
-    curPlayerID = curPlayer.GetID()
-    encourageLV = gameFB.GetPlayerGameFBDictByKey(curPlayerID, key)
+    ownerID = ownerID or curPlayer.GetID()
+    encourageLV = gameFB.GetPlayerGameFBDictByKey(ownerID, key)
     encourageCntKey = 'FbEncourageCnt_%s' % encourageType
-    encourageCnt = gameFB.GetPlayerGameFBDictByKey(curPlayerID, encourageCntKey)
+    encourageCnt = gameFB.GetPlayerGameFBDictByKey(ownerID, encourageCntKey)
     maxLV = IpyGameDataPY.GetFuncEvalCfg('FBEncourageBuff', 2, {}).get(curMapID, 0)
     if encourageLV >= maxLV:
         PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_93643")
@@ -1962,29 +1998,47 @@
         return
     
     buffType = SkillCommon.GetBuffType(skillBuff)
-    BuffSkill.DoAddBuff(curPlayer, buffType, skillBuff, tick)
-    gameFB.SetPlayerGameFBDict(curPlayerID, key, encourageLV+1)
-    gameFB.SetPlayerGameFBDict(curPlayerID, encourageCntKey, encourageCnt+1)
+    
+    gameFB.SetPlayerGameFBDict(ownerID, key, encourageLV+1)
+    gameFB.SetPlayerGameFBDict(ownerID, encourageCntKey, encourageCnt+1)
     #GameWorld.Log("FbEncourageBuff encourage nextLV=%s success" % encourageLV)
     addHurtNum = IpyGameDataPY.GetFuncEvalCfg('FBEncourageBuff', 3, {}).get(curMapID, 0)
-    PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_628920", [(encourageLV+1)*addHurtNum])
-    SendFBEncourageInfo(curPlayer, encourageLV+1)
-    #成就
-    PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FBEncourage, 1, [curMapID])
-    EventShell.EventRespons_FBEncourage(curPlayer, curMapID)
-    return
+    if curMapID == ChConfig.Def_FBMapID_AllFamilyBoss:
+        #给副本里所有盟成员提示
+        playerManager = GameWorld.GetMapCopyPlayerManager()
+        for index in xrange(playerManager.GetPlayerCount()):
+            player = playerManager.GetPlayerByIndex(index)
+            if not player:
+                continue
+            if player.GetFamilyID() != ownerID:
+                continue
+            BuffSkill.DoAddBuff(player, buffType, skillBuff, tick)
+            PlayerControl.NotifyCode(player, "AllianceBossText2", [curPlayer.GetName(), encourageLV+1])
+            SendFBEncourageInfo(player, encourageLV+1, ownerID)
+            if player.GetID() == curPlayer.GetID():
+                PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FBEncourage, 1, [curMapID])
+                EventShell.EventRespons_FBEncourage(curPlayer, curMapID)
+            
+    else:
+        BuffSkill.DoAddBuff(curPlayer, buffType, skillBuff, tick)
+        PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_628920", [(encourageLV+1)*addHurtNum])
+        SendFBEncourageInfo(curPlayer, encourageLV+1, ownerID)
+        #成就
+        PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FBEncourage, 1, [curMapID])
+        EventShell.EventRespons_FBEncourage(curPlayer, curMapID)
+    return True
 
 ## 添加副本鼓舞buff,一般用于玩家掉线后,在规定时间内重新上线回到副本时重新上buff
 #  @param curPlayer 玩家
 #  @param key 副本玩家字典key
 #  @param tick 当前时间
 #  @return None
-def AddFbEncourageBuff(curPlayer, key, tick):
+def AddFbEncourageBuff(curPlayer, key, tick, ownerID=0):
     curPlayerID = curPlayer.GetID()
     GameWorld.Log("AddFbEncourageBuff() curPlayerID=%s" % curPlayerID)
-  
+    ownerID = ownerID or curPlayer.GetID()
     gameFB = GameWorld.GetGameFB()
-    encourageLV = gameFB.GetPlayerGameFBDictByKey(curPlayerID, key)
+    encourageLV = gameFB.GetPlayerGameFBDictByKey(ownerID, key)
     if not encourageLV:
         return
     mapID = GameWorld.GetMap().GetMapID()
@@ -1999,7 +2053,7 @@
     buffType = SkillCommon.GetBuffType(skillBuff)
     BuffSkill.DoAddBuff(curPlayer, buffType, skillBuff, tick)
     
-    SendFBEncourageInfo(curPlayer, encourageLV)
+    SendFBEncourageInfo(curPlayer, encourageLV, ownerID)
     return
 
 ## 清除鼓舞buff
@@ -2019,7 +2073,7 @@
 ## 发送副本鼓舞信息
 #  @param curPlayer 玩家
 #  @return None
-def SendFBEncourageInfo(curPlayer, lv):
+def SendFBEncourageInfo(curPlayer, lv, ownerID=0):
     #//A3 0A 副本鼓舞信息通知 #tagMCFBEncourageInfo
     curMapID = curPlayer.GetMapID()
     curMapID = GetRecordMapID(curMapID)
@@ -2031,12 +2085,12 @@
     encourageInfo.InfoList = []
     encourageCntKey = 'FbEncourageCnt_%s'
     gameFB = GameWorld.GetGameFB()
-    curPlayerID = curPlayer.GetID()
+    ownerID = ownerID or curPlayer.GetID()
     for ipyData in ipyDataList:
         inspireType = ipyData.GetInspireType()
         packData = ChPyNetSendPack.tagMCFBEncourageCnt()
         packData.MoneyType = inspireType
-        packData.EncourageCnt = gameFB.GetPlayerGameFBDictByKey(curPlayerID, encourageCntKey % inspireType)
+        packData.EncourageCnt = gameFB.GetPlayerGameFBDictByKey(ownerID, encourageCntKey % inspireType)
         encourageInfo.InfoList.append(packData)
     encourageInfo.Cnt = len(encourageInfo.InfoList)
     NetPackCommon.SendFakePack(curPlayer, encourageInfo)
@@ -2390,4 +2444,11 @@
         fbHelpFunc(curPlayer, tick)
     return
 
+def GetCrossDynamicLineMapZoneID():
+    ## 获取跨服动态线路地图本线路跨服分区
+    return GameWorld.GetGameWorld().GetPropertyID() / 10000
+
+def GetCrossDynamicLineMapFuncLineID():
+    ## 获取跨服动态线路地图本线路功能线路ID
+    return GameWorld.GetGameWorld().GetPropertyID() % 10000 / 10
 

--
Gitblit v1.8.0