From 275ef806a444880883a5725d7c87f433537da02f Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期三, 24 四月 2019 10:07:53 +0800
Subject: [PATCH] 6597 【后端】【2.0】缥缈仙域事件刷新类型做限制

---
 ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py                                  |   23 ++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py               |    4 
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py                             |    5 +
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerEventCounter.py                      |    4 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py                |    1 
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFairyDomain.py                       |  109 +++++++++++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py  |   63 +++++++++++-
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py                |    4 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py             |   10 +
 PySysDB/PySysDBPY.h                                                                              |    2 
 ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py                                    |    4 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py |   13 ++
 PySysDB/PySysDBG.h                                                                               |    9 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                  |    1 
 14 files changed, 240 insertions(+), 12 deletions(-)

diff --git a/PySysDB/PySysDBG.h b/PySysDB/PySysDBG.h
index 1faa9dc..236de96 100644
--- a/PySysDB/PySysDBG.h
+++ b/PySysDB/PySysDBG.h
@@ -624,4 +624,13 @@
 	dict		NotifyInfoEnd;	//全服提示信息 - 相对结束时间
 	list		NotifyInfoLoop;	//全服提示信息 - 循环广播[间隔分钟, 广播key]
 	WORD		LVLimit;	//限制等级
+};
+
+//缥缈仙域表
+
+struct tagFairyDomain
+{
+	WORD		_ID;	//事件编号
+	DWORD		HourCntPubLimit;	//全服每小时次数限制
+	DWORD		DayCntPubLimit;	//全服每天次数限制
 };
\ No newline at end of file
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index bae0253..45204f8 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -1851,6 +1851,8 @@
 	BYTE		NeedAlchemyLV;	//出现的炼丹等级要求
 	list		NeedLV;	//出现的玩家等级要求
 	DWORD		Weight;	//权重
+	DWORD		HourCntPriLimit;	//个人每小时次数限制
+	DWORD		DayCntPriLimit;	//个人每天次数限制
 };
 
 //缥缈奇遇表
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
index a0ece2e..5dd62fb 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
@@ -93,6 +93,7 @@
 import CrossRealmPlayer
 import PlayerFBHelpBattle
 import PlayerFamilyRedPacket
+import PlayerFairyDomain
 import IpyGameDataPY
 import PlayerFamilyParty
 import GameWorldFamilyWar
@@ -1413,7 +1414,8 @@
     SendMapCommMapLinePlayerCount(True) # 同步一次普通地图线路人数信息
     #随机假仙盟
     PlayerFamily.RandomFakeFamily()
-    
+    #缥缈仙域
+    PlayerFairyDomain.OnMapServerInitOK()
     # 记录服务器是否正常开启完毕
     getUrl = ReadChConfig.GetPyMongoConfig("EventReport", "OpenStateUrl") + "?Type=MapInit&MapCount=%s"%GameWorld.GetGameWorld().GetGameMapManager().GetCount()
     GameWorld.GetGameWorld().EventReport_EventReport("", "", "", "", 0, getUrl)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
index 6e1fa95..4c2fa49 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
@@ -519,6 +519,12 @@
                         ("list", "NotifyInfoLoop", 0),
                         ("WORD", "LVLimit", 0),
                         ),
+
+                "FairyDomain":(
+                        ("WORD", "ID", 1),
+                        ("DWORD", "HourCntPubLimit", 0),
+                        ("DWORD", "DayCntPubLimit", 0),
+                        ),
                 }
 
 
@@ -1543,6 +1549,19 @@
     def GetNotifyInfoEnd(self): return self.NotifyInfoEnd # 全服提示信息 - 相对结束时间
     def GetNotifyInfoLoop(self): return self.NotifyInfoLoop # 全服提示信息 - 循环广播[间隔分钟, 广播key]
     def GetLVLimit(self): return self.LVLimit # 限制等级
+
+# 缥缈仙域表
+class IPY_FairyDomain():
+    
+    def __init__(self):
+        self.ID = 0
+        self.HourCntPubLimit = 0
+        self.DayCntPubLimit = 0
+        return
+        
+    def GetID(self): return self.ID # 事件编号
+    def GetHourCntPubLimit(self): return self.HourCntPubLimit # 全服每小时次数限制
+    def GetDayCntPubLimit(self): return self.DayCntPubLimit # 全服每天次数限制
 
 
 def Log(msg, playerID=0, par=0):
@@ -1660,6 +1679,8 @@
         self.ipyNewUniquenessArriveLen = len(self.ipyNewUniquenessArriveCache)
         self.ipyActLuckyTreasureCache = self.__LoadFileData("ActLuckyTreasure", IPY_ActLuckyTreasure)
         self.ipyActLuckyTreasureLen = len(self.ipyActLuckyTreasureCache)
+        self.ipyFairyDomainCache = self.__LoadFileData("FairyDomain", IPY_FairyDomain)
+        self.ipyFairyDomainLen = len(self.ipyFairyDomainCache)
         Log("IPY_FuncConfig count=%s" % len(self.ipyFuncConfigDict))
         Log("IPY_DataMgr InitOK!")
         return
@@ -1918,6 +1939,8 @@
     def GetNewUniquenessArriveByIndex(self, index): return self.ipyNewUniquenessArriveCache[index]
     def GetActLuckyTreasureCount(self): return self.ipyActLuckyTreasureLen
     def GetActLuckyTreasureByIndex(self, index): return self.ipyActLuckyTreasureCache[index]
+    def GetFairyDomainCount(self): return self.ipyFairyDomainLen
+    def GetFairyDomainByIndex(self, index): return self.ipyFairyDomainCache[index]
 
 IPYData = IPY_DataMgr()
 def IPY_Data(): return IPYData
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerEventCounter.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerEventCounter.py
index 39ea12e..4294f66 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerEventCounter.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerEventCounter.py
@@ -26,6 +26,7 @@
 import PlayerDBGSEvent
 import GameWorldActionControl
 import PlayerFBHelpBattle
+import PlayerFairyDomain
 import ChPyNetSendPack
 import NetPackCommon
 import PlayerDuJie
@@ -39,6 +40,7 @@
 def DoLogic_GameServer_OnHour(tick):
     #处理这个小时发出的邮件
     #GameWorld.GetMailManager().ProcessAllMail()
+    PlayerFairyDomain.OnHour()
     return
 
 ## 处理玩家每日响应
@@ -75,6 +77,8 @@
     PlayerDuJie.OnDayEx()
     #副本助战
     PlayerFBHelpBattle.HelpBattleOnDay()
+    #缥缈OnDay
+    PlayerFairyDomain.OnDayEx()
     playerManager = GameWorld.GetPlayerManager()
     for i in xrange(playerManager.GetPlayerCount()):
         curPlayer = playerManager.GetPlayerByIndex(i)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFairyDomain.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFairyDomain.py
new file mode 100644
index 0000000..30b8ac2
--- /dev/null
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFairyDomain.py
@@ -0,0 +1,109 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+#-------------------------------------------------------------------------------
+#
+##@package PlayerFairyDomain
+#
+# @todo:缥缈仙域
+# @author xdh
+# @date 2019-04-23
+# @version 1.0
+#
+#
+# 详细描述: 缥缈仙域
+#
+#---------------------------------------------------------------------
+"""Version = 2019-04-23 17:00"""
+
+import GameWorld
+import ShareDefine
+import IpyGameDataPY
+'''
+Value1:事件ID
+Value2:小时段出现次数
+Value3:今日出现次数
+'''
+RecType = ShareDefine.Def_UniversalGameRecType_FairyDomain
+
+
+def AddFairyDomainEvent(fdEventIDList):
+    fdEventLimitDict = {}
+    for fdEventID in fdEventIDList:
+        ipyData = IpyGameDataPY.GetIpyGameDataNotLog('FairyDomain', fdEventID)
+        if not ipyData:
+            continue
+        hourCntLimit, dayCntLimit = ipyData.GetHourCntPubLimit(), ipyData.GetDayCntPubLimit()
+        if not hourCntLimit and not dayCntLimit:
+            continue
+        fdEventLimitDict[fdEventID] = [hourCntLimit, dayCntLimit]
+    if not fdEventLimitDict:
+        return
+    addfdRecList = fdEventLimitDict.keys()
+    universalRecMgr = GameWorld.GetUniversalRecMgr()
+    recTypeListData = universalRecMgr.GetTypeList(RecType)
+
+    addFDEventList = []
+    for index in xrange(recTypeListData.Count()):
+        recData = recTypeListData.At(index)
+        curID = recData.GetValue1()
+        if curID in fdEventLimitDict:
+            addfdRecList.remove(curID)
+            curHourAppearCnt = recData.GetValue2()
+            curDayAppearCnt = recData.GetValue3()
+            hourCntLimit, dayCntLimit = fdEventLimitDict[curID]
+            if curHourAppearCnt >= hourCntLimit or curDayAppearCnt >= dayCntLimit:
+                continue
+            recData.SetValue2(curHourAppearCnt +1)
+            recData.SetValue3(curDayAppearCnt + 1)
+            if curHourAppearCnt +1 >= hourCntLimit or curDayAppearCnt + 1 >= dayCntLimit:
+                addFDEventList.append(curID)
+    for fdid in addfdRecList:
+        recData = recTypeListData.AddRec()
+        recData.SetValue1(fdid)
+        recData.SetValue2(1)
+        recData.SetValue3(1)
+        hourCntLimit, dayCntLimit = fdEventLimitDict[fdid]
+        if 1 >= hourCntLimit or 1 >= dayCntLimit:
+            addFDEventList.append(fdid)
+    if addFDEventList:
+        #同步地图
+        GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_FairyDomainLimit, [1, addFDEventList])
+      
+    return
+
+def OnHour():
+    __ResetFairyDomainCnt(1)
+    return
+
+def OnDayEx():
+    __ResetFairyDomainCnt(2)
+    return
+
+def OnMapServerInitOK():
+    __ResetFairyDomainCnt(0)
+    return
+
+def __ResetFairyDomainCnt(resetType):
+    curLimitEventIDList = []
+    universalRecMgr = GameWorld.GetUniversalRecMgr()
+    recTypeListData = universalRecMgr.GetTypeList(RecType)
+    for index in xrange(recTypeListData.Count()):
+        recData = recTypeListData.At(index)
+        if resetType == 1:
+            recData.SetValue2(0)
+        elif resetType == 2:
+            recData.SetValue3(0)
+        curID = recData.GetValue1()
+        hourAppearCnt = recData.GetValue2()
+        dayAppearCnt = recData.GetValue3()
+        ipyData = IpyGameDataPY.GetIpyGameDataNotLog('FairyDomain', curID)
+        if not ipyData:
+            continue
+        hourCntLimit, dayCntLimit = ipyData.GetHourCntPubLimit(), ipyData.GetDayCntPubLimit()
+        if hourAppearCnt >= hourCntLimit or dayAppearCnt >= dayCntLimit:
+            curLimitEventIDList.append(curID)
+    #同步地图
+    GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_FairyDomainLimit, [0, curLimitEventIDList])
+    return
\ No newline at end of file
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py
index 34ceaf6..5f7136e 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py
@@ -72,6 +72,7 @@
 import ChPyNetSendPack
 import NetPackCommon
 import AuctionHouse
+import PlayerFairyDomain
 
 import time
 import datetime
@@ -839,6 +840,10 @@
     if callName =="HorsePetBossOver":
         PlayerHorsePetBoss.HorsePetBossKilled(int(resultName))
         return
+    #缥缈仙域事件出现
+    if callName =="AddFairyDomainEvent":
+        PlayerFairyDomain.AddFairyDomainEvent(eval(resultName))
+        return
     
 #---return分割线-----------------------------------------------------------------
 
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index 752f8ea..e5e748e 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -190,7 +190,7 @@
 
 Def_Notify_WorldKey_RedPacketOutput = 'RedPacketOutput'  # 红包产出信息
 Def_Notify_WorldKey_HurtLog = 'HurtLog'  # 战斗伤害日志
-
+Def_Notify_WorldKey_FairyDomainLimit = "FairyDomainLimit"  # 缥缈仙域限制事件
 #运营活动表名定义
 OperationActionName_ExpRate = "ActExpRate" # 多倍经验活动
 OperationActionName_CostRebate = "ActCostRebate" # 消费返利活动
@@ -1022,7 +1022,7 @@
                                 Def_UniversalGameRecType_FBHelpBattleRecord, #助战未同步记录10
                                 Def_UniversalGameRecType_ZhuXianBossRecord, #诛仙BOSS结算记录11
                                 Def_UniversalGameRecType_LuckyTreasure, #幸运鉴宝大奖记录12
-                                Def_UniversalGameRecType_13,
+                                Def_UniversalGameRecType_FairyDomain, #缥缈仙域事件次数记录13
                                 Def_UniversalGameRecType_Reward,    # 通用奖励表(TopBar)14
                                 Def_UniversalGameRecType_15,
                                 Def_UniversalGameRecType_16,
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 7d0fbd6..811c79f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3890,6 +3890,7 @@
 Def_PDict_FairyDomainEnergy = "FairyDomainEnergy" #体力值
 Def_PDict_FairyDomainVisitCnt = "FairyDomainVisitCnt" #寻访总次数
 Def_PDict_FairyAdventuresData = "FairyAdventuresData_%s" #奇遇数值 唯一ID*100+档位 参数事件ID
+Def_PDict_FairyDomainEventAppearCnt = "FDEventAppearCnt%s" #事件出现次数 参数事件ID  AAABBB BBB:小时段出现次数 AAA:今日出现次数
 #-------------------------------------------------------------------------------
 #可以从07 41封包购买的背包类型,和对应字典{背包类型:[字典key, 默认格子数]}
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 567b7ec..24c3df0 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -1430,6 +1430,8 @@
                         ("BYTE", "NeedAlchemyLV", 0),
                         ("list", "NeedLV", 0),
                         ("DWORD", "Weight", 0),
+                        ("DWORD", "HourCntPriLimit", 0),
+                        ("DWORD", "DayCntPriLimit", 0),
                         ),
 
                 "FairyAdventures":(
@@ -4388,7 +4390,9 @@
         self.CostEnergy = 0
         self.NeedAlchemyLV = 0
         self.NeedLV = []
-        self.Weight = 0
+        self.Weight = 0
+        self.HourCntPriLimit = 0
+        self.DayCntPriLimit = 0
         return
         
     def GetID(self): return self.ID # 事件编号
@@ -4399,7 +4403,9 @@
     def GetCostEnergy(self): return self.CostEnergy # 消耗体力
     def GetNeedAlchemyLV(self): return self.NeedAlchemyLV # 出现的炼丹等级要求
     def GetNeedLV(self): return self.NeedLV # 出现的玩家等级要求
-    def GetWeight(self): return self.Weight # 权重
+    def GetWeight(self): return self.Weight # 权重
+    def GetHourCntPriLimit(self): return self.HourCntPriLimit # 个人每小时次数限制
+    def GetDayCntPriLimit(self): return self.DayCntPriLimit # 个人每天次数限制
 
 # 缥缈奇遇表
 class IPY_FairyAdventures():
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
index dac01df..80f6d40 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -89,6 +89,7 @@
 import PlayerRefineStove
 import PlayerFlashSale
 import PlayerWishingWell
+import PlayerFairyDomain
 import PlayerVip
 import PlayerDiceEx
 import IpyGameDataPY
@@ -545,6 +546,8 @@
         FBHelpBattle.DoPlayerOnDay(curPlayer)
         #跨服竞技场
         PlayerCrossRealmPK.DoPlayerOnDay(curPlayer)
+        #缥缈仙域
+        PlayerFairyDomain.OnDay(curPlayer)
         
     PlayerTJG.TJGOnDay(curPlayer, onEventType)
     # 以下为支持两种重置模式切换配置的
@@ -802,6 +805,8 @@
     
     #触发每小时任务重置脚本
     EventShell.EventResponse_OnHour(curPlayer)
+    #缥缈仙域
+    PlayerFairyDomain.OnHour(curPlayer)
     return
     
 #---------------------------------------------------------------------
@@ -1276,6 +1281,14 @@
                 PyGameData.g_familyPartyInfo = eval(msgValue)
             return
         
+        if key == ShareDefine.Def_Notify_WorldKey_FairyDomainLimit:
+            isAdd, limitList = eval(msgValue)
+            if isAdd:
+                PyGameData.g_fairyDomainLimit += limitList
+            else:
+                PyGameData.g_fairyDomainLimit = limitList
+            return
+        
         if key.startswith(ShareDefine.Def_Notify_WorldKey_OperationActionInfo[:-2]): 
             keyHead = ShareDefine.Def_Notify_WorldKey_OperationActionInfo[:-2]
             actionName = key[len(keyHead):]
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 3ca5ad2..74a3504 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py
@@ -26,6 +26,7 @@
 import IpyGameDataPY
 import PlayerActivity
 import ItemControler
+import PyGameData
 import EventShell
 
 import copy
@@ -60,6 +61,36 @@
 def OnLogin(curPlayer):
     NotifyVisitFairyDomainInfo(curPlayer)
     NotifyFairyAdventuresInfo(curPlayer)
+    return
+
+
+def OnHour(curPlayer):
+    __ResetFairyDomainCntLimit(curPlayer, 1)
+    return
+
+
+def OnDay(curPlayer):
+    __ResetFairyDomainCntLimit(curPlayer, 2)
+    return
+
+
+def __ResetFairyDomainCntLimit(curPlayer, resetType):
+    ## 重置个人缥缈事件出现次数记录
+    ipyMgr = IpyGameDataPY.IPY_Data()
+    for i in xrange(ipyMgr.GetFairyDomainCount()):
+        ipyData = ipyMgr.GetFairyDomainByIndex(i)
+        eventID = ipyData.GetID()
+        appearCntInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainEventAppearCnt % eventID)
+        if not appearCntInfo:
+            continue
+        hourAppearCntPri, dayAppearCntPri = appearCntInfo % 1000, appearCntInfo / 1000
+        if resetType == 1:
+            updAppearCntInfo = dayAppearCntPri * 1000
+        elif resetType == 2:
+            updAppearCntInfo = hourAppearCntPri
+        else:
+            return
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainEventAppearCnt % eventID, updAppearCntInfo)
     return
 
 
@@ -135,7 +166,15 @@
             if not randomList:
                 continue                
             fdEventIDList += randomList
-    
+        #更新个人出现次数
+        for fdEventID in fdEventIDList:
+            appearCntInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainEventAppearCnt % fdEventID)
+            hourAppearCntPri, dayAppearCntPri = appearCntInfo % 1000, appearCntInfo / 1000
+            updAppearCntInfo = (dayAppearCntPri + 1) * 1000 + (hourAppearCntPri + 1)
+            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainEventAppearCnt % fdEventID, updAppearCntInfo)
+        #更新全服出现次数
+        msgStr = str(fdEventIDList)
+        GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'AddFairyDomainEvent', msgStr, len(msgStr))
     #奇遇事件 随机档位数据
     openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
     for fdEventID in fdEventIDList:
@@ -175,6 +214,7 @@
     NotifyFairyAdventuresInfo(curPlayer)
     return
 
+
 def EndFairyDomain(curPlayer):
     ##结束寻访
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainState, 0)
@@ -187,6 +227,7 @@
             PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainEventState % fdEventID, 0)
             PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyAdventuresData % fdEventID, 0)
     return
+
 
 def __RandomFDEventByType(curPlayer, eventType, cnt):
     ##根据事件类型随机事件
@@ -206,15 +247,25 @@
         if lvLimit and not (lvLimit[0] <= curLV <= lvLimit[1]):
             #等级范围不满足
             continue
-        
+        eventID = ipyData.GetID()
+        appearCntInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainEventAppearCnt % eventID)
+        hourAppearCntPri, dayAppearCntPri = appearCntInfo % 1000, appearCntInfo / 1000
+        if hourAppearCntPri >= ipyData.GetHourCntPriLimit() or dayAppearCntPri >= ipyData.GetDayCntPriLimit():
+            #超过今日或本小时个人可出现次数上限
+            continue
+        if eventID in PyGameData.g_fairyDomainLimit:
+            #超过全服可出现次数
+            continue
         rate += ipyData.GetWeight()
         randomRateList.append([rate, ipyData.GetID()])
     if not randomRateList:
-        GameWorld.DebugLog('    缥缈仙域刷新池 随机库获取错误 !eventType=%s' % eventType, curPlayer.GetID())
+        GameWorld.DebugLog('    缥缈仙域刷新池 该类型没有符合条件的事件!eventType=%s' % eventType, curPlayer.GetID())
         return []
-    randomResultList = GameWorld.GetResultByRandomListEx(randomRateList, cnt, [])
-        
+    realCnt = min(len(randomRateList), cnt)
+    randomResultList = GameWorld.GetResultByRandomListEx(randomRateList, realCnt, [])
+    GameWorld.DebugLog('eventType=%s, cnt=%s,randomRateList=%s,randomResultList=%s' % (eventType, cnt, randomRateList, randomResultList))
     return randomResultList
+
 
 def GetFairyDomainFBEventState(curPlayer, mapID, lineID):
     ## 获取缥缈相关副本寻访状态
@@ -225,6 +276,7 @@
     curState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainEventState % fdeventID)
     return curState
 
+
 def SetFairyDomainFBEventState(curPlayer, mapID, lineID, state):
     ## 设置缥缈相关副本寻访状态
     ipyData = IpyGameDataPY.GetIpyGameDataByCondition("FairyDomain", {"MapID":mapID, "LineID":lineID})
@@ -233,6 +285,7 @@
     fdeventID = ipyData.GetID()
     return SetFairyDomainEventState(curPlayer, fdeventID, state)
 
+
 def SetFairyDomainEventState(curPlayer, fdeventID, state):
     ## 设置缥缈事件状态, return 是否成功
     if state not in [FDEventState_Visiting, FDEventState_Visited]:  # 1-未拜访  2-拜访中 3-已拜访
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
index 9d9fbee..9aa10d5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
@@ -105,3 +105,4 @@
 g_crossFuncLineDataCache = {} # 动态分配的跨服虚拟分线数据缓存 {(mapID, copyMapID):funcLineDataCache, ...}
 g_crossPlayerServerGroupIDInfo = {} #跨服玩家服务器组ID缓存,副本线路关闭时才释放,所以支持离线跨服玩家 {copyMapID:{playerID:serverGroupID, ...}, ...}
 g_fbBuyBuffTimeDict = {} # 副本购买buff时间缓存{playerID:{moneyCnt:time}}
+g_fairyDomainLimit = [] #全服已限制的缥缈仙域事件
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 752f8ea..e5e748e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -190,7 +190,7 @@
 
 Def_Notify_WorldKey_RedPacketOutput = 'RedPacketOutput'  # 红包产出信息
 Def_Notify_WorldKey_HurtLog = 'HurtLog'  # 战斗伤害日志
-
+Def_Notify_WorldKey_FairyDomainLimit = "FairyDomainLimit"  # 缥缈仙域限制事件
 #运营活动表名定义
 OperationActionName_ExpRate = "ActExpRate" # 多倍经验活动
 OperationActionName_CostRebate = "ActCostRebate" # 消费返利活动
@@ -1022,7 +1022,7 @@
                                 Def_UniversalGameRecType_FBHelpBattleRecord, #助战未同步记录10
                                 Def_UniversalGameRecType_ZhuXianBossRecord, #诛仙BOSS结算记录11
                                 Def_UniversalGameRecType_LuckyTreasure, #幸运鉴宝大奖记录12
-                                Def_UniversalGameRecType_13,
+                                Def_UniversalGameRecType_FairyDomain, #缥缈仙域事件次数记录13
                                 Def_UniversalGameRecType_Reward,    # 通用奖励表(TopBar)14
                                 Def_UniversalGameRecType_15,
                                 Def_UniversalGameRecType_16,

--
Gitblit v1.8.0