From 304ce81e9057b09052faa981bd1ae8b529ba4685 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期六, 22 六月 2019 16:28:40 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.0.87:10010/r/SnxxServerCode

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SealDemon.py |   64 +++++++++++++++++---------------
 1 files changed, 34 insertions(+), 30 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SealDemon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SealDemon.py
index db0aae0..3228329 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SealDemon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SealDemon.py
@@ -69,6 +69,12 @@
         maxCnt = FBCommon.GetEnterFBMaxCnt(curPlayer, mapID)
         if enterCnt + 2 > maxCnt:
             return False
+    if lineID in newbielineList:
+        hasEnter = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineID, False,
+                                               [ChConfig.Def_FBMapID_SealDemon])
+        if hasEnter:
+            GameWorld.DebugLog("    已进入过该新手线路 %s" % lineID)
+            return False
     return True
 
 
@@ -104,12 +110,7 @@
     if mapID == ChConfig.Def_FBMapID_SealDemonEx:
         return
     lineID = GameWorld.GetGameWorld().GetPropertyID() - 1
-    bossID = CurFBLineBOSSID(lineID)
-    key = ShareDefine.Def_Notify_WorldKey_GameWorldBossReborn % bossID
-    GameWorld.GetGameWorld().SetGameWorldDict(key, 1)
-    GameWorld.DebugLog('    刷BOSSbossID=%s' % bossID)
-    
-    
+
     refreshIDList = FBCommon.GetFBLineRefreshNPC(ChConfig.Def_FBMapID_SealDemon, lineID)
     if refreshIDList:
         for refreshID in refreshIDList:
@@ -130,11 +131,11 @@
         FBCommon.SetFBPropertyMark(lineID)
     else:
         lineID = GameWorld.GetGameWorld().GetPropertyID() - 1    
-    
+    gameFB = GameWorld.GetGameFB()
     playerCnt = GameWorld.GetGameWorld().GetMapCopyPlayerManager().GetPlayerCount()
     GameWorld.DebugLog("DoEnterFB...playerCnt=%s,lineID=%s" % (playerCnt, lineID), playerID)
-    
-    if lineID < 0:
+    overTick = gameFB.GetGameFBDictByKey(FBDict_IsOver)
+    if lineID < 0 or overTick:
         PlayerControl.PlayerLeaveFB(curPlayer)
         return
     hadDelTicket = FBCommon.GetHadDelTicket(curPlayer)
@@ -159,7 +160,7 @@
                 return
         UpdateHurtInfo(curPlayer, 0, True)
      
-    gameFB = GameWorld.GetGameFB()
+    
     # 上鼓舞buff
     encourageLV = gameFB.GetPlayerGameFBDictByKey(playerID, FBPlayerDict_EncourageLV)
     if encourageLV > 0:
@@ -451,6 +452,9 @@
 def GiveSealDemonAward(curPlayer, lineID, rank, isMail=False, isClientSend=False, dropItemMapInfo=[]):
     newbielineList = IpyGameDataPY.GetFuncEvalCfg('SealDemonNewbieLine')
     isNewbieLine = lineID in newbielineList
+    sealDemonIpyData = GetSealDemonIpyData(lineID)
+    if not sealDemonIpyData:
+        return {}
     prizeMultiple = 1
     addCnt = 1
     if isNewbieLine:
@@ -461,17 +465,19 @@
     elif isClientSend:
         return {}
     else:
-        prizeMultiple = 2 if rank == 1 else 1 # 第一名执行双倍掉落奖励,其他一次
+        #prizeMultiple = 2 if rank == 1 else 1 # 第一名执行双倍掉落奖励,其他一次
+        prizeMultiple = 1 # 去除第一名双倍逻辑,改为放在额外奖励产出
         isDouble = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FMTDouble)
         if isDouble:
             addCnt = 2
     equipList = []
     prizeItemDict ={}
     bossID = CurFBLineBOSSID(lineID)
+    extraItemList = sealDemonIpyData.GetOwnerAwardItemEx() * addCnt if rank == 1 else []
     #for _ in xrange(addCnt):
     jsonItemList, totalExp, totalMoney = NPCCommon.GiveKillNPCDropPrize(curPlayer, ChConfig.Def_FBMapID_SealDemon, {bossID:addCnt}, 
-                                                                        mailTypeKey="SealDemonMail", isMail=isMail, prizeMultiple=prizeMultiple, 
-                                                                        dropItemMapInfo=dropItemMapInfo)
+                                                                        mailTypeKey="SealDemonMail", isMail=isMail, extraItemList=extraItemList, prizeMultiple=prizeMultiple, 
+                                                                        dropItemMapInfo=dropItemMapInfo,isVirtualDrop=isClientSend)
     for jsonItem in jsonItemList:
         if 'UserData' in jsonItem:
             equipList.append(jsonItem)
@@ -570,25 +576,16 @@
     GameWorld.DebugLog('封魔坛 客户端副本发送结束mapID=%s,lineID=%s,dataList=%s' % (mapID,lineID,dataList), curPlayer.GetPlayerID())
     rank, hurt = dataList[:2]
     prizeItemList = GiveSealDemonAward(curPlayer, lineID, rank, False, True, [curPlayer.GetPosX(), curPlayer.GetPosY(), True])
-    if rank == 1:
+    if rank == 1 and prizeItemList:
         bossID = CurFBLineBOSSID(lineID)
         NPCCommon.GameServer_KillGameWorldBoss(bossID, curPlayer.GetName(), hurt, False)
-    
-    if not prizeItemList:
-        leaveTick = FBCommon.GetFBLineStepTime(mapID, lineID) * 1000
-        GameWorld.Log("没有奖励,直接通知前端结算!mapID=%s,lineID=%s" % (mapID, lineID), curPlayer.GetPlayerID())
-        curPlayer.Sync_TimeTick(IPY_GameWorld.tttLeaveMap, 0, leaveTick, True)
-        overDict = {FBCommon.Over_rank:rank, FBCommon.Over_itemInfo:prizeItemList}
-        FBCommon.NotifyFBOver(curPlayer, ChConfig.Def_FBMapID_SealDemon, lineID, 1, overDict)
-        return
-    
-    gameFB = GameWorld.GetGameFB()
-    tick = GameWorld.GetGameWorld().GetTick()
-    gameFB.SetGameFBDict(FBDict_IsOver, tick)
-    gameFB.SetPlayerGameFBDict(curPlayer.GetPlayerID(), FBPlayerDict_Rank, rank)
-    curPlayer.Sync_TimeTick(ChConfig.tttPickupItem, 0, ChConfig.Def_FBPickupItemTime, True)
-    return
 
+    #GameWorld.Log("通知前端结算!mapID=%s,lineID=%s" % (mapID, lineID), curPlayer.GetPlayerID())
+    overDict = {FBCommon.Over_rank:rank, FBCommon.Over_itemInfo:prizeItemList}
+    FBCommon.NotifyFBOver(curPlayer, mapID, lineID, 1, overDict)
+    PlayerControl.SetCustomMap(curPlayer, 0, 0)
+    return
+    
 
 def GetBossRemainHPPer(copyMapID, funcLineID, tick):
     bossID = CurFBLineBOSSID(funcLineID)
@@ -609,6 +606,14 @@
         return 0
     bossID = ipyData.GetNPCID()
     return bossID
+
+def GetSealDemonIpyData(lineID= -1):
+    #该分线刷的BOSSID
+    if lineID == -1:
+        lineID = GameWorld.GetGameWorld().GetPropertyID() - 1
+    if lineID == -1:
+        return
+    return IpyGameDataPY.GetIpyGameDataByCondition('SealDemon', {'LineID':lineID})
 
 ##玩家死亡.
 # @param curPlayer:死亡的玩家 
@@ -642,4 +647,3 @@
     packData.OldDouble = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FMTOldDouble)
     NetPackCommon.SendFakePack(curPlayer, packData)
     return
-

--
Gitblit v1.8.0