From efb7e570e8aee945dedc80e2be76becca1ea7ba5 Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期五, 21 六月 2019 16:43:36 +0800
Subject: [PATCH] 6374 封魔坛、雷罚进入限制

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py |  102 ++++++++++++++++++++++++++++++++-------------------
 1 files changed, 64 insertions(+), 38 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py
index 496f886..c9634b4 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py
@@ -19,6 +19,7 @@
 import ChConfig
 import ChPyNetSendPack
 import NetPackCommon
+import PlayerBossReborn
 import ShareDefine
 import GameWorld
 import GameLogic_CrossGrassland
@@ -26,12 +27,14 @@
 import IpyGameDataPY
 import PlayerActivity
 import ItemControler
+import ItemCommon
 import PyGameData
 import EventShell
+import FBCommon
+import NPCCommon
 
 import copy
 import random
-import FBCommon
 
 #0-奇遇 1-宝藏 2-仙草 3-妖王 4-灵草
 (
@@ -57,6 +60,12 @@
 AdventuresType4,
 ) = range(1, 5)
 
+#事件副本类型
+(
+FDEventFBType_Client, #前端本0
+FDEventFBType_Server, #本服本1
+FDEventFBType_CrossServer, #跨服本2
+) = range(3)
 
 def OnLogin(curPlayer):
     NotifyVisitFairyDomainInfo(curPlayer)
@@ -105,7 +114,7 @@
     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
     
     otherCntRateList = IpyGameDataPY.GetFuncEvalCfg('ImmortalDomain', 2)
-    maxEventCnt = max([info[1] for info in otherCntRateList]) + 1  #最大可出现事件个数
+    maxEventCnt = GetMaxEventCnt()  #最大可出现事件个数
     fairyDomainState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainState)  #是否寻访中  0未寻访 1寻访中 2任务标记可寻访
     if clientData.Type == 1:  #结束寻访
         if fairyDomainState != 1:
@@ -126,11 +135,11 @@
     if fairyDomainState == 1:
         GameWorld.DebugLog("    正在寻访仙域中!请先退出寻访")
         return
-    
-    if fairyDomainState != 2 and not PlayerActivity.AddDailyActionFinishCnt(curPlayer, dailyID):
-        GameWorld.DebugLog("    寻访仙域次数不足!")
+    costPoint = IpyGameDataPY.GetFuncCfg('ImmortalDomainActivePoint', 2)
+    if not PlayerActivity.CostActivityPoint(curPlayer, costPoint, True):
+        GameWorld.DebugLog("    寻访仙域需要活跃点不足!costPoint=%s"%costPoint)
         return
-    
+
     #随机事件 重置事件状态
     visitCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainVisitCnt)
     appointIpyDataList = IpyGameDataPY.GetIpyGameDataListNotLog('FairyDomainAppoint', visitCnt + 1)
@@ -140,18 +149,19 @@
             fdEventIDList.append(appointIpyData.GetEventID()) 
     else:
         fdEventTypeDict = {}
-        #先随机奇遇事件
-        fortuitousEventRate = IpyGameDataPY.GetFuncCfg('ImmortalDomain')
-        if GameWorld.CanHappen(fortuitousEventRate):
-            fdEventTypeDict[FDEventType0] = 1
-        
+        #先随机独立事件
+        singleEventRateDict = IpyGameDataPY.GetFuncEvalCfg('ImmortalDomain', 1, {})
+        for eventType, rate in singleEventRateDict.items():
+            if GameWorld.CanHappen(rate):
+                fdEventTypeDict[eventType] = 1
+
         otherCnt = GameWorld.GetResultByRandomList(otherCntRateList, 0)
         if otherCnt:
             otherEventRateList = copy.deepcopy(IpyGameDataPY.GetFuncEvalCfg('ImmortalDomain', 3))
             unRepeatTypeList = IpyGameDataPY.GetFuncEvalCfg('ImmortalDomain', 4)
             for _ in xrange(otherCnt):
-                otherEventType = GameWorld.GetResultByRandomList(otherEventRateList, 0)
-                if not otherEventType:
+                otherEventType = GameWorld.GetResultByRandomList(otherEventRateList)
+                if otherEventType is None:
                     continue
                 if otherEventType in unRepeatTypeList:
                     for index, info in enumerate(otherEventRateList):
@@ -175,6 +185,12 @@
         #更新全服出现次数
         msgStr = str(fdEventIDList)
         GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'AddFairyDomainEvent', msgStr, len(msgStr))
+    if not fdEventIDList:
+        fdEventIDList = IpyGameDataPY.GetFuncEvalCfg('ImmortalDomain', 5)
+        GameWorld.Log('寻访仙域, 没有随机出事件,使用默认事件!! playerLV=%s,visitCnt=%s,默认fdEventIDList=%s'%(curPlayer.GetLV(), visitCnt, fdEventIDList), curPlayer.GetID())
+        if not fdEventIDList:
+            return
+    PlayerActivity.CostActivityPoint(curPlayer, costPoint)
     #奇遇事件 随机档位数据
     openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
     for fdEventID in fdEventIDList:
@@ -186,16 +202,12 @@
             continue
         conditionList = ipyData.GetCondition()
         if not conditionList:
-            fdEventIDList.remove(fdEventID)
-            continue
-        condition = random.choice(conditionList)
-        index = conditionList.index(condition)
+            index = 0
+        else:
+            condition = random.choice(conditionList)
+            index = conditionList.index(condition)
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyAdventuresData % fdEventID, ipyData.GetID() * 100 + index)
-    
-    if not fdEventIDList:
-        GameWorld.Log('寻访仙域, 没有随机出事件!!')
-        return
-    
+
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainVisitCnt, min(visitCnt + 1, ChConfig.Def_UpperLimit_DWord))
     #设置事件
     for i in xrange(maxEventCnt):
@@ -212,14 +224,16 @@
     #通知
     NotifyVisitFairyDomainInfo(curPlayer, fdEventIDList)
     NotifyFairyAdventuresInfo(curPlayer)
+
+    PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_FairyDomain, 1)
     return
 
 
 def EndFairyDomain(curPlayer):
+    GameWorld.DebugLog("EndFairyDomain", curPlayer.GetID())
     ##结束寻访
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainState, 0)
-    otherCntRateList = IpyGameDataPY.GetFuncEvalCfg('ImmortalDomain', 2)
-    maxEventCnt = max([info[1] for info in otherCntRateList]) + 1  #最大可出现事件个数
+    maxEventCnt = GetMaxEventCnt()  #最大可出现事件个数
     for i in xrange(maxEventCnt):
         fdEventID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainEventID % i)
         if fdEventID:
@@ -301,14 +315,14 @@
         return
     if curState == state:
         return True
-    
+    ipyData = IpyGameDataPY.GetIpyGameData('FairyDomain', fdeventID)
+    if not ipyData:
+        return
     if state == FDEventState_Visiting:
         if curState != FDEventState_CanVisit:
             GameWorld.DebugLog('缥缈仙域事件状态设置错误,fdeventID=%s, state=%s, curState=%s' % (fdeventID, state, curState))
             return
-        ipyData = IpyGameDataPY.GetIpyGameData('FairyDomain', fdeventID)
-        if not ipyData:
-            return
+        
         costEnergy = ipyData.GetCostEnergy()
         curEnergy = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainEnergy)
         if curEnergy < costEnergy:
@@ -325,17 +339,16 @@
 #        if curState != FDEventState_Visiting:
 #            GameWorld.Log('缥缈仙域事件状态设置错误,fdeventID=%s, state=%s, curState=%s' % (fdeventID, state, curState))
 #            return
-        EventShell.EventRespons_FairyDomain(curPlayer)
+        EventShell.EventRespons_FairyDomain(curPlayer, ipyData.GetEventType())
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainEventState % fdeventID, state)
     NotifyVisitFairyDomainInfo(curPlayer, [fdeventID], 0)
     return True
 
 
-def NotifyVisitFairyDomainInfo(curPlayer, fdEventList=[], isAll=1):
+def NotifyVisitFairyDomainInfo(curPlayer, fdEventList=None, isAll=1):
     if not fdEventList:
         syncFDEventList = []
-        otherCntRateList = IpyGameDataPY.GetFuncEvalCfg('ImmortalDomain', 2)
-        maxEventCnt = max([info[1] for info in otherCntRateList]) + 1  #最大可出现事件个数
+        maxEventCnt = GetMaxEventCnt()  #最大可出现事件个数
         for i in xrange(maxEventCnt):
             fdEventID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainEventID % i)
             if fdEventID:
@@ -358,6 +371,11 @@
     NetPackCommon.SendFakePack(curPlayer, packData)
     return
 
+def GetMaxEventCnt():
+    # 最大可出现事件个数
+    otherCntRateList = IpyGameDataPY.GetFuncEvalCfg('ImmortalDomain', 2)
+    maxEventCnt = max([info[1] for info in otherCntRateList]) + len(IpyGameDataPY.GetFuncEvalCfg('ImmortalDomain'))
+    return maxEventCnt
 
 ###=========================奇遇===============================
 def NotifyFairyAdventuresInfo(curPlayer):
@@ -366,8 +384,7 @@
 
     packData = ChPyNetSendPack.tagMCFairyAdventuresInfo()
     packData.InfoList = []
-    otherCntRateList = IpyGameDataPY.GetFuncEvalCfg('ImmortalDomain', 2)
-    maxEventCnt = max([info[1] for info in otherCntRateList]) + 1  #最大可出现事件个数
+    maxEventCnt = GetMaxEventCnt()  #最大可出现事件个数
     for i in xrange(maxEventCnt):
         fdEventID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainEventID % i)
         if fdEventID not in AdventuresTypeList:
@@ -431,12 +448,14 @@
                 gearAwardList = ipyData.GetGearAward()
                 if not gearAwardList:
                     return
-                itemRateList = gearAwardList[index] if index < len(gearAwardList) else gearAwardList[-1]
-                giveItemList = [GameWorld.GetResultByWeightList(itemRateList)]
+                giveItemList = []
+                itemRandomList = gearAwardList[index] if index < len(gearAwardList) else gearAwardList[-1]
+                for itemRateList in itemRandomList:
+                    itemRateList = ItemCommon.GetWeightItemListByAlchemyDiffLV(curPlayer, itemRateList, 0)
+                    giveItemList.append(GameWorld.GetResultByWeightList(itemRateList))
             else:
                 giveItemList = [ipyData.GetBasicAward()]
-                
-        ItemControler.GivePlayerItemOrMail(curPlayer, giveItemList)
+        NPCCommon.DoGiveItemByVirtualDrop(curPlayer, giveItemList, 0)
         msgDict = {FBCommon.Over_itemInfo:FBCommon.GetJsonItemList(giveItemList)}
         FBCommon.Notify_FB_Over(curPlayer, msgDict)
         GameWorld.DebugLog('缥缈奇遇领奖 msgDict=%s, fdeventID=%s' % (msgDict, fdeventID))
@@ -458,4 +477,11 @@
             itemList.append([itemInfo[0][job], itemInfo[1], itemInfo[2]])
         else:
             itemList.append(itemInfo)
+    
+    for itemRateList in ipyData.GetRandomAward():
+        itemRateList = ItemCommon.GetWeightItemListByAlchemyDiffLV(curPlayer, itemRateList, 1)
+        giveItem = GameWorld.GetResultByWeightList(itemRateList)
+        if not giveItem:
+            continue
+        itemList.append(giveItem)
     return itemList

--
Gitblit v1.8.0