From d7f44d8d871a90c818bdb3ffe9a60af875b7100a Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 30 九月 2025 10:12:23 +0800
Subject: [PATCH] 135 【挑战】战锤秘境-服务端(白骨盈野;副本基础;副本扫荡;广告奖励支持;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFB.py                             |   81 -
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py                      |   31 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFB.py         |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py                            |   42 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py                                 |    1 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py                                 |   79 --
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py                             |  601 +++++++---------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossPlayerData.py                      |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py                                 |  108 --
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py                           |   23 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py           |  566 +++++---------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Zhanchui.py |   72 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py                             |    8 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini                                         |    6 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py                               |   93 +-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetFBStar.py                       |    4 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py                             |   93 ++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py                               |   54 
 PySysDB/PySysDBPY.h                                                                                                |   46 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py                        |   24 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py                   |   22 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                                    |  201 ----
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFuncTeam.py                       |    8 
 23 files changed, 847 insertions(+), 1,320 deletions(-)

diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 89399d8..f89fdb0 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -1218,22 +1218,14 @@
 
 //副本总表
 
-struct tagFBFunc
+struct FBFunc
 {
 	DWORD		_DataMapID;	//数据地图ID
-	BYTE		DayTimes;	//每日可挑战次数, 0为不限制
-	BYTE		DayResetType;	//每日次数重置类型; 0-不重置,1-0点,2-5点
-	BYTE		WeekTimes;	//每周可挑战次数, 0为不限制
-	BYTE		WeekResetType;	//每周次数重置类型; 0-不重置,1-0点,2-5点
-	list		RewardRate;	//评级奖励比例
-	DWORD		BuyTimesVIPPriID;	//购买次数VIP权限ID
-	DWORD		ExtraTimesVIPPriID;	//额外次数VIP权限ID
-	DWORD		ExtraTimesMWPriID;	//额外次数法宝权限ID
-	BYTE		GuardPick;	//该地图守护是否能拾取
-	WORD		OfflineTime;	//离线多久退出副本(秒)
-	WORD		FBPoint;	//副本过关仙缘币
-	WORD		HelpPoint;	//助战仙缘币(0代表不可助战)
-	BYTE		DayHelpCountMax;	//每日手动助战获得仙缘币次数(非镜像)
+	BYTE		DayTimes;	//每日免费次数, 0为不限制
+	BYTE		PayCntMax;	//额外付费次数
+	BYTE		PayMoneyType;	//消耗货币类型
+	list		PayMoneyValues;	//消耗货币值列表
+
 };
 
 //副本功能线路表
@@ -1242,20 +1234,20 @@
 {
 	DWORD		_DataMapID;	//数据地图ID
 	BYTE		_LineID;	//功能线路ID
-	DWORD		MapID;	//场景地图ID
 	WORD		LVLimitMin;	//最低等级限制, 0为不限制
-	WORD		LVLimitMax;	//最高等级限制, 0为不限制
-	DWORD		TicketID;	//门票ID
-	list		TicketCostCnt;	//门票消耗数信息
-	WORD		TicketPrice;	//门票单价(不能用钱抵的配0)
-	WORD		SweepLVLimit;	//扫荡等级限制, 0为不限制
-	DWORD		SweepItemID;	//扫荡所需道具ID
-	BYTE		SweepCostCnt;	//扫荡所需道具个数
-	eval		EnterPosInfo;	//进入坐标信息
-	eval		StepTime;	//阶段时间
-	eval		RefreshNPC;	//标试点刷怪配置
-	eval		GradeInfo;	//评级规则
-	eval		RewardInfo;	//奖励信息
+	list		PassAwardList;	//过关奖励
+	list		SweepAwardList;	//扫荡奖励
+	list		LineupIDList;	//阵容ID列表
+};
+
+//广告奖励表
+
+struct ADAward
+{
+	DWORD		_ADID;
+	BYTE		ADCntMax;	//每日次数
+	list		ADAwardItemList;	//广告奖励物品列表
+	DWORD		ADMapID;	//对应副本ID,默认给该副本1次次数
 };
 
 //副本通用养成表
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
index be34ac8..60b6c7d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -22,9 +22,9 @@
 PacketSubCMD_3=0x23
 PacketCallFunc_3=OnUseItems
 
-PacketCMD_4=0xA3
-PacketSubCMD_4=0x12
-PacketCallFunc_4=OnGuardPickupItem
+PacketCMD_4=
+PacketSubCMD_4=
+PacketCallFunc_4=
 
 PacketCMD_5=0xA3
 PacketSubCMD_5=0x07
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
index 06c2a8d..8491e7f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
@@ -36,6 +36,7 @@
 import TurnPassive
 import TurnSkill
 import TurnBuff
+import FBCommon
 import CommFunc
 import ObjPool
 import FBLogic
@@ -862,6 +863,15 @@
     GameWorld.DebugLog("回合制战斗请求: mapID=%s,funcLineID=%s,tagType=%s,tagID=%s,valueList=%s" 
                        % (mapID, funcLineID, tagType, tagID, valueList), curPlayer.GetPlayerID())
     
+    fbIpyData = FBCommon.GetFBIpyData(mapID)
+    fbLineIpyData = FBCommon.GetFBLineIpyData(mapID, funcLineID, False)
+    if fbIpyData:
+        if not fbLineIpyData:
+            GameWorld.DebugLog("不存在该副本功能线路! mapID=%s,funcLineID=%s" % (mapID, funcLineID))
+            return
+        if FBCommon.CheckCanEnterFBComm(curPlayer, mapID, funcLineID, fbIpyData, fbLineIpyData) != ShareDefine.EntFBAskRet_OK:
+            return
+        
     reqRet = FBLogic.OnTurnFightRequest(curPlayer, mapID, funcLineID, tagType, tagID, valueList)
     if not reqRet:
         return
@@ -877,10 +887,15 @@
         
     # NPC
     else:
-        ret = FBLogic.GetFBNPCLineupInfo(curPlayer, mapID, funcLineID)
-        if not ret:
-            return
-        npcLineupIDList, strongerLV, difficulty = ret
+        npcLineupIDList, strongerLV, difficulty = [], 0, 0
+        if fbLineIpyData:
+            npcLineupIDList = fbLineIpyData.GetLineupIDList()
+            
+        if not npcLineupIDList:
+            ret = FBLogic.GetFBNPCLineupInfo(curPlayer, mapID, funcLineID)
+            if not ret:
+                return
+            npcLineupIDList, strongerLV, difficulty = ret
         OnTurnFightVSNPC(curPlayer, mapID, funcLineID, atkLineupID, npcLineupIDList, strongerLV, difficulty)
         
     return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 9381d4a..7480422 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -1912,152 +1912,41 @@
 Def_FBMapID_MainBoss = 2 # 主线Boss
 Def_FBMapID_ArenaBattle = 3 # 演武场
 
-#创角新手村地图ID列表
-Def_CreatRoleMapIDList = [10000]
-#PK周赛
-Def_FBMapID_WeedPK = 12040
-#战盟副本-异界入侵、守卫人皇
-Def_FBMapID_FamilyInvade = 31170
+Def_FBMapID_Zhanchui = 30010 # 白骨盈野/战锤秘境
+Def_FBMapID_Tianzi = 30020 # 天子考验
 
-# 战盟boss副本
-Def_FBMapID_FamilyBossMap = 31210
-# 仙盟联赛
-Def_FBMapID_FamilyWar = 31220
-
-# 百战之地
-Def_FBMapID_BZZD = 31080
-
-#试炼之塔(符印塔)
-Def_FBMapID_TrialTower = 31130
-
-#除魔卫道
-Def_FBMapID_ClearDevil = 31040
-#新手副本
-#Def_FBMapID_ClearDevil2 = 31090
-#法宝副本
-Def_FBMapID_MagicWeapon = 41110
-
-#BOSS之家
-Def_FBMapID_BossHome = 31270 #31020地图ID修改,不使用副本类型
-
-#古神禁地
-Def_FBMapID_GodArea = 31150
-
-#冰晶矿脉
-Def_FBMapID_IceLode = 31140
-
-#渡劫副本
-Def_FBMapID_DuJie = 31110
-
-#麒麟之府
-Def_FBMapID_KirinHome = 311900
-
-#个人BOSS
-Def_FBMapID_PersonalBoss = 31240
-
-#仙盟宴会
-Def_FBMapID_FamilyParty = 31230
-
-#宗门试炼
-Def_FBMapID_MunekadoTrial = 60010
-
-#混乱妖域
-Def_FBMapID_ChaosDemon = 31180
-
-#讨伐妖魔
-Def_FBMapID_KillDevil = 31280
-
-#娲皇遗迹
-Def_FBMapID_QueenRelics = 51010
-
-#上古战场
-Def_FBMapID_ElderBattlefield = 31160
-
-#守护副本
-Def_FBMapID_Guard = 31250
-
-#封魔坛
-Def_FBMapID_SealDemon = 52010
-#单人封魔坛
-Def_FBMapID_SealDemonEx = 52020
-#诛仙BOSS/雷罚BOSS
-Def_FBMapID_ZhuXianBoss = 31380
-#天星塔/丹塔
-Def_FBMapID_SkyTower = 31370
-#境界塔
-Def_FBMapID_RealmTower = 31310
-#仙魔之争
-Def_FBMapID_XMZZ = 31010
-#神兽副本
-Def_FBMapID_Dogz = 21110
-#聚魂副本
-Def_FBMapID_GatherSoul = 31340
-#跨服竞技场
-Def_FBMapID_CrossRealmPK = 32010
-#跨服排位
-Def_FBMapID_CrossChampionship = 32070
-#跨服蓬莱仙境
-Def_FBMapID_CrossPenglai = 32020
-#跨服魔化之地
-Def_FBMapID_CrossDemonLand = 32080
-#跨服妖王
-Def_FBMapID_CrossDemonKing = 32030
-#本服妖王
-Def_FBMapID_DemonKing = 22030
-#多仙盟Boss
-Def_FBMapID_AllFamilyBoss = 31260
-#骑宠Boss
-Def_FBMapID_HorsePetBoss = 31200
-#缥缈宝藏
-Def_FBMapID_FairyTreasure = 31190
-#跨服灵草园
-Def_FBMapID_CrossGrasslandLing = 32040
-#跨服仙草园
-Def_FBMapID_CrossGrasslandXian = 32050
-#跨服战场
-Def_FBMapID_CrossBattlefield = 32060
-#跨服仙盟夺旗战/逐鹿万界
-Def_FBMapID_CrossFamilyFlagwar = 32090
-#情缘副本
-Def_FBMapID_Love = 31300
-#镜像切磋
-Def_FBMapID_MirrorBattle = 100
-
-#镜像PK的地图ID列表
-MirrorBattleMapIDList = []
+#线路未过关时免费的地图
+UnPassFreeMapIDList = [Def_FBMapID_ArenaBattle]
+#按星级记录过关的地图
+PassByStarMapIDList = []
 
 #注册上传跨服服务器数据后直接进入跨服服务器的地图
-RegisterEnter_CrossServerMapIDList = [Def_FBMapID_CrossPenglai, Def_FBMapID_CrossDemonLand, Def_FBMapID_CrossDemonKing, 
-                                      Def_FBMapID_CrossGrasslandLing, Def_FBMapID_CrossGrasslandXian, Def_FBMapID_CrossBattlefield,
-                                      Def_FBMapID_CrossChampionship, Def_FBMapID_CrossFamilyFlagwar,
-                                      ]
+RegisterEnter_CrossServerMapIDList = []
 #跨服地图
-Def_CrossMapIDList = RegisterEnter_CrossServerMapIDList + [Def_FBMapID_CrossRealmPK]
+Def_CrossMapIDList = RegisterEnter_CrossServerMapIDList + []
 #跨服分区类型配置, 没配置的默认 CrossZoneComm
 Def_CrossZoneTypeName = {0:"CrossZoneComm", # 特殊0,默认常规分区
-                         Def_FBMapID_CrossPenglai:"CrossZoneComm",
-                         Def_FBMapID_CrossDemonLand:"CrossZoneComm",
-                         Def_FBMapID_CrossRealmPK:"CrossZonePK",
-                         Def_FBMapID_CrossDemonKing:"CrossZonePK",
-                         Def_FBMapID_CrossGrasslandLing:"CrossZonePK",
-                         Def_FBMapID_CrossGrasslandXian:"CrossZonePK",
-                         Def_FBMapID_CrossBattlefield:"CrossZoneBattlefield",
-                         Def_FBMapID_CrossChampionship:"CrossZonePK",
-                         Def_FBMapID_CrossFamilyFlagwar:"CrossZoneComm",
+#                         Def_FBMapID_CrossPenglai:"CrossZoneComm",
+#                         Def_FBMapID_CrossDemonLand:"CrossZoneComm",
+#                         Def_FBMapID_CrossDemonKing:"CrossZonePK",
+#                         Def_FBMapID_CrossGrasslandLing:"CrossZonePK",
+#                         Def_FBMapID_CrossGrasslandXian:"CrossZonePK",
+#                         Def_FBMapID_CrossBattlefield:"CrossZoneBattlefield",
+#                         Def_FBMapID_CrossChampionship:"CrossZonePK",
+#                         Def_FBMapID_CrossFamilyFlagwar:"CrossZoneComm",
                          }
 #跨服分区对应地图配置表名 - 仅适用于固定地图及虚拟分线的跨服玩法
-Def_CrossZoneMapTableName = {Def_FBMapID_CrossPenglai:"CrossPenglaiZoneMap",
-                             Def_FBMapID_CrossDemonLand:"CrossDemonLandZoneMap",
-                             Def_FBMapID_CrossFamilyFlagwar:"CrossFamilyFlagwarZoneMap",
+Def_CrossZoneMapTableName = {
+                             #Def_FBMapID_CrossPenglai:"CrossPenglaiZoneMap",
+                             #Def_FBMapID_CrossDemonLand:"CrossDemonLandZoneMap",
+                             #Def_FBMapID_CrossFamilyFlagwar:"CrossFamilyFlagwarZoneMap",
                              }
 #需要动态分配线路的跨服地图
-Def_CrossDynamicLineMap = [Def_FBMapID_CrossDemonKing, Def_FBMapID_CrossGrasslandLing, Def_FBMapID_CrossGrasslandXian, Def_FBMapID_CrossBattlefield, Def_FBMapID_CrossChampionship]
+Def_CrossDynamicLineMap = []
 
 #副本关闭时未拾取的物品邮件发放给玩家
 #这里只有需要的副本才配置,不做默认逻辑,防止某些副本实际不能给导致刷物品,如麒麟之府
-Def_SendUnPickItemMailMapIDList = [Def_FBMapID_IceLode, Def_FBMapID_PersonalBoss, Def_FBMapID_MunekadoTrial, 
-                                   Def_FBMapID_SealDemon, Def_FBMapID_SealDemonEx, Def_FBMapID_ZhuXianBoss, 
-                                   Def_FBMapID_DemonKing, Def_FBMapID_CrossDemonKing, Def_FBMapID_KillDevil]
+Def_SendUnPickItemMailMapIDList = []
 
 #金钱不掉物品直接给玩家的地图
 Def_GiveMoneyMapIDList = []
@@ -2065,29 +1954,15 @@
 # 副本中玩家下线就被踢出
 Def_DisconnectExit_FBID = []
 #会有阵营的地图
-Def_MapID_NeedCamp = [Def_FBMapID_FamilyWar, Def_FBMapID_GatherSoul, Def_FBMapID_CrossBattlefield] + MirrorBattleMapIDList
+Def_MapID_NeedCamp = []
 
 # 进入副本需要根据请求lineID动态分配虚拟分线属性的地图
-Def_MapID_LineIDToPropertyID = [Def_FBMapID_ElderBattlefield]
-                      
-# 进入副本需要发送到GameServer的地图
-Def_MapID_SendToGameServer = [Def_FBMapID_HorsePetBoss, Def_FBMapID_FamilyInvade, Def_FBMapID_SealDemon, Def_FBMapID_DemonKing,
-                              Def_FBMapID_FamilyWar, Def_FBMapID_ZhuXianBoss, Def_FBMapID_AllFamilyBoss] + \
-                              Def_MapID_LineIDToPropertyID + [Def_FBMapID_CrossChampionship] + MirrorBattleMapIDList
-                              
-# 刷新标识点在无玩家的情况下也需要刷新的地图
-Def_NoPlayerNeedProcessRefreshPointMap = [Def_FBMapID_HorsePetBoss, Def_FBMapID_SealDemon, Def_FBMapID_GodArea, Def_FBMapID_BossHome, Def_FBMapID_GatherSoul, Def_FBMapID_ZhuXianBoss, Def_FBMapID_AllFamilyBoss]
-
-# 可重复进的副本
-Def_NoLimitEnterCntMap = [Def_FBMapID_AllFamilyBoss, Def_FBMapID_FamilyParty, Def_FBMapID_FamilyWar, Def_FBMapID_FamilyInvade, Def_FBMapID_ElderBattlefield, Def_FBMapID_SealDemon]
+Def_MapID_LineIDToPropertyID = []
 
 # 无玩家时不自动关闭的自伸缩副本
-Def_NoPlayerNotCloseAutoSizeMap = [Def_FBMapID_FamilyInvade, Def_FBMapID_GatherSoul]
+Def_NoPlayerNotCloseAutoSizeMap = []
 # 无玩家时自动关闭的非自伸缩副本
-Def_NoPlayerCloseNotAutoSizeMap = [Def_FBMapID_ZhuXianBoss]
-
-# 不可切换PK模式的地图
-Def_CanNotChangeAtkModelMap = []
+Def_NoPlayerCloseNotAutoSizeMap = []
 
 # 从副本退出时,可以返回进入前的副本ID
 Def_CanBackFBMap = []
@@ -2115,6 +1990,8 @@
                 'MainLevel':[Def_FBMapID_Main],  # 主线关卡
                 'MainLevelBoss':[Def_FBMapID_MainBoss],  # 主线关卡boss
                 'Arena':[Def_FBMapID_ArenaBattle],
+                'Zhanchui':[Def_FBMapID_Zhanchui],
+                'Tianzi':[Def_FBMapID_Tianzi],
                 }
 
 #特殊副本ID, 由系统分配, 进入时候不验证IsMapCopyFull
@@ -3402,16 +3279,12 @@
 Def_Player_Dict_TeamFBPlayerCnt = "TeamFBPlayerCnt" # 请求进入的组队副本玩家个数, 临时用,进入副本设置完后删除
 Def_Player_Dict_ReqFBMissionID = "ReqFBMissionID" # 请求进入副本的任务ID
 Def_Player_Dict_ReqFBMissionType = "ReqFBMissionType" # 请求进入副本的任务类型
-Def_Player_Dict_PlayerFBStar_MapId = "FBStar_%s_%s"  # 副本星级星级信息, 参数为[mapID, key编号], 按位存储每个lineID对应的星级
+Def_Player_Dict_FBStar = "FBStar_%s_%s"  # 副本星级星级信息, 参数为[mapID, key编号], 按位存储每个lineID对应的星级
 Def_Player_Dict_FBPassLineID = "FBPassLineID_%s"  # 副本已过关到的lineID, 参数为副本ID
-Def_Player_Dict_EnterFbCntTotal = "EnterFbCntTotal_%s"  # 进入副本总累计次数, 参数为副本ID
-Def_Player_Dict_EnterFbCntDay = "EnterFbCntDay_%s"  # 今日进入副本次数, 参数为副本ID
-Def_Player_Dict_BuyFbCntDay = "BuyFbCntDay_%s" # 今日购买副本进入次数, 参数为副本ID
-Def_Player_Dict_ItemAddFbCnt = "ItemAddFbCnt_%s"  # 使用物品增加的副本次数, 参数为副本ID
-Def_Player_Dict_EnterFbCntWeek = "EnterFbCntWeek_%s"  # 本周进入副本次数, 参数为副本ID
-Def_Player_Dict_FBHistoryMaxLine = "FBHistoryMaxLine_%s"  # 副本历史最高通关, 参数为副本ID
-Def_Player_Dict_IceLoadLineID = "IceLoadLineID_%s"  # 副本星级星级信息, 参数为[key编号], 按位存储每个lineID是否选中
-Def_Player_Dict_RefurbishGoodBookPlayerLv = "RefurbishGoodBookPlayerLv_97"  # 刷新天书任务时的玩家等级
+Def_Player_Dict_FbEnterCnt = "FbEnterCnt_%s"  # 今日进入副本次数(获得奖励次数), 参数为副本ID
+Def_Player_Dict_FBBuyCnt = "FBBuyCnt_%s" # 今日购买副本进入次数, 参数为副本ID
+Def_Player_Dict_FBItemCnt = "FBItemCnt_%s"  # 今日使用物品增加的副本次数, 参数为副本ID
+Def_Player_Dict_FBADCnt = "FBADCnt_%s" # 今日已通过广告获得的次数, 参数为副本ID
 Def_Player_Dict_GameFuncFirstTouch = "GameFuncFirstTouch_%s"  # 服务端功能首次触发开启状态; 参数, key编号
 Def_Player_Dict_GameFuncAwardState = "GameFuncAwardState_%s"  # 服务端功能开启领奖状态; 参数, key编号
 Def_Player_Dict_MissionFinish = "MissionFinish_%s"  # 任务是否完成; 参数, 任务ID, 只会记录部分需要记录的任务ID 
@@ -3483,6 +3356,7 @@
 Def_PDict_GoodGameAwardState = "GoodGameAwardState"  # 游戏好评领奖记录
 Def_PDict_LikeGameAwardState = "LikeGameAwardState"  # 游戏点赞领奖记录
 Def_PDict_RechargeDayAward = "RechargeDayAward"  # 累充每日奖励
+Def_PDict_ADCnt = "ADCnt_%s"  # 今日已领取广告奖励次数,参数(广告ID)
 Def_PDict_EquipViewCacheState = "EquipViewCacheState"  # 本次上线是否同步过装备缓存
 Def_PDict_PackDataSyncState = "PackDataSyncState"  # 本次上线打包数据同步状态,按位存储是否同步 0-本服,1-跨服
 Def_PDict_PackDataSyncFightPower = "PackDataSyncFightPower"  # 本次上线打包数据同步时的战力,用于对比,只对比求余亿部分即可
@@ -4147,12 +4021,7 @@
 FuncNoLinearAttrDict = {}
 
 # 指定地图生效的非线性属性配置
-MapAttrInfoDict_Noline = {
-                          Def_FBMapID_FamilyWar:{
-                                                 TYPE_Calc_FamilyWarAtkPer:[TYPE_Calc_AttrATKMin, TYPE_Calc_AttrATKMax],
-                                                 TYPE_Calc_FamilyWarHPPer:[TYPE_Calc_AttrMaxHP],
-                                                 }
-                          }
+MapAttrInfoDict_Noline = {}
 
 #属性线性索引
 CalcAttrIndexList = (
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index fd626dc..27276cc 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -3372,73 +3372,6 @@
 
 
 #------------------------------------------------------
-# A3 12 守护拾取物品 #tagCMGuardPickupItem
-
-class  tagCMGuardPickupItem(Structure):
-    Head = tagHead()
-    ItemCount = 0    #(WORD ItemCount)
-    MapItemID = list()    #(vector<WORD> MapItemID)//size = ItemCount
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0x12
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        for i in range(self.ItemCount):
-            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
-            self.MapItemID.append(value)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0x12
-        self.ItemCount = 0
-        self.MapItemID = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 2
-        length += 2 * self.ItemCount
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteWORD(data, self.ItemCount)
-        for i in range(self.ItemCount):
-            data = CommFunc.WriteWORD(data, self.MapItemID[i])
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ItemCount:%d,
-                                MapItemID:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ItemCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagCMGuardPickupItem=tagCMGuardPickupItem()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMGuardPickupItem.Head.Cmd,m_NAtagCMGuardPickupItem.Head.SubCmd))] = m_NAtagCMGuardPickupItem
-
-
-#------------------------------------------------------
 # A3 13 物品拆解 #tagCMItemDecompound
 
 class  tagCMItemDecompound(Structure):
@@ -5120,9 +5053,7 @@
                   ("MapID", c_int),    
                   ("LineID", c_ushort),    
                   ("Cnt", c_ubyte),    # 扫荡次数
-                  ("IsFinish", c_ubyte),    # 是否立即完成; 0-否;1-花钱立即完成;2-客户端自行倒计时间到后发送2代表领取扫荡完成奖励
                   ("DataEx", c_int),    #附带信息
-                  ("IsLittleHelper", c_ubyte),    # 是否小助手扫荡
                   ]
 
     def __init__(self):
@@ -5142,9 +5073,7 @@
         self.MapID = 0
         self.LineID = 0
         self.Cnt = 0
-        self.IsFinish = 0
         self.DataEx = 0
-        self.IsLittleHelper = 0
         return
 
     def GetLength(self):
@@ -5160,9 +5089,7 @@
                                 MapID:%d,
                                 LineID:%d,
                                 Cnt:%d,
-                                IsFinish:%d,
-                                DataEx:%d,
-                                IsLittleHelper:%d
+                                DataEx:%d
                                 '''\
                                 %(
                                 self.Cmd,
@@ -5170,9 +5097,7 @@
                                 self.MapID,
                                 self.LineID,
                                 self.Cnt,
-                                self.IsFinish,
-                                self.DataEx,
-                                self.IsLittleHelper
+                                self.DataEx
                                 )
         return DumpString
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 45da1bb..dafb1ce 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -3849,114 +3849,6 @@
 
 
 #------------------------------------------------------
-# A3 BD 通知玩家购买副本进入次数 #tagMCBuyEnterInfo
-
-class  tagMCBuyInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("FBID", c_int),    # 副本ID
-                  ("BuyCount", c_ubyte),    # 已购买次数
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.FBID = 0
-        self.BuyCount = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCBuyInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A3 BD 通知玩家购买副本进入次数 //tagMCBuyEnterInfo:
-                                FBID:%d,
-                                BuyCount:%d
-                                '''\
-                                %(
-                                self.FBID,
-                                self.BuyCount
-                                )
-        return DumpString
-
-
-class  tagMCBuyEnterInfo(Structure):
-    Head = tagHead()
-    FBCount = 0    #(BYTE FBCount)// 副本个数
-    FBInfo = list()    #(vector<tagMCBuyInfo> FBInfo)// 副本信息
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0xBD
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.FBCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.FBCount):
-            temFBInfo = tagMCBuyInfo()
-            _pos = temFBInfo.ReadData(_lpData, _pos)
-            self.FBInfo.append(temFBInfo)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0xBD
-        self.FBCount = 0
-        self.FBInfo = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.FBCount):
-            length += self.FBInfo[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.FBCount)
-        for i in range(self.FBCount):
-            data = CommFunc.WriteString(data, self.FBInfo[i].GetLength(), self.FBInfo[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                FBCount:%d,
-                                FBInfo:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.FBCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCBuyEnterInfo=tagMCBuyEnterInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCBuyEnterInfo.Head.Cmd,m_NAtagMCBuyEnterInfo.Head.SubCmd))] = m_NAtagMCBuyEnterInfo
-
-
-#------------------------------------------------------
 # A3 B0 玩家购买魔魂铜钱经验额外奖励信息 #tagMCBuySomethingReward
 
 class  tagMCBuySomethingReward(Structure):
@@ -5367,6 +5259,165 @@
 
 m_NAtagMCFaQiInfo=tagMCFaQiInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFaQiInfo.Cmd,m_NAtagMCFaQiInfo.SubCmd))] = m_NAtagMCFaQiInfo
+
+
+#------------------------------------------------------
+# A3 20 玩家副本相关信息 #tagSCFBInfoList
+
+class  tagSCFBInfo(Structure):
+    MapID = 0    #(DWORD MapID)
+    EnterCnt = 0    #(WORD EnterCnt)//今日累计进入次数
+    ADAddCnt = 0    #(BYTE ADAddCnt)//广告增加次数
+    BuyAddCnt = 0    #(BYTE BuyAddCnt)//购买增加次数
+    ItemAddCnt = 0    #(WORD ItemAddCnt)//物品增加次数
+    PassLineID = 0    #(DWORD PassLineID)//已过关到的lineID
+    PassGradeCnt = 0    #(BYTE PassGradeCnt)//星级值对应个数, 每个key存9个lineID
+    PassGrade = list()    #(vector<DWORD> PassGrade)//副本线路对应星级值列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.EnterCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.ADAddCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.BuyAddCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ItemAddCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.PassLineID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PassGradeCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.PassGradeCnt):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.PassGrade.append(value)
+        return _pos
+
+    def Clear(self):
+        self.MapID = 0
+        self.EnterCnt = 0
+        self.ADAddCnt = 0
+        self.BuyAddCnt = 0
+        self.ItemAddCnt = 0
+        self.PassLineID = 0
+        self.PassGradeCnt = 0
+        self.PassGrade = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 4
+        length += 2
+        length += 1
+        length += 1
+        length += 2
+        length += 4
+        length += 1
+        length += 4 * self.PassGradeCnt
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteDWORD(data, self.MapID)
+        data = CommFunc.WriteWORD(data, self.EnterCnt)
+        data = CommFunc.WriteBYTE(data, self.ADAddCnt)
+        data = CommFunc.WriteBYTE(data, self.BuyAddCnt)
+        data = CommFunc.WriteWORD(data, self.ItemAddCnt)
+        data = CommFunc.WriteDWORD(data, self.PassLineID)
+        data = CommFunc.WriteBYTE(data, self.PassGradeCnt)
+        for i in range(self.PassGradeCnt):
+            data = CommFunc.WriteDWORD(data, self.PassGrade[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                MapID:%d,
+                                EnterCnt:%d,
+                                ADAddCnt:%d,
+                                BuyAddCnt:%d,
+                                ItemAddCnt:%d,
+                                PassLineID:%d,
+                                PassGradeCnt:%d,
+                                PassGrade:%s
+                                '''\
+                                %(
+                                self.MapID,
+                                self.EnterCnt,
+                                self.ADAddCnt,
+                                self.BuyAddCnt,
+                                self.ItemAddCnt,
+                                self.PassLineID,
+                                self.PassGradeCnt,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagSCFBInfoList(Structure):
+    Head = tagHead()
+    FBDataCnt = 0    #(BYTE FBDataCnt)// 副本数据个数
+    FBDataList = list()    #(vector<tagSCFBInfo> FBDataList)// 副本数据列表
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x20
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.FBDataCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.FBDataCnt):
+            temFBDataList = tagSCFBInfo()
+            _pos = temFBDataList.ReadData(_lpData, _pos)
+            self.FBDataList.append(temFBDataList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA3
+        self.Head.SubCmd = 0x20
+        self.FBDataCnt = 0
+        self.FBDataList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.FBDataCnt):
+            length += self.FBDataList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.FBDataCnt)
+        for i in range(self.FBDataCnt):
+            data = CommFunc.WriteString(data, self.FBDataList[i].GetLength(), self.FBDataList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                FBDataCnt:%d,
+                                FBDataList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.FBDataCnt,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagSCFBInfoList=tagSCFBInfoList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCFBInfoList.Head.Cmd,m_NAtagSCFBInfoList.Head.SubCmd))] = m_NAtagSCFBInfoList
 
 
 #------------------------------------------------------
@@ -8186,165 +8237,6 @@
 
 m_NAtagMCPackDownloadRecord=tagMCPackDownloadRecord()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPackDownloadRecord.Cmd,m_NAtagMCPackDownloadRecord.SubCmd))] = m_NAtagMCPackDownloadRecord
-
-
-#------------------------------------------------------
-# A3 20 玩家副本相关信息 #tagMCPlayerFBInfoData
-
-class  tagMCFBInfo(Structure):
-    FBID = 0    #(DWORD FBID)//fbId
-    EnterCnt = 0    #(WORD EnterCnt)//当日进入次数
-    RecoverCnt = 0    #(WORD RecoverCnt)//找回次数
-    ItemAddCnt = 0    #(WORD ItemAddCnt)//物品增加次数
-    PassGradeCnt = 0    #(BYTE PassGradeCnt)//星级值对应个数, 每个key存9个lineID
-    PassGrade = list()    #(vector<DWORD> PassGrade)//副本线路对应星级值列表
-    EnterCntTotal = 0    #(DWORD EnterCntTotal)//累计进入次数
-    PassLineID = 0    #(DWORD PassLineID)//已过关到的lineID
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.FBID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.EnterCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.RecoverCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.ItemAddCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.PassGradeCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.PassGradeCnt):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.PassGrade.append(value)
-        self.EnterCntTotal,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.PassLineID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.FBID = 0
-        self.EnterCnt = 0
-        self.RecoverCnt = 0
-        self.ItemAddCnt = 0
-        self.PassGradeCnt = 0
-        self.PassGrade = list()
-        self.EnterCntTotal = 0
-        self.PassLineID = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 2
-        length += 2
-        length += 2
-        length += 1
-        length += 4 * self.PassGradeCnt
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.FBID)
-        data = CommFunc.WriteWORD(data, self.EnterCnt)
-        data = CommFunc.WriteWORD(data, self.RecoverCnt)
-        data = CommFunc.WriteWORD(data, self.ItemAddCnt)
-        data = CommFunc.WriteBYTE(data, self.PassGradeCnt)
-        for i in range(self.PassGradeCnt):
-            data = CommFunc.WriteDWORD(data, self.PassGrade[i])
-        data = CommFunc.WriteDWORD(data, self.EnterCntTotal)
-        data = CommFunc.WriteDWORD(data, self.PassLineID)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                FBID:%d,
-                                EnterCnt:%d,
-                                RecoverCnt:%d,
-                                ItemAddCnt:%d,
-                                PassGradeCnt:%d,
-                                PassGrade:%s,
-                                EnterCntTotal:%d,
-                                PassLineID:%d
-                                '''\
-                                %(
-                                self.FBID,
-                                self.EnterCnt,
-                                self.RecoverCnt,
-                                self.ItemAddCnt,
-                                self.PassGradeCnt,
-                                "...",
-                                self.EnterCntTotal,
-                                self.PassLineID
-                                )
-        return DumpString
-
-
-class  tagMCPlayerFBInfoData(Structure):
-    Head = tagHead()
-    FBDataCnt = 0    #(BYTE FBDataCnt)// 副本数据个数
-    FBDataList = list()    #(vector<tagMCFBInfo> FBDataList)// 副本数据列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0x20
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.FBDataCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.FBDataCnt):
-            temFBDataList = tagMCFBInfo()
-            _pos = temFBDataList.ReadData(_lpData, _pos)
-            self.FBDataList.append(temFBDataList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA3
-        self.Head.SubCmd = 0x20
-        self.FBDataCnt = 0
-        self.FBDataList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.FBDataCnt):
-            length += self.FBDataList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.FBDataCnt)
-        for i in range(self.FBDataCnt):
-            data = CommFunc.WriteString(data, self.FBDataList[i].GetLength(), self.FBDataList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                FBDataCnt:%d,
-                                FBDataList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.FBDataCnt,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCPlayerFBInfoData=tagMCPlayerFBInfoData()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPlayerFBInfoData.Head.Cmd,m_NAtagMCPlayerFBInfoData.Head.SubCmd))] = m_NAtagMCPlayerFBInfoData
 
 
 #------------------------------------------------------
@@ -15327,6 +15219,114 @@
 
 
 #------------------------------------------------------
+# A7 22 广告信息列表 #tagSCADInfoList
+
+class  tagSCADInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ADID", c_ushort),    #广告ID
+                  ("ADCnt", c_ubyte),    #今日已领取广告奖励次数
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.ADID = 0
+        self.ADCnt = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagSCADInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// A7 22 广告信息列表 //tagSCADInfoList:
+                                ADID:%d,
+                                ADCnt:%d
+                                '''\
+                                %(
+                                self.ADID,
+                                self.ADCnt
+                                )
+        return DumpString
+
+
+class  tagSCADInfoList(Structure):
+    Head = tagHead()
+    Count = 0    #(BYTE Count)
+    ADInfoList = list()    #(vector<tagSCADInfo> ADInfoList)
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xA7
+        self.Head.SubCmd = 0x22
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.Count):
+            temADInfoList = tagSCADInfo()
+            _pos = temADInfoList.ReadData(_lpData, _pos)
+            self.ADInfoList.append(temADInfoList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xA7
+        self.Head.SubCmd = 0x22
+        self.Count = 0
+        self.ADInfoList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        for i in range(self.Count):
+            length += self.ADInfoList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.Count)
+        for i in range(self.Count):
+            data = CommFunc.WriteString(data, self.ADInfoList[i].GetLength(), self.ADInfoList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                Count:%d,
+                                ADInfoList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.Count,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagSCADInfoList=tagSCADInfoList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCADInfoList.Head.Cmd,m_NAtagSCADInfoList.Head.SubCmd))] = m_NAtagSCADInfoList
+
+
+#------------------------------------------------------
 # A7 04 通知世界Boss伤血列表 #tagMCBossHurtList
 
 class  tagMCHurtPlayer(Structure):
@@ -17392,73 +17392,6 @@
 
 m_NAtagMCGiveAwardInfo=tagMCGiveAwardInfo()
 ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGiveAwardInfo.Head.Cmd,m_NAtagMCGiveAwardInfo.Head.SubCmd))] = m_NAtagMCGiveAwardInfo
-
-
-#------------------------------------------------------
-# A8 12 守护成功拾取物品 #tagMCGuradPickupItemSucc
-
-class  tagMCGuradPickupItemSucc(Structure):
-    Head = tagHead()
-    ItemCount = 0    #(WORD ItemCount)
-    MapItemID = list()    #(vector<WORD> MapItemID)//size = ItemCount
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xA8
-        self.Head.SubCmd = 0x12
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.ItemCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        for i in range(self.ItemCount):
-            value,_pos=CommFunc.ReadWORD(_lpData,_pos)
-            self.MapItemID.append(value)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xA8
-        self.Head.SubCmd = 0x12
-        self.ItemCount = 0
-        self.MapItemID = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 2
-        length += 2 * self.ItemCount
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteWORD(data, self.ItemCount)
-        for i in range(self.ItemCount):
-            data = CommFunc.WriteWORD(data, self.MapItemID[i])
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                ItemCount:%d,
-                                MapItemID:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.ItemCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagMCGuradPickupItemSucc=tagMCGuradPickupItemSucc()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGuradPickupItemSucc.Head.Cmd,m_NAtagMCGuradPickupItemSucc.Head.SubCmd))] = m_NAtagMCGuradPickupItemSucc
 
 
 #------------------------------------------------------
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetFBStar.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetFBStar.py
index 206232d..29e8412 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetFBStar.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetFBStar.py
@@ -35,11 +35,11 @@
 #        if mapID not in allMapIDList:
 #            GameWorld.DebugAnswer(curPlayer, "该地图ID不可设置!")
 #            return
-        GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineID, star, False, [mapID])
+        GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_FBStar, lineID, star, False, [mapID])
     elif len(paramList) == 1:
         mapID = paramList[0]
         for keyNum in range(ChConfig.Def_FBStar_MaxKeyCnt):
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId % (mapID, keyNum), 0)
+            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FBStar % (mapID, keyNum), 0)
     else:
         #GameWorld.DebugAnswer(curPlayer, "重置所有副本星级: SetFBStar 0")
         GameWorld.DebugAnswer(curPlayer, "设置指定副本lineID星级: SetFBStar 副本ID lineID 星级")
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py
index 01e4c7f..a993db4 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py
@@ -498,7 +498,7 @@
             playerZoneID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ReqCrossFBZoneID)
             playerFuncLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ReqCrossFBFuncLine)
             # 跨服排位分区与玩家分区可能不一样
-            if (fbZoneID != playerZoneID or fbFuncLineID != playerFuncLineID) and mapID not in [ChConfig.Def_FBMapID_CrossChampionship]:
+            if (fbZoneID != playerZoneID or fbFuncLineID != playerFuncLineID) and mapID not in []:
                 GameWorld.ErrLog("DoEnterFB 玩家与当前副本线路所属分区或功能分线不同,踢出玩家!fbZoneID=%s,playerZoneID=%s,fbFuncLineID=%s,playerFuncLineID=%s" 
                                  % (fbZoneID, playerZoneID, fbFuncLineID, playerFuncLineID), curPlayerID)
                 CrossRealmPlayer.PlayerExitCrossServer(curPlayer)
@@ -1069,13 +1069,6 @@
     for key, mapIDList in ChConfig.Def_FB_MapID.items():
         if not mapIDList:
             continue
-        mapID = mapIDList[0]
-        ipyData = FBCommon.GetFBIpyData(mapID)
-        if ipyData and ipyData.GetDayResetType():
-            if onDayType != ipyData.GetDayResetType():
-                continue
-        elif onDayType != ShareDefine.Def_OnEventTypeEx:
-            continue
         callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (key, "OnFBPlayerOnDay"))
         if callFunc:
             callFunc(curPlayer)
@@ -1531,19 +1524,18 @@
     return callFunc(curPlayer, addExp, expViewType)
 
 ## 副本扫荡询问
-def OnPlayerFBSweepAsk(curPlayer, mapID, lineID, cnt, isFinish, dataEx):
+def OnPlayerFBSweepAsk(curPlayer, mapID, lineID, cnt, dataEx):
     do_FBLogic_ID = __GetFBLogic_MapID(mapID)
     
     callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnPlayerFBSweepAsk"))
     
-    # 没有额外条件判断默认返回True
     if callFunc == None:
-        return True
+        return
 
-    return callFunc(curPlayer, mapID, lineID, cnt, isFinish, dataEx)
+    return callFunc(curPlayer, mapID, lineID, cnt, dataEx)
 
 ## 副本扫荡结果
-def OnPlayerFBSweepResult(curPlayer, mapID, lineID, cnt, isFinish, dataEx):
+def OnPlayerFBSweepResult(curPlayer, mapID, lineID, cnt, dataEx):
     do_FBLogic_ID = __GetFBLogic_MapID(mapID)
     
     callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnPlayerFBSweepResult"))
@@ -1551,7 +1543,7 @@
     if callFunc == None:
         return False
 
-    return callFunc(curPlayer, mapID, lineID, cnt, isFinish, dataEx)
+    return callFunc(curPlayer, mapID, lineID, cnt, dataEx)
 
 ## 开始公共CD副本扫荡
 def OnStartPubCDFBSweep(curPlayer, mapID, lineID, cnt, dataEx):
@@ -2249,17 +2241,6 @@
     if callFunc == None:
         return
     return callFunc()
-
-## 是否需要做进入副本通用检查条件逻辑,默认需要检查
-def OnNeedCheckCanEnterFBComm(curPlayer, mapID, lineID):
-    do_FBLogic_ID = __GetFBLogic_MapID(mapID)
-    
-    callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnNeedCheckCanEnterFBComm"))
-    
-    if callFunc == None:
-        return True
-    
-    return callFunc(curPlayer, mapID, lineID)
 
 def OnTurnFightRequest(curPlayer, mapID, funcLineID, tagType, tagID, valueList):
     ## 回合战斗请求 - 地图验证
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 1f898d3..51b29fe 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
@@ -16,34 +16,22 @@
 import IPY_GameWorld
 import PlayerControl
 import ItemCommon
-import GameMap
 import NPCCommon
 import ReadChConfig
-import BuffSkill
 import ChPyNetSendPack
 import NetPackCommon
-import SkillCommon
 import IpyGameDataPY
-import PlayerFB
 import ShareDefine
-import EventReport
-import PlayerFamily
-import PlayerActivity
-import ItemControler
-import PlayerSuccess
-import GameFuncComm
 import PyGameData
 import GameObj
 import FBLogic
 import ChConfig
 import PlayerGoldInvest
+import ObjPool
 
-import datetime
 import random
 import json
 import math
-import time
-import copy
 #---------------------------------------------------------------------
 #全局变量
 Def_VSFB_CanEnter = 'VSFB_CanEnter'                   #可以进入
@@ -125,29 +113,25 @@
 
 def GetFBLineEnterPosInfo(mapID, lineID, fbLineIpyData=None):
     # 坐标信息
+    return [10,10]
+def GetPassAwardList(mapID, lineID):
+    # 过关奖励
+    fbLineIpyData = GetFBLineIpyData(mapID, lineID)
+    return [] if not fbLineIpyData else fbLineIpyData.GetPassAwardList()
+def GetSweepAwardList(mapID, lineID, sweepCnt):
+    # 扫荡奖励
+    fbLineIpyData = GetFBLineIpyData(mapID, lineID)
     if not fbLineIpyData:
-        fbLineIpyData = GetFBLineIpyData(mapID, lineID)
-    return None if not fbLineIpyData else fbLineIpyData.GetEnterPosInfo()
-def GetFBLineStepTime(mapID, lineID=0):
-    # 阶段时间信息
-    fbLineIpyData = GetFBLineIpyData(mapID, lineID)
-    return None if not fbLineIpyData else fbLineIpyData.GetStepTime()
-def GetFBLineRefreshNPC(mapID, lineID=0): 
-    # 刷怪信息
-    fbLineIpyData = GetFBLineIpyData(mapID, lineID)
-    return None if not fbLineIpyData else fbLineIpyData.GetRefreshNPC()
-def GetFBLineGrade(mapID, lineID=0):
-    # 评级规则信息
-    fbLineIpyData = GetFBLineIpyData(mapID, lineID)
-    return None if not fbLineIpyData else fbLineIpyData.GetGradeInfo()
-def GetFBLineReward(mapID, lineID):
-    # 奖励信息;支持扫荡取奖励
-    fbLineIpyData = GetFBLineIpyData(mapID, lineID)
-    return None if not fbLineIpyData else fbLineIpyData.GetRewardInfo()
-
-def GetFBGradeRewardRateList(mapID):
-    fbIpyData = GetFBIpyData(mapID)
-    return [] if not fbIpyData else fbIpyData.GetRewardRate()
+        return []
+    awardItemList = fbLineIpyData.GetSweepAwardList()
+    if not awardItemList:
+        awardItemList = fbLineIpyData.GetPassAwardList()
+        
+    sweepItemList = []
+    for itemInfo in awardItemList:
+        itemID, itemCount = itemInfo[:2]
+        sweepItemList.append([itemID, itemCount * sweepCnt])
+    return sweepItemList
 
 def GetFBFuncOpenState(dataMapID):
     ## 获取副本开启状态 @return: 0-关闭;1-开启
@@ -165,38 +149,40 @@
 
 def IsFBPass(curPlayer, mapID, lineID):
     ## 副本线路是否已过关
-    passLineID = 0
     if mapID == ChConfig.Def_FBMapID_Main:
         return PlayerControl.IsMainLevelPass(curPlayer, lineID)
     
-    ipyData = IpyGameDataPY.GetIpyGameDataNotLog('FBGeneralTrain', mapID, lineID)
-    if ipyData:
-        passLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBPassLineID % mapID)
-    else:
-        grade = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineID, False, [mapID])
+    if mapID in ChConfig.PassByStarMapIDList:
+        grade = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_FBStar, lineID, False, [mapID])
         if grade:
             return True
-            
-    if passLineID >= lineID:
-        return True
-    
+    else:
+        passLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBPassLineID % mapID)
+        if passLineID >= lineID:
+            return True
+        
     return False
+
+def SetFBPass(curPlayer, mapID, funcLineID, isNotify=True):
+    passLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBPassLineID % mapID)
+    if funcLineID > passLineID:
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FBPassLineID % mapID, funcLineID)
+    if isNotify:
+        Sync_FBPlayerFBInfoData(curPlayer, mapID)
+    return
 
 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:
         #开服天开放检查
-        if not GetFBFuncOpenState(mapID):
-            GameWorld.Log("当前时间未开放该副本!mapID=%s" % (mapID), playerID)
-            if isNotify:
-                PlayerControl.NotifyCode(curPlayer, "FBIsNotOpen")
-            return ShareDefine.EntFBAskRet_FBClose
+        #if not GetFBFuncOpenState(mapID):
+        #    GameWorld.Log("当前时间未开放该副本!mapID=%s" % (mapID), playerID)
+        #    if isNotify:
+        #        PlayerControl.NotifyCode(curPlayer, "FBIsNotOpen")
+        #    return ShareDefine.EntFBAskRet_FBClose
         
         #进入次数判断
         canEnter, notifyMark = __CheckCanEnterFBByTime(curPlayer, mapID, lineID, fbIpyData, reqEnterCnt, isTeamAsk)
@@ -210,25 +196,18 @@
         #等级判断
         curLV = curPlayer.GetLV()
         lvLimitMin = fbLineIpyData.GetLVLimitMin()
-        lvLimitMax = fbLineIpyData.GetLVLimitMax()
         if lvLimitMin and curLV < lvLimitMin:
             GameWorld.Log("玩家等级不足, 无法进入副本!mapID=%s,lineID=%s,curLV(%s) < lvLimitMin(%s)" 
                           % (mapID, lineID, curLV, lvLimitMin), playerID)
             if isNotify:
                 PlayerControl.NotifyCode(curPlayer, "FbLV", [mapID])
             return ShareDefine.EntFBAskRet_LVLimit
-        if lvLimitMax and curLV > lvLimitMax:
-            GameWorld.Log("玩家等级超过, 无法进入副本!mapID=%s,lineID=%s,curLV(%s) > lvLimitMax(%s)" 
-                          % (mapID, lineID, curLV, lvLimitMax), playerID)
-            if isNotify:
-                PlayerControl.NotifyCode(curPlayer, "FbLV", [mapID])
-            return ShareDefine.EntFBAskRet_LVLimit
         
         #门票判断
-        if not GetFBEnterTicket(curPlayer, mapID, lineID, fbLineIpyData, reqEnterCnt, isTeamAsk)[0]:
-            if isNotify:
-                PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_157069", [mapID])
-            return ShareDefine.EntFBAskRet_NoTicket
+        #if not GetFBEnterTicket(curPlayer, mapID, lineID, fbLineIpyData, reqEnterCnt, isTeamAsk)[0]:
+        #    if isNotify:
+        #        PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_157069", [mapID])
+        #    return ShareDefine.EntFBAskRet_NoTicket
         
     return ShareDefine.EntFBAskRet_OK
 
@@ -239,42 +218,39 @@
         return True, ""
     
     #playerID = curPlayer.GetPlayerID()
-    enterCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_EnterFbCntDay % mapID)
+    enterCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FbEnterCnt % mapID)
     maxCnt = GetEnterFBMaxCnt(curPlayer, mapID)
     if enterCnt + reqEnterCnt <= maxCnt:
         return True, ""
     
-    ### 以下是到达次数上限后的处理
-    fbType = GameWorld.GetMap().GetMapFBTypeByMapID(mapID)
+    if mapID in ChConfig.UnPassFreeMapIDList and not IsFBPass(curPlayer, mapID, lineID):
+        return True, ""
     
-    # 单人副本达到次数后不可再进入
-    if fbType == IPY_GameWorld.fbtSingle:
-        #GameWorld.Log("已达到当日最大进入次数!单人副本 mapID=%s,enterCnt=%s,reqEnterCnt=%s,maxTimes=%s,maxCnt=%s" 
-        #              % (mapID, enterCnt, reqEnterCnt, maxTimes, maxCnt), playerID)
-        return False, "GeRen_chenxin_268121"
+#    ### 以下是到达次数上限后的处理
+#    fbType = GameWorld.GetMap().GetMapFBTypeByMapID(mapID)
+#    
+#    # 单人副本达到次数后不可再进入
+#    if fbType == IPY_GameWorld.fbtSingle:
+#        #GameWorld.Log("已达到当日最大进入次数!单人副本 mapID=%s,enterCnt=%s,reqEnterCnt=%s,maxTimes=%s,maxCnt=%s" 
+#        #              % (mapID, enterCnt, reqEnterCnt, maxTimes, maxCnt), playerID)
+#        return False, "GeRen_chenxin_268121"
+#    
+#    # 组队副本
+#    if fbType == IPY_GameWorld.fbtTeam:
+#        # 可助战的不可单人进入助战,可发起匹配
+#        if not isTeamAsk and (not curPlayer.GetTeamID() or curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_TeamMemCount) <= 1):
+#            #GameWorld.Log("已达到当日最大进入次数!组队副本不可单人助战! mapID=%s,enterCnt=%s,reqEnterCnt=%s,maxTimes=%s,maxCnt=%s" 
+#            #              % (mapID, enterCnt, reqEnterCnt, maxTimes, maxCnt), playerID)
+#            return False, "TeamSingleEnter"
+#        
+#    if mapID not in ChConfig.Def_NoLimitEnterCntMap:
+#        #GameWorld.Log("已达到当日最大进入次数! mapID=%s,enterCnt=%s,reqEnterCnt=%s,maxTimes=%s,maxCnt=%s" 
+#        #              % (mapID, enterCnt, reqEnterCnt, maxTimes, maxCnt), playerID)
+#        return False, "GeRen_chenxin_268121"
     
-    # 组队副本
-    if fbType == IPY_GameWorld.fbtTeam:
-        # 无助战的不可再进入
-        if not fbIpyData.GetHelpPoint():
-            #GameWorld.Log("已达到当日最大进入次数!组队副本 mapID=%s,enterCnt=%s,reqEnterCnt=%s,maxTimes=%s,maxCnt=%s" 
-            #              % (mapID, enterCnt, reqEnterCnt, maxTimes, maxCnt), playerID)
-            return False, "GeRen_chenxin_268121"
-        
-        # 可助战的不可单人进入助战,可发起匹配
-        if not isTeamAsk and (not curPlayer.GetTeamID() or curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_TeamMemCount) <= 1):
-            #GameWorld.Log("已达到当日最大进入次数!组队副本不可单人助战! mapID=%s,enterCnt=%s,reqEnterCnt=%s,maxTimes=%s,maxCnt=%s" 
-            #              % (mapID, enterCnt, reqEnterCnt, maxTimes, maxCnt), playerID)
-            return False, "TeamSingleEnter"
-        
-    elif mapID not in ChConfig.Def_NoLimitEnterCntMap:
-        #GameWorld.Log("已达到当日最大进入次数! mapID=%s,enterCnt=%s,reqEnterCnt=%s,maxTimes=%s,maxCnt=%s" 
-        #              % (mapID, enterCnt, reqEnterCnt, maxTimes, maxCnt), playerID)
-        return False, "GeRen_chenxin_268121"
-    
-    # 周进入次数暂不做,待扩展...
-    
-    return True, ""
+    GameWorld.DebugLog("可进入次数不足: mapID=%s, lineID=%s, enterCnt(%s) + reqEnterCnt(%s) <= maxCnt=%s" 
+                       % (mapID, lineID, enterCnt, reqEnterCnt, maxCnt))
+    return False, "GeRen_chenxin_268121"
 
 ## 获取副本进入门票信息
 #  @param curPlayer 玩家实例
@@ -283,38 +259,39 @@
 #  @return [是否可进, [[门票索引列表, delCnt], ...], 删除个数, 是否有绑定, 扣钱信息]
 def GetFBEnterTicket(curPlayer, mapID, lineID=0, fbLineIpyData=None, reqEnterCnt=1, isTeamAsk=False):
     #门票判断
-    if not fbLineIpyData:
-        fbLineIpyData = GetFBLineIpyData(mapID, lineID)
-        
-    ticketID = fbLineIpyData.GetTicketID()
-    if not ticketID:
-        return True, [], 0, False, []
-    
-    ticketCostCntList = fbLineIpyData.GetTicketCostCnt()
-    if not ticketCostCntList:
-        GameWorld.ErrLog("没有配置门票消耗!mapID=%s,lineID=%s" % (mapID, lineID), curPlayer.GetPlayerID())
-        return False, [], 0, False, []
-    
-    enterCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_EnterFbCntDay % mapID)
-    costCnt = ticketCostCntList[-1] if enterCnt >= len(ticketCostCntList) else ticketCostCntList[enterCnt]
-    totalCostCnt = costCnt*reqEnterCnt
-    if not totalCostCnt:
-        GameWorld.ErrLog("没有配置门票消耗!mapID=%s,lineID=%s" % (mapID, lineID), curPlayer.GetPlayerID())
-        return False, [], 0, False, []
-    
-    itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
-    enough, indexList, hasBind, lackCnt = ItemCommon.GetItem_FromPack_ByID_ExEx(ticketID, itemPack, totalCostCnt)
-    if not enough:
-        ticketPrice = fbLineIpyData.GetTicketPrice()
-        if ticketPrice and not isTeamAsk: #组队进组队副本时必须要有门票道具
-            costMoney = ticketPrice * lackCnt
-            costMoneyList = PlayerControl.HaveMoneyEx(curPlayer, ShareDefine.TYPE_Price_Gold_Paper_Money, costMoney)
-            return bool(costMoneyList), indexList, totalCostCnt, hasBind, costMoneyList
-        GameWorld.DebugLog("门票不足, 无法进入副本!mapID=%s,lineID=%s,ticketID=%s,reqEnterCnt=%s,totalCostCnt=%s" 
-                      % (mapID, lineID, ticketID, reqEnterCnt, totalCostCnt), curPlayer.GetPlayerID())
-        return False, [], 0, False, []
-    
-    return enough, indexList, totalCostCnt, hasBind, []
+    return True, [], 0, False, []
+#    if not fbLineIpyData:
+#        fbLineIpyData = GetFBLineIpyData(mapID, lineID)
+#        
+#    ticketID = fbLineIpyData.GetTicketID()
+#    if not ticketID:
+#        return True, [], 0, False, []
+#    
+#    ticketCostCntList = fbLineIpyData.GetTicketCostCnt()
+#    if not ticketCostCntList:
+#        GameWorld.ErrLog("没有配置门票消耗!mapID=%s,lineID=%s" % (mapID, lineID), curPlayer.GetPlayerID())
+#        return False, [], 0, False, []
+#    
+#    enterCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FbEnterCnt % mapID)
+#    costCnt = ticketCostCntList[-1] if enterCnt >= len(ticketCostCntList) else ticketCostCntList[enterCnt]
+#    totalCostCnt = costCnt*reqEnterCnt
+#    if not totalCostCnt:
+#        GameWorld.ErrLog("没有配置门票消耗!mapID=%s,lineID=%s" % (mapID, lineID), curPlayer.GetPlayerID())
+#        return False, [], 0, False, []
+#    
+#    itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
+#    enough, indexList, hasBind, lackCnt = ItemCommon.GetItem_FromPack_ByID_ExEx(ticketID, itemPack, totalCostCnt)
+#    if not enough:
+#        ticketPrice = fbLineIpyData.GetTicketPrice()
+#        if ticketPrice and not isTeamAsk: #组队进组队副本时必须要有门票道具
+#            costMoney = ticketPrice * lackCnt
+#            costMoneyList = PlayerControl.HaveMoneyEx(curPlayer, ShareDefine.TYPE_Price_Gold_Paper_Money, costMoney)
+#            return bool(costMoneyList), indexList, totalCostCnt, hasBind, costMoneyList
+#        GameWorld.DebugLog("门票不足, 无法进入副本!mapID=%s,lineID=%s,ticketID=%s,reqEnterCnt=%s,totalCostCnt=%s" 
+#                      % (mapID, lineID, ticketID, reqEnterCnt, totalCostCnt), curPlayer.GetPlayerID())
+#        return False, [], 0, False, []
+#    
+#    return enough, indexList, totalCostCnt, hasBind, []
 
 ## 获取副本进入门票信息
 #  @param curPlayer 玩家实例
@@ -1522,28 +1499,22 @@
 
 ## ---------------------------------- TD ---------------------------------------
 def GetEnterFBMaxCnt(curPlayer, mapID):
-    ## 获取副本最大可进入次数: 基本次数 + 时间已恢复次数 + VIP额外次数 + 购买次数 + 找回次数 + 使用道具增加次数
+    ## 获取副本最大可进入次数: 基本次数 + 广告次数 + 购买次数 + 使用道具增加次数 + 其他
     fbIpyData = GetFBIpyData(mapID)
     if not fbIpyData:
         return 0
     maxTimes = fbIpyData.GetDayTimes()
-    
-    mwAddCnt = 0#wmpIpyData.GetEffectValue() if wmpIpyData else 0
-    extraCnt = 0
-    buyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_BuyFbCntDay % mapID)
-    itemAddCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ItemAddFbCnt % mapID)
-    regainFbCnt = 0
+    adCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBADCnt % mapID)
+    buyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBBuyCnt % mapID)
+    itemCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBItemCnt % mapID)
     investFBCnt = PlayerGoldInvest.GetAddFBCnt(curPlayer, mapID)
-    maxCnt = maxTimes + regainFbCnt + extraCnt + buyCnt + mwAddCnt + itemAddCnt + investFBCnt
+    maxCnt = maxTimes + adCnt + buyCnt + itemCnt + investFBCnt
     return maxCnt
 
-## 玩家进入副本次数
-#  @param curPlayer 玩家实例
-#  @param fbID 副本id
-#  @return bool
 def GetEnterFBCount(curPlayer, fbID, lineBit=-1):
+    ## 玩家进入副本次数
     fbID = GetRecordMapID(fbID)
-    enterCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_EnterFbCntDay % fbID)
+    enterCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FbEnterCnt % fbID)
     if lineBit >= 0:
         return GameWorld.GetDataByDigitPlace(enterCnt, lineBit)
     return enterCnt
@@ -1551,23 +1522,19 @@
 def AddFBCntByItem(curPlayer, itemID, mapID, addCnt):
     ## 物品增加副本次数
     mapID = GetRecordMapID(mapID)
-    itemAddCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ItemAddFbCnt % mapID)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_ItemAddFbCnt % mapID, itemAddCnt + addCnt)
+    itemAddCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBItemCnt % mapID)
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FBItemCnt % mapID, itemAddCnt + addCnt)
     Sync_FBPlayerFBInfoData(curPlayer, mapID)
     PlayerControl.NotifyCode(curPlayer, 'AddActivityCount_1', [itemID, mapID, addCnt])
     return
 
-## 增加玩家进入副本次数
-#  @param curPlayer 玩家实例
-#  @param fbID 副本id
-#  @param addCount 增加次数
-#  @return 返回值无意义
 def AddEnterFBCount(curPlayer, fbID, addCount=1, lineBit=-1, isFree=False):
+    ## 增加玩家进入副本次数
     ## @param isFree: 是否免费进入的,免费的不增加实际进入次数,但需要触发进入次数额外处理,如活跃、成就等
-    addCountEx = addCount
+    #addCountEx = addCount
     addCount = 0 if isFree else addCount
     fbID = GetRecordMapID(fbID)
-    enterCntKey = ChConfig.Def_Player_Dict_EnterFbCntDay % fbID
+    enterCntKey = ChConfig.Def_Player_Dict_FbEnterCnt % fbID
     enterCnt = curPlayer.NomalDictGetProperty(enterCntKey)
     if lineBit >= 0:
         curLineEnterCnt = GameWorld.GetDataByDigitPlace(enterCnt, lineBit)
@@ -1582,48 +1549,21 @@
         addCount = updCnt-enterCnt
         PlayerControl.NomalDictSetProperty(curPlayer, enterCntKey, updCnt)
         
-        PlayerActivity.OnEnterFBActivity(curPlayer, fbID, updCnt, addCountEx)
-        PlayerSuccess.AddEnterFBSuccess(curPlayer, fbID, addCountEx)
+        #PlayerActivity.OnEnterFBActivity(curPlayer, fbID, updCnt, addCountEx)
+        #PlayerSuccess.AddEnterFBSuccess(curPlayer, fbID, addCountEx)
         updValue = updCnt
-    enterCntTotalKey = ChConfig.Def_Player_Dict_EnterFbCntTotal % fbID
-    enterCntTotal = min(curPlayer.NomalDictGetProperty(enterCntTotalKey) + addCount, ChConfig.Def_UpperLimit_DWord)
-    PlayerControl.NomalDictSetProperty(curPlayer, enterCntTotalKey, enterCntTotal)
-    GameWorld.DebugLog("    AddEnterFBCount fbID=%s, addCount=%s, lineBit=%s, enterCnt=%s,updValue=%s,enterCntTotal=%s" 
-                       % (fbID, addCount, lineBit, enterCnt, updValue, enterCntTotal), curPlayer.GetPlayerID())
+    GameWorld.DebugLog("    AddEnterFBCount fbID=%s, addCount=%s, lineBit=%s, enterCnt=%s,updValue=%s" 
+                       % (fbID, addCount, lineBit, enterCnt, updValue), curPlayer.GetPlayerID())
     Sync_FBPlayerFBInfoData(curPlayer, fbID)
     return True
 
 def FBOnWeek(curPlayer, onWeekType):
-    
-    mapIDInfo = []
-    ipyDataMgr = IpyGameDataPY.IPY_Data()
-    for i in xrange(ipyDataMgr.GetFBFuncCount()):
-        ipyData = ipyDataMgr.GetFBFuncByIndex(i)
-        mapID = ipyData.GetDataMapID()
-        weekTimes = ipyData.GetWeekTimes()
-        # 没有周次数限制的不处理
-        if not weekTimes:
-            continue
-        # 重置类型不同的不处理
-        if ipyData.GetWeekResetType() != onWeekType:
-            continue
-        
-        # 重置周次数
-        enterCntWeekKey = ChConfig.Def_Player_Dict_EnterFbCntWeek % mapID
-        if curPlayer.NomalDictGetProperty(enterCntWeekKey):
-            PlayerControl.NomalDictSetProperty(curPlayer, enterCntWeekKey, 0)
-            mapIDInfo.append(mapID)
-            
-    if mapIDInfo:
-        Sync_FBPlayerFBInfoData(curPlayer, mapIDInfo)
-        
     return
 
-## 玩家通用副本OnDay处理
-#  @param curPlayer: 玩家实例
-#  @return: None
 def FBOnDay(curPlayer, onDayType):
     GameWorld.Log("副本过天处理,FBOnDay...", curPlayer.GetPlayerID())
+    if onDayType != ShareDefine.Def_OnEventType:
+        return
     FBLogic.OnFBPlayerOnDay(curPlayer, onDayType) # 在重置次数之前,可用于处理资源找回
     
     mapIDInfo = []
@@ -1631,44 +1571,18 @@
     for i in xrange(ipyDataMgr.GetFBFuncCount()):
         ipyData = ipyDataMgr.GetFBFuncByIndex(i)
         mapID = ipyData.GetDataMapID()
-        
-        dayTimes = ipyData.GetDayTimes()
+        enterCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FbEnterCnt % mapID)
         # 没有日次数限制的不处理
-        if not dayTimes and not ipyData.GetBuyTimesVIPPriID() and not ipyData.GetExtraTimesVIPPriID() and not ipyData.GetExtraTimesMWPriID():
-            #GameWorld.DebugLog("    不需要重置的副本,mapID=%s,dayTimes=%s,vipBuyPriID=%s,vipExtraTime=%s" 
-            #                   % (mapID, dayTimes, ipyData.GetBuyTimesVIPPriID(), ipyData.GetExtraTimesVIPPriID()))
+        if not enterCnt and not ipyData.GetDayTimes() and not ipyData.GetPayCntMax():
             continue
-        
-        # 重置类型不同的不处理
-        if ipyData.GetDayResetType() != onDayType:
-            #GameWorld.DebugLog("    重置时间点不同,不处理,mapID=%s" % mapID)
-            continue
-        
-        maxCnt = GetEnterFBMaxCnt(curPlayer, mapID)
-        
-        # 进入次数
-        enterCntKey = ChConfig.Def_Player_Dict_EnterFbCntDay % mapID
-        enterCnt = curPlayer.NomalDictGetProperty(enterCntKey)
-        PlayerControl.NomalDictSetProperty(curPlayer, enterCntKey, 0)
-            
-        # 购买次数
-        buyCntKey = ChConfig.Def_Player_Dict_BuyFbCntDay % mapID
-        buyCnt = curPlayer.NomalDictGetProperty(buyCntKey)
-        PlayerControl.NomalDictSetProperty(curPlayer, buyCntKey, 0)
-        
-        # 物品增加次数
-        itemAddCntKey = ChConfig.Def_Player_Dict_ItemAddFbCnt % mapID
-        itemAddCnt = curPlayer.NomalDictGetProperty(itemAddCntKey)
-        PlayerControl.NomalDictSetProperty(curPlayer, itemAddCntKey, 0)
-        
-        GameWorld.DebugLog("    重置:mapID=%s,dayTimes=%s,buyCnt=%s,itemAddCnt=%s,maxCnt=%s,enterCnt=%s" 
-                           % (mapID, dayTimes, buyCnt, itemAddCnt, maxCnt, enterCnt))
-        
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FbEnterCnt % mapID, 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FBADCnt % mapID, 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FBBuyCnt % mapID, 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FBItemCnt % mapID, 0)
         mapIDInfo.append(mapID)
         
     if mapIDInfo:
         Sync_FBPlayerFBInfoData(curPlayer, mapIDInfo)
-        Sync_FBPlayerFBBuyCount(curPlayer, mapIDInfo)
     
     return
 
@@ -1678,7 +1592,6 @@
 def FBOnLogin(curPlayer):
     FBLogic.OnFBPlayerOnLogin(curPlayer)
     Sync_FBPlayerFBInfoData(curPlayer)
-    Sync_FBPlayerFBBuyCount(curPlayer)
     return
 
 #//A5 75 购买副本进入次数#tagCMBuyEnterCount
@@ -1688,63 +1601,38 @@
 #    tagHead        Head;
 #    DWORD        FBID;   // 副本ID
 #};
-
 def BuyFBEnterCount(playerIndex, clientData, tick):
     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(playerIndex)
     mapID = clientData.FBID
-    if mapID == ChConfig.Def_FBMapID_Love:
-        coupleID = PlayerControl.GetCoupleID(curPlayer)
-        if not coupleID:
-            GameWorld.DebugLog("没有伴侣无法购买情缘副本次数!")
-            return
     ipyData = GetFBIpyData(mapID)
     if not ipyData:
         return
-    canBuyCnt = 0
+    canBuyCnt = ipyData.GetPayCntMax()
     canBuyCnt += PlayerGoldInvest.GetAddFBBuyCnt(curPlayer, mapID)
-    GameWorld.DebugLog("购买副本进入次数: mapID=%s,canBuyCnt=%s" % (mapID, canBuyCnt))
-    if canBuyCnt <= 0:
-        GameWorld.DebugLog("mapID:%s 不可以购买进入次数"%mapID)
-        return
-    
-    hasBuyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_BuyFbCntDay % mapID)
-    maxDayTimes = ipyData.GetDayTimes()
-    maxCnt = GetEnterFBMaxCnt(curPlayer, mapID)
-    enterCnt = GetEnterFBCount(curPlayer, mapID)
-    if mapID == ChConfig.Def_FBMapID_SealDemon and maxDayTimes and maxCnt - enterCnt >= maxDayTimes:
-        GameWorld.DebugLog('当前次数已满,无需购买。。')
-        return
-    
+    hasBuyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBBuyCnt % mapID)
+    GameWorld.DebugLog("购买副本进入次数: mapID=%s,canBuyCnt=%s,hasBuyCnt=%s" % (mapID, canBuyCnt, hasBuyCnt))
     if hasBuyCnt >= canBuyCnt:
-        GameWorld.DebugLog("购买次数已经用完mapID=%s,hasBuyCnt=%s >= canBuyCnt=%s" % (mapID, hasBuyCnt, canBuyCnt))
+        GameWorld.DebugLog("副本购买次数已经用完! mapID=%s,hasBuyCnt=%s >= canBuyCnt=%s" % (mapID, hasBuyCnt, canBuyCnt))
         return
-    costGoldDict = IpyGameDataPY.GetFuncEvalCfg('BuyFBCntCost', 1, {})
-    costGold = costGoldDict.get(str(mapID), '0')
-    costGold = eval(costGold)
-    costMoneyTypeInfo = IpyGameDataPY.GetFuncEvalCfg('BuyFBCntCost', 2, {})
-    costType = costMoneyTypeInfo.get(str(mapID), ShareDefine.TYPE_Price_Gold_Paper_Money)
-    if costGold <= 0:
-        GameWorld.DebugLog("没有配置购买副本次数消耗货币数! mapID=%s,costType=%s,costGold=%s" % (mapID, costType, costGold))
+    costType = ipyData.GetPayMoneyType()
+    payMoneyList = ipyData.GetPayMoneyValues()
+    if not costType or not payMoneyList:
+        GameWorld.DebugLog("没有配置购买副本次数消耗货币数! mapID=%s,costType=%s,payMoneyList=%s" % (mapID, costType, payMoneyList))
         return
-    costMoneyList = PlayerControl.HaveMoneyEx(curPlayer, costType, costGold)
-    #GameWorld.Log('costMoneyList=%s,costGold=%s'%(costMoneyList,costGold))
-    if not costMoneyList:
+    costMoney = payMoneyList[hasBuyCnt] if len(payMoneyList) > hasBuyCnt else payMoneyList[-1]
+    if not PlayerControl.PayMoney(curPlayer, costType, costMoney, ChConfig.Def_Cost_BuyFBCnt, {"MapID":mapID}):
         return
-    infoDict = {"MapID":mapID}
-    
-    for moneyType, moneyNum in costMoneyList:
-        if not PlayerControl.PayMoney(curPlayer, moneyType, moneyNum, ChConfig.Def_Cost_BuyFBCnt, infoDict):
-            GameWorld.DebugLog("仙玉不足!costGold=%s" % costGold)
-            return
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_BuyFbCntDay % mapID, hasBuyCnt + 1)
-    Sync_FBPlayerFBBuyCount(curPlayer, [mapID])
-    PlayerControl.NotifyCode(curPlayer, 'FBEnterTimeBuy', [mapID])
-    if mapID == ChConfig.Def_FBMapID_Love:
-        coupleID = PlayerControl.GetCoupleID(curPlayer)
-        if coupleID:
-            addItemList = IpyGameDataPY.GetFuncEvalCfg("LoveFB", 3)
-            paramList = [curPlayer.GetPlayerName()]
-            PlayerControl.SendMailByKey("BuyLoveFBCntCoupleMail", [coupleID], addItemList, paramList)
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FBBuyCnt % mapID, hasBuyCnt + 1)
+    Sync_FBPlayerFBInfoData(curPlayer, mapID)
+    return
+
+def AddFBADCnt(curPlayer, mapID):
+    fbIpyData = GetFBIpyData(mapID)
+    if not fbIpyData:
+        return
+    adCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBADCnt % mapID)
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FBADCnt % mapID, adCnt + 1)
+    Sync_FBPlayerFBInfoData(curPlayer, mapID)
     return
 
 ## 获取记录值的mapID
@@ -1752,42 +1640,42 @@
 #  @return
 #  @remarks 一般用于几张地图公用一份存储记录,如组队副本进入次数,CD时间等数据需共享
 def GetRecordMapID(mapID):
-    DataMapIDDict = IpyGameDataPY.GetConfigEx("DataMapIDDict")
-    if not DataMapIDDict:
-        mIDToDataMapIDDict = {} # 场景ID对应功能地图ID
-        dMapIDDict = {}
-        ipyDataMgr = IpyGameDataPY.IPY_Data()
-        for i in xrange(ipyDataMgr.GetFBLineCount()):
-            ipyData = ipyDataMgr.GetFBLineByIndex(i)
-            dMapID = ipyData.GetDataMapID()
-            mID = ipyData.GetMapID()
-            mIDList= dMapIDDict.get(dMapID, [])
-            if mID not in mIDList:
-                mIDList.append(mID)
-                dMapIDDict[dMapID] = mIDList
-                
-            dMIDList= mIDToDataMapIDDict.get(mID, [])
-            if dMapID not in dMIDList:
-                dMIDList.append(dMapID)
-                mIDToDataMapIDDict[mID] = dMIDList
-                
-        unMIDList = []
-        for mID, dMIDList in mIDToDataMapIDDict.items():
-            if len(dMIDList) > 1:
-                unMIDList.append(mID)
-                #GameWorld.DebugLog("----------- 同个场景对应到多个功能地图的,视为无意义的地图! mID=%s, to dMIDList=%s" % (mID, dMIDList))
-        for dMapID, mIDList in dMapIDDict.items():
-            for unMID in unMIDList:
-                if unMID in mIDList:
-                    mIDList.remove(unMID)
-            if len(mIDList) <= 1:
-                dMapIDDict.pop(dMapID)
-        DataMapIDDict = IpyGameDataPY.SetConfigEx("DataMapIDDict", dMapIDDict)
-        #GameWorld.Log("加载DataMapIDDict=%s" % DataMapIDDict)
-        
-    for dataMapID, mapIDList in DataMapIDDict.items():
-        if mapID in mapIDList:
-            return dataMapID
+#    DataMapIDDict = IpyGameDataPY.GetConfigEx("DataMapIDDict")
+#    if not DataMapIDDict:
+#        mIDToDataMapIDDict = {} # 场景ID对应功能地图ID
+#        dMapIDDict = {}
+#        ipyDataMgr = IpyGameDataPY.IPY_Data()
+#        for i in xrange(ipyDataMgr.GetFBLineCount()):
+#            ipyData = ipyDataMgr.GetFBLineByIndex(i)
+#            dMapID = ipyData.GetDataMapID()
+#            mID = ipyData.GetMapID()
+#            mIDList= dMapIDDict.get(dMapID, [])
+#            if mID not in mIDList:
+#                mIDList.append(mID)
+#                dMapIDDict[dMapID] = mIDList
+#                
+#            dMIDList= mIDToDataMapIDDict.get(mID, [])
+#            if dMapID not in dMIDList:
+#                dMIDList.append(dMapID)
+#                mIDToDataMapIDDict[mID] = dMIDList
+#                
+#        unMIDList = []
+#        for mID, dMIDList in mIDToDataMapIDDict.items():
+#            if len(dMIDList) > 1:
+#                unMIDList.append(mID)
+#                #GameWorld.DebugLog("----------- 同个场景对应到多个功能地图的,视为无意义的地图! mID=%s, to dMIDList=%s" % (mID, dMIDList))
+#        for dMapID, mIDList in dMapIDDict.items():
+#            for unMID in unMIDList:
+#                if unMID in mIDList:
+#                    mIDList.remove(unMID)
+#            if len(mIDList) <= 1:
+#                dMapIDDict.pop(dMapID)
+#        DataMapIDDict = IpyGameDataPY.SetConfigEx("DataMapIDDict", dMapIDDict)
+#        #GameWorld.Log("加载DataMapIDDict=%s" % DataMapIDDict)
+#        
+#    for dataMapID, mapIDList in DataMapIDDict.items():
+#        if mapID in mapIDList:
+#            return dataMapID
     return mapID
 
 def GetGeneralTrainMapIDList():
@@ -1806,11 +1694,8 @@
         
     return GeneralTrainMapIDList
 
-## 通知个人通用副本信息
-#  @param curPlayer: 玩家实例
-#  @param runTime: 已经进行时间
-#  @return: None
 def Sync_FBPlayerFBInfoData(curPlayer, mapIDInfo=None):
+    ## 通知个人通用副本信息
     if not mapIDInfo:
         ipyDataMgr = IpyGameDataPY.IPY_Data()
         mapIDList = [ipyDataMgr.GetFBFuncByIndex(i).GetDataMapID() for i in xrange(ipyDataMgr.GetFBFuncCount())]
@@ -1819,74 +1704,25 @@
             return
         mapIDList = [mapIDInfo] if type(mapIDInfo) == int else mapIDInfo
         
-    fbInfoData = ChPyNetSendPack.tagMCPlayerFBInfoData()
-    fbInfoData.Clear()
-    fbInfoData.FBDataCnt = len(mapIDList)
-    fbInfoData.FBDataList = []
+    clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCFBInfoList)
+    clientPack.FBDataList = []
     
-    for mID in mapIDList:
-        mapInfo = ChPyNetSendPack.tagMCFBInfo()
-        mapInfo.Clear()
-        mapInfo.FBID = mID
-        mapInfo.EnterCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_EnterFbCntDay % mID)
-        mapInfo.EnterCntTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_EnterFbCntTotal % mID)
-        mapInfo.RecoverCnt = 0
-        mapInfo.ItemAddCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ItemAddFbCnt % mID)
-        mapInfo.PassLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBPassLineID % mID)
-        
+    for mapID in mapIDList:
+        fbInfo = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCFBInfo)
+        fbInfo.MapID = mapID
+        fbInfo.EnterCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FbEnterCnt % mapID)
+        fbInfo.ADAddCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBADCnt % mapID)
+        fbInfo.BuyAddCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBBuyCnt % mapID)
+        fbInfo.ItemAddCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBItemCnt % mapID)
+        fbInfo.PassLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBPassLineID % mapID)
         for keyNum in range(ChConfig.Def_FBStar_MaxKeyCnt):
-            gradeValue = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_PlayerFBStar_MapId % (mID, keyNum))
-            mapInfo.PassGrade.append(gradeValue)
-        mapInfo.PassGradeCnt = len(mapInfo.PassGrade)
-        #GameWorld.DebugLog("FBID:%s---:%s"%(mapInfo.FBID,mapInfo.EnterCnt))
-        fbInfoData.FBDataList.append(mapInfo)
+            gradeValue = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBStar % (mapID, keyNum))
+            fbInfo.PassGrade.append(gradeValue)
+        fbInfo.PassGradeCnt = len(fbInfo.PassGrade)
+        clientPack.FBDataList.append(fbInfo)
         
-    NetPackCommon.SendFakePack(curPlayer, fbInfoData)
-    return
-
-#// A3 BD 通知玩家购买副本进入次数 #tagMCBuyEnterInfo
-#
-#struct    tagMCBuyEnterInfo
-#{
-#    tagHead            Head;
-#    BYTE        FBCount;    // 副本个数
-#    DWORD            tagMCFBInfo[FBCount];    // 副本信息
-#};
-#
-#struct    tagMCBuyInfo
-#{
-#    tagHead            Head;
-#    DWORD            FBID;        // 副本ID
-#    BYTE        BuyCount;    // 已购买次数
-#};
-## 通知个人购买副本次数信息
-#  @param curPlayer: 玩家实例
-#  @param runTime: 已经进行时间
-#  @return: None
-def Sync_FBPlayerFBBuyCount(curPlayer, mapIDList=[]):
-    if not mapIDList:
-        mapIDList = []
-        ipyDataMgr = IpyGameDataPY.IPY_Data()
-        for i in xrange(ipyDataMgr.GetFBFuncCount()):
-            ipyData = ipyDataMgr.GetFBFuncByIndex(i)
-            if not ipyData.GetBuyTimesVIPPriID():
-                continue
-            mapIDList.append(ipyData.GetDataMapID())
-   
-        
-    fbInfoData = ChPyNetSendPack.tagMCBuyEnterInfo()
-    fbInfoData.Clear()
-    fbInfoData.FBInfo = []
-    for mID in mapIDList:
-        mapInfo = ChPyNetSendPack.tagMCBuyInfo()
-        mapInfo.Clear()
-        mapInfo.FBID = mID
-        mapInfo.BuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_BuyFbCntDay % mID)
-        fbInfoData.FBInfo.append(mapInfo)
-        #GameWorld.DebugLog("FBID:%s---BuyCount:%s"%(mapInfo.FBID,mapInfo.BuyCount))
-    fbInfoData.FBCount = len(fbInfoData.FBInfo)
-    if fbInfoData.FBCount > 0:
-        NetPackCommon.SendFakePack(curPlayer, fbInfoData)
+    clientPack.FBDataCnt = len(clientPack.FBDataList)
+    NetPackCommon.SendFakePack(curPlayer, clientPack)
     return
 
 ## 根据人数分组
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Zhanchui.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Zhanchui.py
new file mode 100644
index 0000000..151f780
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Zhanchui.py
@@ -0,0 +1,72 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package GameWorldLogic.FBProcess.GameLogic_Zhanchui
+#
+# @todo:白骨盈野/战锤秘境
+# @author hxp
+# @date 2025-09-30
+# @version 1.0
+#
+# 详细描述: 白骨盈野/战锤秘境
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-09-30 10:30"""
+#-------------------------------------------------------------------------------
+
+import GameWorld
+import ItemControler
+import FBCommon
+
+def OnTurnFightRequest(curPlayer, mapID, funcLineID, tagType, tagID, valueList):
+    ## 回合战斗请求 
+    
+    if FBCommon.IsFBPass(curPlayer, mapID, funcLineID):
+        GameWorld.DebugLog("已过关的不能不重复挑战! mapID=%s,funcLineID=%s" % (mapID, funcLineID))
+        return
+    
+    return True
+
+def OnTurnFightOver(curPlayer, turnFight, mapID, funcLineID, overMsg):
+    ## 回合战斗结束
+    
+    if not curPlayer:
+        return
+    
+    isWin = turnFight.isWin
+    
+    if not isWin:
+        return
+    
+    if FBCommon.IsFBPass(curPlayer, mapID, funcLineID):
+        GameWorld.DebugLog("已过关的不重复获得过关奖励! mapID=%s,funcLineID=%s" % (mapID, funcLineID))
+        return
+    
+    itemList = FBCommon.GetPassAwardList(mapID, funcLineID)
+    GameWorld.DebugLog("过关奖励: mapID=%s,funcLineID=%s,itemList=%s" % (mapID, funcLineID, itemList))
+    # 首通不扣次数
+    FBCommon.SetFBPass(curPlayer, mapID, funcLineID)
+    ItemControler.GivePlayerItemOrMail(curPlayer, itemList, event=["Zhanchui", False, {}], isNotifyAward=False)
+    overMsg.update({FBCommon.Over_itemInfo:FBCommon.GetJsonItemList(itemList)})
+    
+    return
+
+def OnPlayerFBSweepAsk(curPlayer, mapID, lineID, sweepCnt, dataEx):
+    ## 可否扫荡
+    
+    return True
+
+def OnPlayerFBSweepResult(curPlayer, mapID, lineID, sweepCnt, dataEx):
+    ## 扫荡结果,次数消耗已在外层处理扣除
+    
+    itemList = FBCommon.GetSweepAwardList(mapID, lineID, sweepCnt)
+    GameWorld.DebugLog("白骨盈野扫荡: mapID=%s,lineID=%s,sweepCnt=%s" % (mapID, lineID, sweepCnt))
+    
+    ItemControler.GivePlayerItemOrMail(curPlayer, itemList, event=["Zhanchui", False, {}], isNotifyAward=False)
+    
+    isPass = 1
+    overDict = {FBCommon.Over_itemInfo:FBCommon.GetJsonItemList(itemList), FBCommon.Over_isSweep:1}
+    FBCommon.NotifyFBOver(curPlayer, mapID, lineID, isPass, overDict)
+    
+    return True
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 377d290..77feefe 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -997,37 +997,25 @@
                 "FBFunc":(
                         ("DWORD", "DataMapID", 1),
                         ("BYTE", "DayTimes", 0),
-                        ("BYTE", "DayResetType", 0),
-                        ("BYTE", "WeekTimes", 0),
-                        ("BYTE", "WeekResetType", 0),
-                        ("list", "RewardRate", 0),
-                        ("DWORD", "BuyTimesVIPPriID", 0),
-                        ("DWORD", "ExtraTimesVIPPriID", 0),
-                        ("DWORD", "ExtraTimesMWPriID", 0),
-                        ("BYTE", "GuardPick", 0),
-                        ("WORD", "OfflineTime", 0),
-                        ("WORD", "FBPoint", 0),
-                        ("WORD", "HelpPoint", 0),
-                        ("BYTE", "DayHelpCountMax", 0),
+                        ("BYTE", "PayCntMax", 0),
+                        ("BYTE", "PayMoneyType", 0),
+                        ("list", "PayMoneyValues", 0),
                         ),
 
                 "FBLine":(
                         ("DWORD", "DataMapID", 1),
                         ("BYTE", "LineID", 1),
-                        ("DWORD", "MapID", 0),
                         ("WORD", "LVLimitMin", 0),
-                        ("WORD", "LVLimitMax", 0),
-                        ("DWORD", "TicketID", 0),
-                        ("list", "TicketCostCnt", 0),
-                        ("WORD", "TicketPrice", 0),
-                        ("WORD", "SweepLVLimit", 0),
-                        ("DWORD", "SweepItemID", 0),
-                        ("BYTE", "SweepCostCnt", 0),
-                        ("eval", "EnterPosInfo", 0),
-                        ("eval", "StepTime", 0),
-                        ("eval", "RefreshNPC", 0),
-                        ("eval", "GradeInfo", 0),
-                        ("eval", "RewardInfo", 0),
+                        ("list", "PassAwardList", 0),
+                        ("list", "SweepAwardList", 0),
+                        ("list", "LineupIDList", 0),
+                        ),
+
+                "ADAward":(
+                        ("DWORD", "ADID", 1),
+                        ("BYTE", "ADCntMax", 0),
+                        ("list", "ADAwardItemList", 0),
+                        ("DWORD", "ADMapID", 0),
                         ),
 
                 "FBGeneralTrain":(
@@ -3978,19 +3966,10 @@
         return
         
     def GetDataMapID(self): return self.attrTuple[0] # 数据地图ID DWORD
-    def GetDayTimes(self): return self.attrTuple[1] # 每日可挑战次数, 0为不限制 BYTE
-    def GetDayResetType(self): return self.attrTuple[2] # 每日次数重置类型; 0-不重置,1-0点,2-5点 BYTE
-    def GetWeekTimes(self): return self.attrTuple[3] # 每周可挑战次数, 0为不限制 BYTE
-    def GetWeekResetType(self): return self.attrTuple[4] # 每周次数重置类型; 0-不重置,1-0点,2-5点 BYTE
-    def GetRewardRate(self): return self.attrTuple[5] # 评级奖励比例 list
-    def GetBuyTimesVIPPriID(self): return self.attrTuple[6] # 购买次数VIP权限ID DWORD
-    def GetExtraTimesVIPPriID(self): return self.attrTuple[7] # 额外次数VIP权限ID DWORD
-    def GetExtraTimesMWPriID(self): return self.attrTuple[8] # 额外次数法宝权限ID DWORD
-    def GetGuardPick(self): return self.attrTuple[9] # 该地图守护是否能拾取 BYTE
-    def GetOfflineTime(self): return self.attrTuple[10] # 离线多久退出副本(秒) WORD
-    def GetFBPoint(self): return self.attrTuple[11] # 副本过关仙缘币 WORD
-    def GetHelpPoint(self): return self.attrTuple[12] # 助战仙缘币(0代表不可助战) WORD
-    def GetDayHelpCountMax(self): return self.attrTuple[13] # 每日手动助战获得仙缘币次数(非镜像) BYTE
+    def GetDayTimes(self): return self.attrTuple[1] # 每日免费次数, 0为不限制 BYTE
+    def GetPayCntMax(self): return self.attrTuple[2] # 额外付费次数 BYTE
+    def GetPayMoneyType(self): return self.attrTuple[3] # 消耗货币类型 BYTE
+    def GetPayMoneyValues(self): return self.attrTuple[4] # 消耗货币值列表 list
 
 # 副本功能线路表
 class IPY_FBLine():
@@ -4001,20 +3980,22 @@
         
     def GetDataMapID(self): return self.attrTuple[0] # 数据地图ID DWORD
     def GetLineID(self): return self.attrTuple[1] # 功能线路ID BYTE
-    def GetMapID(self): return self.attrTuple[2] # 场景地图ID DWORD
-    def GetLVLimitMin(self): return self.attrTuple[3] # 最低等级限制, 0为不限制 WORD
-    def GetLVLimitMax(self): return self.attrTuple[4] # 最高等级限制, 0为不限制 WORD
-    def GetTicketID(self): return self.attrTuple[5] # 门票ID DWORD
-    def GetTicketCostCnt(self): return self.attrTuple[6] # 门票消耗数信息 list
-    def GetTicketPrice(self): return self.attrTuple[7] # 门票单价(不能用钱抵的配0) WORD
-    def GetSweepLVLimit(self): return self.attrTuple[8] # 扫荡等级限制, 0为不限制 WORD
-    def GetSweepItemID(self): return self.attrTuple[9] # 扫荡所需道具ID DWORD
-    def GetSweepCostCnt(self): return self.attrTuple[10] # 扫荡所需道具个数 BYTE
-    def GetEnterPosInfo(self): return self.attrTuple[11] # 进入坐标信息 eval
-    def GetStepTime(self): return self.attrTuple[12] # 阶段时间 eval
-    def GetRefreshNPC(self): return self.attrTuple[13] # 标试点刷怪配置 eval
-    def GetGradeInfo(self): return self.attrTuple[14] # 评级规则 eval
-    def GetRewardInfo(self): return self.attrTuple[15] # 奖励信息 eval
+    def GetLVLimitMin(self): return self.attrTuple[2] # 最低等级限制, 0为不限制 WORD
+    def GetPassAwardList(self): return self.attrTuple[3] # 过关奖励 list
+    def GetSweepAwardList(self): return self.attrTuple[4] # 扫荡奖励 list
+    def GetLineupIDList(self): return self.attrTuple[5] # 阵容ID列表 list
+
+# 广告奖励表
+class IPY_ADAward():
+    
+    def __init__(self):
+        self.attrTuple = None
+        return
+        
+    def GetADID(self): return self.attrTuple[0] # DWORD
+    def GetADCntMax(self): return self.attrTuple[1] # 每日次数 BYTE
+    def GetADAwardItemList(self): return self.attrTuple[2] # 广告奖励物品列表 list
+    def GetADMapID(self): return self.attrTuple[3] # 对应副本ID,默认给该副本1次次数 DWORD
 
 # 副本通用养成表
 class IPY_FBGeneralTrain():
@@ -6517,6 +6498,7 @@
         self.__LoadFileData("ChinMap", onlyCheck)
         self.__LoadFileData("FBFunc", onlyCheck)
         self.__LoadFileData("FBLine", onlyCheck)
+        self.__LoadFileData("ADAward", onlyCheck)
         self.__LoadFileData("FBGeneralTrain", onlyCheck)
         self.__LoadFileData("DailyAction", onlyCheck)
         self.__LoadFileData("EquipGSParam", onlyCheck)
@@ -7544,6 +7526,13 @@
         self.CheckLoadData("FBLine")
         return self.ipyFBLineCache[index]
 
+    def GetADAwardCount(self):
+        self.CheckLoadData("ADAward")
+        return self.ipyADAwardLen
+    def GetADAwardByIndex(self, index):
+        self.CheckLoadData("ADAward")
+        return self.ipyADAwardCache[index]
+
     def GetFBGeneralTrainCount(self):
         self.CheckLoadData("FBGeneralTrain")
         return self.ipyFBGeneralTrainLen
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
index 36d166c..3d49a93 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
@@ -147,7 +147,7 @@
 #  @param tick 当前时间
 #  @return None or True
 #  @remarks 函数详细说明.
-def __DoPickup(curPlayer, mapItemID, tick, isGuard):
+def __DoPickup(curPlayer, mapItemID, tick):
     
     playerID = curPlayer.GetPlayerID()
     mapItemManager = GameWorld.GetMapItemManager()
@@ -165,7 +165,7 @@
     posX, posY, itemPosX, itemPosY = curPlayer.GetPosX(), curPlayer.GetPosY(), mapItem.GetPosX(), mapItem.GetPosY()
     pickDist = GameWorld.GetDist(posX, posY, itemPosX, itemPosY)
     # 守护拾取不验证拾取范围
-    if not isGuard and pickDist > curPlayer.GetPickupDist():
+    if pickDist > curPlayer.GetPickupDist():
         #距离过远, 不能捡起
         PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_805889")
         GameWorld.Log("当前距离过远, mapItemID=%s,dropItemNPCID=%s,玩家(%d,%d)-物品(%d,%d),pickDist=%s > playerPickupDist=%s" 
@@ -257,8 +257,8 @@
             mapID = GameWorld.GetGameWorld().GetMapID()
             lineID = 0 if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtNull else PlayerControl.GetFBFuncLineID(curPlayer)
             #合并地图的,使用前端lineID,即 FBID
-            if mapID in [ChConfig.Def_FBMapID_BossHome]:
-                lineID = curPlayer.GetClientLineID()
+            #if mapID in [ChConfig.Def_FBMapID_BossHome]:
+            #    lineID = curPlayer.GetClientLineID()
             NPCCommon.SendGameServerGoodItemRecord(curPlayer, mapID, lineID, dropItemNPCID, curItemID, equipInfo)
             
         # 不需要队伍提示
@@ -299,20 +299,6 @@
     return
 
 #---------------------------------------------------------------------
-#// A3 12 守护拾取物品 #tagCMGuardPickupItem
-#
-#struct    tagCMGuardPickupItem
-#{
-#    tagHead        Head;
-#    WORD        ItemCount;
-#    WORD        MapItemID[ItemCount];    //size = ItemCount
-#};
-def OnGuardPickupItem(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    mapItemIDList = clientData.MapItemID
-    __DoPickupItem(curPlayer, mapItemIDList, tick, True)
-    return
-
 ## 玩家拾取物品(封包参数)
 #  @param index 当前玩家索引
 #  @param tick 当前时间
@@ -323,103 +309,23 @@
     #玩家捡起物品
     pickPack = IPY_GameWorld.IPY_PickUpItem()
     mapItemID = pickPack.GetMapItemID()
-    __DoPickupItem(curPlayer, [mapItemID], tick, False)
+    __DoPickupItem(curPlayer, [mapItemID], tick)
     return
 
-def __DoPickupItem(curPlayer, mapItemIDList, tick, isGuard):
-    # @param isGuard: 是否守护拾取
-    
-    if isGuard and GameWorld.GetMap().GetMapFBType() != IPY_GameWorld.fbtNull:
-        mapID = curPlayer.GetMapID()
-        fbIpyData = FBCommon.GetFBIpyData(mapID)
-        if fbIpyData and not fbIpyData.GetGuardPick():
-            GameWorld.Log("该地图守护无法拾取物品! mapID=%s" % mapID, curPlayer.GetPlayerID())
-            return
-        
-#    #单人副本一键拾取
-#    if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtSingle:
-#        SingleFBTPickUP(curPlayer, mapItemID, tick)
-#        return
-    
+def __DoPickupItem(curPlayer, mapItemIDList, tick):
     if not mapItemIDList:
         GameWorld.ErrLog("没有指定要拾取的地图物品ID!", curPlayer.GetPlayerID())
         return
     
     succMapItemIDList = [] # 成功拾取的地图物品
     for mapItemID in mapItemIDList:
-        if __DoPickup(curPlayer, mapItemID, tick, isGuard):
+        if __DoPickup(curPlayer, mapItemID, tick):
             succMapItemIDList.append(mapItemID)
             
     if succMapItemIDList:
         GameWorld.Log("成功拾取地图物品, succMapItemIDList=%s" % (succMapItemIDList), curPlayer.GetPlayerID())
-        
-    # 守护拾取的,附加同步守护拾取结果
-    if isGuard and succMapItemIDList:
-        guradPickupSucc = ChPyNetSendPack.tagMCGuradPickupItemSucc()
-        guradPickupSucc.MapItemID = succMapItemIDList
-        guradPickupSucc.ItemCount = len(guradPickupSucc.MapItemID)
-        NetPackCommon.SendFakePack(curPlayer, guradPickupSucc)
-        
-# 玩家拾取结果目前客户端暂时无用,不通知
-#    if not __DoPickup(curPlayer, mapItemID, tick):
-#        curPlayer.Notify_PickupItemResult(mapItemID, 0)
-#    else:
-#        curPlayer.Notify_PickupItemResult(mapItemID, 1)
     return
 
-
-###单人副本一键拾取
-## @param curPlayer mapItemID
-## @return None
-#def SingleFBTPickUP(curPlayer, mapItemID, tick):
-#    mapItemManager = GameWorld.GetMapItemManager()
-#    curMapItem = mapItemManager.GetItemByID(mapItemID)
-#    if curMapItem == None or curMapItem.IsEmpty():
-#        return
-#
-#    posX = curPlayer.GetPosX()
-#    posY = curPlayer.GetPosY()
-#    itemPosX = curMapItem.GetPosX()
-#    itemPosY = curMapItem.GetPosY()
-#    
-#    pickDist = GameWorld.GetDist(posX, posY, itemPosX, itemPosY)
-#
-#    if pickDist > curPlayer.GetPickupDist():
-#        #距离过远, 不能捡起
-#        PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_805889")
-#        return
-#    
-#    mapItemIDList = [curMapItem.GetID()]
-#    #拾取当前格子周围的物品
-#    mapItemManager = GameWorld.GetMapItemManager()
-#    for index in range(mapItemManager.GetMapItemCount()):
-#        mapItem = mapItemManager.GetMapItemByIndex(index)
-#        if not mapItem or mapItem.IsEmpty():
-#            continue
-#        
-#        mapItemObjID = mapItem.GetID()
-#        if mapItemObjID in mapItemIDList:
-#            continue
-#        
-#        curItem = mapItem.GetItem()
-#        # 只一键拾取金钱
-#        if curItem.GetType() != ChConfig.Def_ItemType_Money:
-#            continue
-#            
-#        pickDist = GameWorld.GetDist(posX, posY, mapItem.GetPosX(), mapItem.GetPosY())
-#        
-#        if pickDist > curPlayer.GetPickupDist():
-#            continue
-#        
-#        mapItemIDList.append(mapItemObjID)
-#        
-#    for mapItemID in mapItemIDList:
-#        if not __DoPickup(curPlayer, mapItemID, tick):
-#            curPlayer.Notify_PickupItemResult(mapItemID, 0)
-#        else:
-#            curPlayer.Notify_PickupItemResult(mapItemID, 1)
-#        
-#    return
 #---------------------------------------------------------------------
 ## 玩家使用物品 ->自身效果(封包参数)
 #  @param index 当前玩家索引
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
index 748ffee..c6ba2cc 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
@@ -825,12 +825,12 @@
     # 暗金boss
     if ChConfig.IsGameBoss(curNPC): 
         # 通知GameServer boss状态 封魔坛在副本里单独处理
-        ipyData = IpyGameDataPY.GetIpyGameDataNotLog('BOSSInfo', npcid)
-        if ipyData and ipyData.GetMapID() not in [ChConfig.Def_FBMapID_SealDemon, ChConfig.Def_FBMapID_ZhuXianBoss]:
-            GameServe_GameWorldBossState(npcid, 0)
-            #GameWorld.GetGameWorld().SetGameWorldDict(ChConfig.Map_NPC_WorldBossDeadTick % npcid, GameWorld.GetGameWorld().GetTick())
-            #因为存在boss分流,所以用gameFB字典,但是存活状态还是用GameWorld字典
-            GameWorld.GetGameFB().SetGameFBDict(ChConfig.Map_NPC_WorldBossDeadTick % npcid, GameWorld.GetGameWorld().GetTick())
+        #ipyData = IpyGameDataPY.GetIpyGameDataNotLog('BOSSInfo', npcid)
+        #if ipyData and ipyData.GetMapID() not in [ChConfig.Def_FBMapID_SealDemon, ChConfig.Def_FBMapID_ZhuXianBoss]:
+        #    GameServe_GameWorldBossState(npcid, 0)
+        #    #GameWorld.GetGameWorld().SetGameWorldDict(ChConfig.Map_NPC_WorldBossDeadTick % npcid, GameWorld.GetGameWorld().GetTick())
+        #    #因为存在boss分流,所以用gameFB字典,但是存活状态还是用GameWorld字典
+        #    GameWorld.GetGameFB().SetGameFBDict(ChConfig.Map_NPC_WorldBossDeadTick % npcid, GameWorld.GetGameWorld().GetTick())
             
         ChNPC.OnNPCSetDead(curNPC)
         
@@ -956,20 +956,20 @@
         PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_BossHome, 1)
         PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_BossHome, 1)
         
-    if mapID == ChConfig.Def_FBMapID_CrossPenglai:
-        #跨服蓬莱仙境
-        PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_CrossPenglai)
-        PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_KillCrossPenglaiBoss, 1)
-        PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_KillCrossPenglaiBoss, 1)
-        PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_CrossPenglaiBoss, 1)
-    elif mapID == ChConfig.Def_FBMapID_CrossDemonLand:
-        #跨服魔化之地
-        PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_CrossDemonLand)
-        PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_KillCrossDemonLandBoss, 1)
-        PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_KillCrossDemonLandBoss, 1)
-        PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_CrossDemonLandBoss, 1)
-    if mapID in [ChConfig.Def_FBMapID_CrossPenglai, ChConfig.Def_FBMapID_CrossDemonLand]:
-        PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_CrossBoss, 1)
+#    if mapID == ChConfig.Def_FBMapID_CrossPenglai:
+#        #跨服蓬莱仙境
+#        PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_CrossPenglai)
+#        PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_KillCrossPenglaiBoss, 1)
+#        PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_KillCrossPenglaiBoss, 1)
+#        PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_CrossPenglaiBoss, 1)
+#    elif mapID == ChConfig.Def_FBMapID_CrossDemonLand:
+#        #跨服魔化之地
+#        PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_CrossDemonLand)
+#        PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_KillCrossDemonLandBoss, 1)
+#        PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_KillCrossDemonLandBoss, 1)
+#        PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_CrossDemonLandBoss, 1)
+#    if mapID in [ChConfig.Def_FBMapID_CrossPenglai, ChConfig.Def_FBMapID_CrossDemonLand]:
+#        PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_CrossBoss, 1)
         
     # 个人首杀记录
     ipyData = IpyGameDataPY.GetIpyGameDataNotLog("BOSSFirstKill", npcID)
@@ -2490,13 +2490,13 @@
         #杀死NPC, 触发任务
         self.__EventKillNpc()
             
-        mapID = GameWorld.GetMap().GetMapID()
-        killerName = "" if not self.__Killer else self.__Killer.GetPlayerName()
-        # 记录boss击杀信息的NPC
-        bossIpyData = IpyGameDataPY.GetIpyGameDataListNotLog('BOSSInfo', npcID)
-        if bossIpyData and mapID not in [ChConfig.Def_FBMapID_ZhuXianBoss, ChConfig.Def_FBMapID_SealDemon]:
-            killerIDList = [player.GetPlayerID() for player in self.__ownerPlayerList]
-            GameServer_KillGameWorldBoss(curNPC.GetNPCID(), killerName, 0, True, killerIDList)
+        #mapID = GameWorld.GetMap().GetMapID()
+        #killerName = "" if not self.__Killer else self.__Killer.GetPlayerName()
+        ## 记录boss击杀信息的NPC
+        #bossIpyData = IpyGameDataPY.GetIpyGameDataListNotLog('BOSSInfo', npcID)
+        #if bossIpyData and mapID not in [ChConfig.Def_FBMapID_ZhuXianBoss, ChConfig.Def_FBMapID_SealDemon]:
+        #    killerIDList = [player.GetPlayerID() for player in self.__ownerPlayerList]
+        #    GameServer_KillGameWorldBoss(curNPC.GetNPCID(), killerName, 0, True, killerIDList)
             
         if npcID == IpyGameDataPY.GetFuncCfg("BossRebornServerBoss", 3):
             PlayerControl.WorldNotify(0, "BossRebornBossKilled", [curNPC.GetNPCID()])
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
index 4fef199..4cb1330 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -139,6 +139,7 @@
 import PlayerHero
 import PlayerOnline
 import TurnAttack
+import ObjPool
 
 import datetime
 import time
@@ -758,6 +759,7 @@
         PlayerGoldRush.OnPlayerLogin(curPlayer)
         PlayerActFamilyGCZ.OnPlayerLogin(curPlayer)
         PlayerTalk.OnPlayerLogin(curPlayer)
+        SyncADCntInfo(curPlayer)
         
         # 上线查询一次充值订单
         curPlayer.SendDBQueryRecharge()
@@ -3226,6 +3228,30 @@
     NetPackCommon.SendFakePack(curPlayer, awardReceiveState)
     return
 
+def PlayerOnDay(curPlayer):
+    #玩法前瞻奖励
+    gameNoticeAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GameNoticeAwardState)
+    if gameNoticeAwardState:
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GameNoticeAwardState, 0)
+        Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_GameNotice, 0)
+    #每日分享奖励重置
+    shareGameAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ShareGameAwardState)
+    if shareGameAwardState:
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ShareGameAwardState, 0)
+        Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_ShareGame, 0)
+    #开服每日奖励
+    awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OpenSererDailyAward)
+    if awardState:
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OpenSererDailyAward, 0)
+        Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_OpenServerDailyAward, 0)
+    #开服每日奖励
+    awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RechargeDayAward)
+    if awardState:
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RechargeDayAward, 0)
+        Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_RechargeDayAward, 0)
+    ADCntOnDay(curPlayer)
+    return
+
 #//A5 04 玩家领取奖励 #tagCMPlayerGetReward
 #
 #struct    tagCMPlayerGetReward
@@ -3256,6 +3282,9 @@
     # 仙树免费减时
     elif rewardType == ChConfig.Def_RewardType_TreeFreeTime:
         PlayerTree.FreeReduceTreeLVTime(curPlayer)
+    # 广告奖励
+    elif rewardType == ChConfig.Def_RewardType_ADAward:
+        OnGetADAward(curPlayer, dataEx)
     # 每日免费直购礼包
     elif rewardType == ChConfig.Def_RewardType_DayFreeGoldGift:
         PlayerDailyGiftbag.OnGetDailyFreeGiftbag(curPlayer)
@@ -3404,7 +3433,71 @@
     elif rewardType == ChConfig.Def_RewardType_RechargeDayAward:
         OnGetRechargeDayAward(curPlayer, rewardType)
     return
+
+def OnGetADAward(curPlayer, adID):
+    ipyData = IpyGameDataPY.GetIpyGameData("ADAward", adID)
+    if not ipyData:
+        return
+    adCntMax = ipyData.GetADCntMax()
+    adCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ADCnt % adID)
+    if adCnt >= adCntMax:
+        GameWorld.DebugLog("今日该广告奖励已达上限! adID=%s,adCnt=%s > %s" % (adID, adCnt, adCntMax))
+        return
+    adCnt += 1
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ADCnt % adID, adCnt)
+    awardItemList = ipyData.GetADAwardItemList()
+    adMapID = ipyData.GetADMapID()
+    GameWorld.DebugLog("领取广告奖励! adID=%s,adCnt=%s,adMapID=%s,awardItemList=%s" % (adID, adCnt, adMapID, awardItemList))
+    SyncADCntInfo(curPlayer, [adID])
     
+    if adMapID:
+        FBCommon.AddFBADCnt(curPlayer, adMapID)
+        
+    if awardItemList:
+        ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["ADAward", False, {}])
+        
+    return
+
+def ADCntOnDay(curPlayer):
+    syncADIDList = []
+    ipyDataMgr = IpyGameDataPY.IPY_Data()
+    for index in xrange(ipyDataMgr.GetADAwardCount()):
+        ipyData = ipyDataMgr.GetADAwardByIndex(index)
+        adID = ipyData.GetADID()
+        if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ADCnt % adID):
+            continue
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ADCnt % adID, 0)
+        syncADIDList.append(adID)
+    if syncADIDList:
+        SyncADCntInfo(curPlayer, syncADIDList)
+    return
+
+def SyncADCntInfo(curPlayer, syncADIDList=None):
+    if not syncADIDList:
+        ipyDataMgr = IpyGameDataPY.IPY_Data()
+        adIDList = [ipyDataMgr.GetADAwardByIndex(i).GetADID() for i in xrange(ipyDataMgr.GetADAwardCount())]
+    else:
+        adIDList = syncADIDList
+        
+    adInfoList = []
+    for adID in adIDList:
+        adCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ADCnt % adID)
+        if not adCnt and syncADIDList == None:
+            continue
+        adInfo = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCADInfo)
+        adInfo.ADID = adID
+        adInfo.ADCnt = adCnt
+        adInfoList.append(adInfo)
+        
+    if not adInfoList:
+        return
+    
+    clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCADInfoList)
+    clientPack.ADInfoList = adInfoList[:255]
+    clientPack.Count = len(clientPack.ADInfoList)
+    NetPackCommon.SendFakePack(curPlayer, clientPack)
+    return
+
 def OnGetRechargeDayAward(curPlayer, rewardType):
     ## 领取累充每日奖励,取最高档
     realTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGRealTotal)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossPlayerData.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossPlayerData.py
index a78b1b6..8b8ae0a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossPlayerData.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossPlayerData.py
@@ -211,7 +211,7 @@
         return
     
     # 不需要处理的跨服地图
-    if crossMapID in [ChConfig.Def_FBMapID_CrossRealmPK]:
+    if crossMapID in []:
         return
     
     if not IpyGameDataPY.GetFuncCfg("CrossSyncPlayerData", 1):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
index 1dd5d6a..4537a3c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -1402,7 +1402,7 @@
     #进入副本通用检查
     fbIpyData = FBCommon.GetFBIpyData(mapID)
     fbLineIpyData = FBCommon.GetFBLineIpyData(mapID, lineID)
-    sceneMapID = mapID if not fbLineIpyData else fbLineIpyData.GetMapID()
+    sceneMapID = mapID #if not fbLineIpyData else fbLineIpyData.GetMapID()
     #过滤封包地图ID
     if not GameWorld.GetMap().IsMapIDExist(sceneMapID):
         GameWorld.ErrLog('###非法地图数据,sceneMapID: %s' % (sceneMapID), curPlayer.GetID())
@@ -1431,15 +1431,14 @@
             GameWorld.Log("非队长,无法发起进入组队副本请求!", curPlayer.GetPlayerID())
             return
         isSendToGameServer = True
-    if isSendToGameServer or mapID in ChConfig.Def_MapID_SendToGameServer \
-        or mapID in ReadChConfig.GetEvalChConfig("MapID_SendToGameServer"):
+    if isSendToGameServer:
         extendParamList = []
         if mapID in ChConfig.Def_MapID_LineIDToPropertyID:
-            enterCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_EnterFbCntDay % mapID)
+            enterCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FbEnterCnt % mapID)
             extendParamList = [enterCnt]
-        elif mapID in ChConfig.MirrorBattleMapIDList:
-            reqInfoEx["sceneMapID"] = sceneMapID
-            extendParamList = [reqInfoEx]
+        #elif mapID in ChConfig.MirrorBattleMapIDList:
+        #    reqInfoEx["sceneMapID"] = sceneMapID
+        #    extendParamList = [reqInfoEx]
         SendToGameServerEnterFB(curPlayer, mapID, lineID, tick, extendParamList)
         return
     
@@ -1663,8 +1662,7 @@
     curPlayer.SetDict(ChConfig.Def_PlayerKey_TransTick, tick)
     
     mapID = FBCommon.GetRecordMapID(mapID)
-    fbLineIpyData = FBCommon.GetFBLineIpyData(mapID, funcLineID)
-    sceneMapID = mapID if not fbLineIpyData else fbLineIpyData.GetMapID()
+    sceneMapID = mapID #if not fbLineIpyData else fbLineIpyData.GetMapID()
     
     # 地图分流, 减少单地图压力
     FBMapShuntDict = ReadChConfig.GetEvalChConfig("FBMapShunt")
@@ -1824,8 +1822,8 @@
         return tagLineID
     tagLinePlayerCountDict = PyGameData.g_commMapLinePlayerCountDict[tagMapID] # 此分线包含所有分线,含未开放的及活动分线
     
-    if bossID and tagMapID != ChConfig.Def_FBMapID_BossHome:
-        tagLineID = 0 # Boss的话未分流前先强制1线,即为0
+    #if bossID and tagMapID != ChConfig.Def_FBMapID_BossHome:
+    #    tagLineID = 0 # Boss的话未分流前先强制1线,即为0
     playerID = curPlayer.GetPlayerID()
     playChangeLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_PlayChangeLineID)
     funcChangeLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FuncChangeLineID)
@@ -4202,8 +4200,8 @@
         if actExpIpyData and curPlayer.GetLV() >= actExpIpyData.GetLVLimit():
             fightExpRate += actExpIpyData.GetAddExpRate()
             
-    if curPlayer.GetMapID() not in [ChConfig.Def_FBMapID_FamilyInvade]: #守卫人皇不加组队加成
-        fightExpRate += curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_TeamExpRate) # 组队
+    #if curPlayer.GetMapID() not in [ChConfig.Def_FBMapID_FamilyInvade]: #守卫人皇不加组队加成
+    #    fightExpRate += curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_TeamExpRate) # 组队
     
     #地图多倍经验加成,默认是1倍不加成
     mapExpAddMultiple = 0
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 91f1cd6..bc2b1ed 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -288,26 +288,8 @@
         #仙宫
         PlayerXiangong.PlayerOnDay(curPlayer)
         PlayerControl.PayCoinOnDay(curPlayer)
-        #玩法前瞻奖励
-        gameNoticeAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GameNoticeAwardState)
-        if gameNoticeAwardState:
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GameNoticeAwardState, 0)
-            ChPlayer.Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_GameNotice, 0)
-        #每日分享奖励重置
-        shareGameAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ShareGameAwardState)
-        if shareGameAwardState:
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ShareGameAwardState, 0)
-            ChPlayer.Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_ShareGame, 0)
-        #开服每日奖励
-        awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OpenSererDailyAward)
-        if awardState:
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OpenSererDailyAward, 0)
-            ChPlayer.Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_OpenServerDailyAward, 0)
-        #开服每日奖励
-        awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RechargeDayAward)
-        if awardState:
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RechargeDayAward, 0)
-            ChPlayer.Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_RechargeDayAward, 0)
+        ChPlayer.PlayerOnDay(curPlayer)
+        
     # 特殊时间点X点过天
     elif onEventType == ShareDefine.Def_OnEventTypeEx:
         PlayerHero.PlayerOnDay(curPlayer)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFB.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFB.py
index 16b8dcb..fce4034 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFB.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFB.py
@@ -23,17 +23,12 @@
 #------------------------------------------------------------------------------ 
 #"""Version = 2016-12-02 11:00"""
 #------------------------------------------------------------------------------ 
-import IPY_GameWorld
 import PlayerControl
 import GameWorld
 import FBCommon
-import ChConfig
 import FBLogic
-import PlayerSuccess
-import ItemCommon
 import IpyGameDataPY
 import ShareDefine
-import GameFuncComm
 import NPCCommon
 
 #---------------------------------------------------------------------
@@ -60,100 +55,48 @@
 #    DWORD        MapID;
 #    WORD        LineID;
 #    BYTE        Cnt;    // 扫荡次数
-#    BYTE        IsFinish;    // 是否立即完成; 0-否;1-花钱立即完成;2-客户端自行倒计时间到后发送2代表领取扫荡完成奖励
 #    DWORD        DataEx;    //附带信息
-#    BYTE        IsLittleHelper;    // 是否小助手扫荡
 #};
 def OnPlayerFBWipeOut(playerIndex, clientData, tick):
     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(playerIndex)
     
-    #if not GameWorld.CheckPlayerTick(curPlayer, ChConfig.TYPE_Player_Tick_BeginFBWipeOut, tick):
-    #    GameWorld.DebugLog("玩家副本扫荡请求CD中...", curPlayer.GetPlayerID())
-    #    return
-    
     mapID = clientData.MapID
     lineID = clientData.LineID
     cnt = clientData.Cnt
-    #isFinish = clientData.IsFinish
-    isFinish = 1 # 暂时默认1,之后有需要扫荡等待的再说
     dataEx = clientData.DataEx
-    isLittleHelper = clientData.IsLittleHelper
-    if isLittleHelper:
-        if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_LittleHelper):
-            GameWorld.DebugLog("玩家没有小助手功能权限!", curPlayer.GetPlayerID())
-            return
     
     if cnt <= 0:
         return
     
     fbIpyData = FBCommon.GetFBIpyData(mapID)
-    if FBCommon.GetRecordMapID(GameWorld.GetMap().GetMapID()) == FBCommon.GetRecordMapID(mapID):
-        if fbIpyData and fbIpyData.GetDayTimes():#没有限制进入次数的不限制在目标地图扫荡
-            GameWorld.DebugLog("玩家在扫荡目标地图中,无法扫荡!mapID=%s" % mapID)
-            return
+    fbLineIpyData = FBCommon.GetFBLineIpyData(mapID, lineID, False)
+    if not fbIpyData or not fbLineIpyData:
+        GameWorld.DebugLog("不存在该副本或线路无法扫荡!mapID=%s, lineID=%s" % (mapID, lineID))
+        return
     
-    
-    fbLineIpyData = FBCommon.GetFBLineIpyData(mapID, lineID)
-    if not fbLineIpyData:
-        GameWorld.DebugLog("找不到该副本线路,无法扫荡!mapID=%s, lineID=%s" % (mapID, lineID))
+    if not FBCommon.IsFBPass(curPlayer, mapID, lineID):
+        GameWorld.DebugLog("未过关无法扫荡!mapID=%s, lineID=%s" % (mapID, lineID))
         return
     
     if FBCommon.CheckCanEnterFBComm(curPlayer, mapID, lineID, fbIpyData, fbLineIpyData, cnt) != ShareDefine.EntFBAskRet_OK:
         return
-    costMoneyList = []
-    sweepCostindexList = []
-    sweepCostCnt = 0
-    itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
-    
-    if fbLineIpyData:
-        #扫荡等级判断
-        sweepLVLimit = fbLineIpyData.GetSweepLVLimit()
-        if sweepLVLimit and curPlayer.GetLV() < sweepLVLimit:
-            GameWorld.DebugLog('玩家副本扫荡,等级不足!mapID=%s, lineID=%s, playerLV=%s, sweepLVLimit=%s' 
-                               % (mapID, lineID, curPlayer.GetLV(), sweepLVLimit), curPlayer.GetPlayerID())
-            return
-        
-        #扫荡道具判断,小助手不消耗扫荡道具
-        sweepItemID = fbLineIpyData.GetSweepItemID()
-        if sweepItemID and not isLittleHelper:
-            sweepItemCnt = fbLineIpyData.GetSweepCostCnt()
-            sweepCostCnt = sweepItemCnt * cnt
-            #isEnough, sweepCostindexList = ItemCommon.GetItem_FromPack_ByID(sweepItemID, itemPack, sweepCostCnt)
-            isEnough, sweepCostindexList, hasBind, lackCnt = ItemCommon.GetItem_FromPack_ByID_ExEx(sweepItemID, itemPack, sweepCostCnt)
-            if not isEnough:
-                itemPrice = ItemCommon.GetShopItemPrice(sweepItemID, IPY_GameWorld.TYPE_Price_Gold_Money)
-                if itemPrice:
-                    costMoney = itemPrice * lackCnt
-                    costMoneyList = PlayerControl.HaveMoneyEx(curPlayer, ShareDefine.TYPE_Price_Gold_Paper_Money, costMoney)
-                if not costMoneyList:
-                    GameWorld.DebugLog("扫荡消耗道具不足, mapID=%s,lineID=%s,sweepItemID=%s,sweepCostCnt=%s" 
-                                   % (mapID, lineID, sweepItemID, sweepCostCnt), curPlayer.GetPlayerID())
-                    return
     
     # 副本是否可扫荡, 这里只判断副本自身的特殊条件, 公共条件上面已经判断
-    if not FBLogic.OnPlayerFBSweepAsk(curPlayer, mapID, lineID, cnt, isFinish, dataEx):
+    if not FBLogic.OnPlayerFBSweepAsk(curPlayer, mapID, lineID, cnt, dataEx):
+        GameWorld.DebugLog("该副本当前无法扫荡!mapID=%s, lineID=%s" % (mapID, lineID))
         return
     
-    PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FeastRedPack_FBSweep, 1, [mapID])
-    
-    #扣除扫荡道具
-    if sweepCostindexList and sweepCostCnt:
-        ItemCommon.ReduceItem(curPlayer, itemPack, sweepCostindexList, sweepCostCnt, False, 'FBSweepCostItem')
-    if costMoneyList:
-        infoDict = {"MapID":mapID, "LineID":lineID, 'SweepCount':cnt}
-        for moneyType, moneyNum in costMoneyList:
-            if not PlayerControl.PayMoney(curPlayer, moneyType, moneyNum, ChConfig.Def_Cost_FBSweep, infoDict):
-                return False, hasBind
+    #PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FeastRedPack_FBSweep, 1, [mapID])
     
     #需先扣除门票, 再增加次数, 否则可能导致扣除的数量错误
-    FBCommon.DelFBEnterTicket(curPlayer, mapID, lineID, cnt)
-        
+    #FBCommon.DelFBEnterTicket(curPlayer, mapID, lineID, cnt)
+    
     #增加副本进入次数
     if fbIpyData and fbIpyData.GetDayTimes():
         FBCommon.AddEnterFBCount(curPlayer, mapID, cnt)
         
     #扫荡结果给奖励等
-    FBLogic.OnPlayerFBSweepResult(curPlayer, mapID, lineID, cnt, isFinish, dataEx)
+    FBLogic.OnPlayerFBSweepResult(curPlayer, mapID, lineID, cnt, dataEx)
     return
 
 #// B1 08 快速一键过关副本 #tagCMFBQuickPass
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFuncTeam.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFuncTeam.py
index 2c811dc..e49429c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFuncTeam.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFuncTeam.py
@@ -473,8 +473,8 @@
     canCreate, notifyMark = CheckCanCreateFuncTeam(playerID, teamInfo, zoneID)
     
     # 某些功能创建前检查
-    if funcMapID == ChConfig.Def_FBMapID_CrossBattlefield:
-        pass
+    #if funcMapID == ChConfig.Def_FBMapID_CrossBattlefield:
+    #    pass
     
     newTeam = None
     teamID = 0
@@ -489,8 +489,8 @@
         newTeamInfo = newTeam.GetSyncDict(True)
         
         # 某些功能创建后处理
-        if funcMapID == ChConfig.Def_FBMapID_CrossBattlefield:
-            pass
+        #if funcMapID == ChConfig.Def_FBMapID_CrossBattlefield:
+        #    pass
         
     else:
         if not notifyMark:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFB.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFB.py
index 9550af1..0b2fd4e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFB.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFB.py
@@ -163,7 +163,7 @@
 #            GameWorld.DebugLog("    创建新战盟家园: tagFamilyID=%s,tagFamilyHomeLV=%s,resultLineID=%s" 
 #                               % (tagFamilyID, tagFamilyHomeLV, resultLineID))
 #===================================================================================================
-    elif tagMapID in [ChConfig.Def_FBMapID_HorsePetBoss, ChConfig.Def_FBMapID_SealDemon, ChConfig.Def_FBMapID_ZhuXianBoss, ChConfig.Def_FBMapID_AllFamilyBoss, ChConfig.Def_FBMapID_DemonKing]:
+    elif tagMapID in []:
         tagMapPropertyID = tagMapLineID + 1 # 因为PropertyID默认是0,所以使用时从1开始
         resultLineID = -1  # 结果lineID
         
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 35ac305..64df0b4 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -859,7 +859,6 @@
 GameFuncID_GodWeapon = -1       # 神器 20
 GameFuncID_OSSail = -1          # 开服特惠 132
 GameFuncID_AddPoint = -1        # 加点功能/灵根功能 145
-GameFuncID_LittleHelper = -1    # 小助手 146
 
 #家族悬赏任务完成状态记录位标识
 Def_ArrestOverState_BitDic = {
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py
index 875dd0d..9ba2bb3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/BuffSkill.py
@@ -40,13 +40,7 @@
     if curObj == None:
         # 避免配表错误导致报错
         return False
-
-    if GameWorld.GetMap().GetMapID() == ChConfig.Def_FBMapID_GatherSoul and curObj.GetGameObjType() == IPY_GameWorld.gotNPC:
-        if curSkill.GetSkillTypeID() != 23052:
-            #GameWorld.DebugLog('聚魂副本玩家不能对怪物上buff curSkill=%s,buffOwner=%s'%(curSkill.GetSkillTypeID(),buffOwner.GetID()))
-            return True
-        #GameWorld.DebugLog('聚魂副本对怪物上buff curSkill=%s,buffOwner=%s'%(curSkill.GetSkillTypeID(),buffOwner.GetID()))
-        
+    
     if curObj.GetGameObjType() == IPY_GameWorld.gotNPC and curObj.GetIsBoss() not in ChConfig.Def_SkillAttack_NPCIsBoss \
     and SkillCommon.GetSkillBattleType(curSkill) == ChConfig.Def_BattleRelationType_CommNoBoss and SkillShell.IsNPCSkillResist(curObj):
         # 释放后 对指定BOSS无效的技能
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
index 6a298b6..84f9426 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
@@ -708,29 +708,29 @@
             continue
         npcObj.StopMove()
         npcObj.ChangePos(npcPos.PosX, npcPos.PosY)
-        BeatBackMove(curPlayer, npcObj)
+        #BeatBackMove(curPlayer, npcObj)
     return
 
-# 针对NPC被推出远距离一直卡墙角问题,法宝挑战副本特殊处理为超过4米 NPC自动回退一些
-def BeatBackMove(curPlayer, npcObj):
-    if GameWorld.GetMap().GetMapID() != ChConfig.Def_FBMapID_MagicWeapon:
-        return
-    if npcObj.GetCurAction() == IPY_GameWorld.laNPCSkillWarning:
-        return
-    
-    posMap = npcObj.GetRefreshPosAt(npcObj.GetCurRefreshPointIndex())
-    if not posMap:
-        return
-    #范围校验
-    posMapX = posMap.GetPosX()
-    posMapY = posMap.GetPosY()
-    if GameWorld.GetDist(npcObj.GetPosX(), npcObj.GetPosY(), posMapX, posMapY) < 8:
-        # 单次位移不超过5米
-        return
-    npcControl = NPCCommon.NPCControl(npcObj)
-    moveDestX, moveDestY = npcControl.GetMoveNearPosEx(posMapX, posMapY, 5)
-    npcObj.Move(moveDestX, moveDestY)
-    return
+## 针对NPC被推出远距离一直卡墙角问题,法宝挑战副本特殊处理为超过4米 NPC自动回退一些
+#def BeatBackMove(curPlayer, npcObj):
+#    if GameWorld.GetMap().GetMapID() != ChConfig.Def_FBMapID_MagicWeapon:
+#        return
+#    if npcObj.GetCurAction() == IPY_GameWorld.laNPCSkillWarning:
+#        return
+#    
+#    posMap = npcObj.GetRefreshPosAt(npcObj.GetCurRefreshPointIndex())
+#    if not posMap:
+#        return
+#    #范围校验
+#    posMapX = posMap.GetPosX()
+#    posMapY = posMap.GetPosY()
+#    if GameWorld.GetDist(npcObj.GetPosX(), npcObj.GetPosY(), posMapX, posMapY) < 8:
+#        # 单次位移不超过5米
+#        return
+#    npcControl = NPCCommon.NPCControl(npcObj)
+#    moveDestX, moveDestY = npcControl.GetMoveNearPosEx(posMapX, posMapY, 5)
+#    npcObj.Move(moveDestX, moveDestY)
+#    return
 
 #===============================================================================
 # //B4 03 吸引NPC仇恨 #tagNPCAttention

--
Gitblit v1.8.0