From 57d60ef7648868c76189d3a127dc3e5f0800f6f3 Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期四, 27 六月 2019 14:27:31 +0800
Subject: [PATCH] 7589 【2.0.100】【后端】资源找回优化

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossDemonKing.py |   84 +++++++++++++++++++++++++++---------------
 1 files changed, 54 insertions(+), 30 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossDemonKing.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossDemonKing.py
index abc8c73..2f6c81b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossDemonKing.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossDemonKing.py
@@ -25,6 +25,7 @@
 import PlayerControl
 import ShareDefine
 import PyGameData
+import NPCCommon
 import ChConfig
 import ChItem
 
@@ -273,31 +274,42 @@
     PlayerFairyDomain.SetFairyDomainFBEventState(curPlayer, mapID, lineID, PlayerFairyDomain.FDEventState_Visiting)
     return
 
-## 客户端发送刷新自定义副本奖励
-def OnRefreshCustomFBPrize(curPlayer, mapID, lineID):
-    visitCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainVisitCnt)
-    fakeImmortalCount = IpyGameDataPY.GetFuncCfg("FakeImmortalCount", 1)
-    if visitCount > fakeImmortalCount:
-        GameWorld.DebugLog("当前寻访次数不能获取自定义副本奖励!visitCount=%s" % visitCount)
-        return []
-    if not PlayerFairyDomain.SetFairyDomainFBEventState(curPlayer, mapID, lineID, PlayerFairyDomain.FDEventState_Visiting):
-        GameWorld.DebugLog("寻访状态异常不能获取自定义副本奖励!")
-        return []
-    ipyData = IpyGameDataPY.GetIpyGameDataByCondition("FairyDomain", {"MapID":mapID, "LineID":lineID})
+## 自定义场景副本击杀NPC
+def DoCustomScene_Player_KillNPC(curPlayer, curNPC, mapID, lineID):
+    
+    bossID = curNPC.GetNPCID()
+    funcLineID = lineID
+    curBossID = GetCurFBLineBOSSID(lineID=funcLineID)
+    curState = PlayerFairyDomain.GetFairyDomainFBEventState(curPlayer, mapID, lineID)
+    GameWorld.DebugLog("自定义场景击杀NPC: mapID=%s,lineID=%s,bossID=%s,curBossID=%s,eventState=%s" 
+                       % (mapID, lineID, bossID, curBossID, curState))
+    if bossID != curBossID:
+        return
+    
+    playerID = curPlayer.GetPlayerID()
+    ipyData = IpyGameDataPY.GetIpyGameDataByCondition("FairyDomain", {"MapID":mapID, "LineID":funcLineID})
     if not ipyData:
-        return []
+        return
     eventID = ipyData.GetID()
+    eventFBType = ipyData.GetEventFBType()
+    if eventFBType != PlayerFairyDomain.FDEventFBType_Client:
+        GameWorld.DebugLog("    非前端本,不能掉落!", playerID)
+        return
+    if curState != PlayerFairyDomain.FDEventState_Visiting:
+        GameWorld.DebugLog("    非寻访中,不能掉落!", playerID)
+        return
+    PlayerFairyDomain.SetFairyDomainFBEventState(curPlayer, mapID, funcLineID, PlayerFairyDomain.FDEventState_Visited)
+    PlayerControl.SetCustomMap(curPlayer, 0, 0)
+    
     isOwner = True
-    giveItemList = __GetDemonKingPrizeItemList(curPlayer, mapID, lineID, eventID, isOwner)
-    return giveItemList
-
-## 给自定义副本奖励后续处理
-## @return: 返回结算副本over信息字典,不含jsonItem信息
-def OnGiveCustomFBPrizeOK(curPlayer, mapID, lineID):
-    PlayerFairyDomain.SetFairyDomainFBEventState(curPlayer, mapID, lineID, PlayerFairyDomain.FDEventState_Visited)
-    ownerID, ownerName = curPlayer.GetPlayerID(), curPlayer.GetPlayerName()
-    overDict = {FBCommon.Over_ownerID:ownerID, FBCommon.Over_ownerName:ownerName}
-    return overDict
+    giveItemList = __GetDemonKingPrizeItemList(curPlayer, mapID, funcLineID, eventID, isOwner)
+    NPCCommon.DoGiveItemByVirtualDrop(curPlayer, giveItemList, bossID)
+    
+    isPass = 1
+    overDict = {FBCommon.Over_ownerID:playerID, FBCommon.Over_ownerName:curPlayer.GetPlayerName(), 
+                FBCommon.Over_itemInfo:FBCommon.GetJsonItemList(giveItemList)}
+    FBCommon.NotifyFBOver(curPlayer, mapID, lineID, isPass, overDict)
+    return
 
 def __GetDemonKingPrizeItemList(curPlayer, mapID, lineID, eventID, isOwner):
     giveItemList = PlayerFairyDomain.GetFairyAppointAward(curPlayer, eventID)
@@ -305,19 +317,31 @@
         return giveItemList
     
     # 没有定制奖励则取常规奖励
-    # {物品ID:[归属者获得个数饼图[[概率, 个数], ...], 非归属者获得个数饼图[[概率, 个数], ...], 是否拍品], ...}
+    # [[归属者随机次数, 非归属随机次数, [[权重,[物品ID,个数,是否拍品]], ...]], ...]
+    
     giveItemList = []
-    awardDict = FBCommon.GetFBLineReward(mapID, lineID)
-    for itemID, itemInfo in awardDict.items():
-        ownerCountRateList, notOwnerCountRateList, isAuctionItem = itemInfo
+    awardList = FBCommon.GetFBLineReward(mapID, lineID)
+    for awardInfo in awardList:
+        ownerCount, otherCount, itemWeightList = awardInfo
         if isOwner:
-            itemCount = GameWorld.GetResultByRandomList(ownerCountRateList)
+            if not ownerCount:
+                continue
+            randCount = ownerCount
         else:
-            itemCount = GameWorld.GetResultByRandomList(notOwnerCountRateList)
-        if not itemCount:
+            if not otherCount:
+                continue
+            randCount = otherCount
+        realWeightList = ItemCommon.GetWeightItemListByAlchemyDiffLV(curPlayer, itemWeightList, 1)
+        if not realWeightList:
             continue
-        giveItemList.append([itemID, itemCount, isAuctionItem])
         
+        for _ in xrange(randCount):
+            itemInfo = GameWorld.GetResultByWeightList(realWeightList)
+            itemID, itemCount, isAuctionItem = itemInfo
+            if not itemID:
+                continue
+            giveItemList.append([itemID, itemCount, isAuctionItem])
+            
     return giveItemList
 
 

--
Gitblit v1.8.0