From c48c06a3e9465bd2a4dda0cf8d8e3a5a6bc6eedd Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 08 十一月 2018 14:06:42 +0800
Subject: [PATCH] 4623 【1.2】【后端】全局击杀掉落支持数量配置

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py |  560 ++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 520 insertions(+), 40 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 9d231c9..fc6cd29 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -80,11 +80,14 @@
                         ("DWORD", "LimitMagicWeapon", 0),
                         ("WORD", "LimiRealmLV", 0),
                         ("DWORD", "LimitMissionID", 0),
+                        ("BYTE", "LimitVIPLV", 0),
                         ),
 
                 "ItemCompound":(
                         ("WORD", "ID", 1),
+                        ("BYTE", "ComposeGroup", 0),
                         ("list", "MakeID", 0),
+                        ("BYTE", "IsFirstSuccMakeJobItem", 0),
                         ("list", "UnfixedItemID", 0),
                         ("BYTE", "UnfixedItemCount", 0),
                         ("list", "FixedItemID", 0),
@@ -92,8 +95,10 @@
                         ("DWORD", "NeedMoney", 0),
                         ("WORD", "SuccessRate", 0),
                         ("WORD", "SuccessRateMax", 0),
+                        ("list", "SuccessRateIncrease", 0),
                         ("BYTE", "AddonsCountMax", 0),
                         ("char", "SysMark", 0),
+                        ("BYTE", "SysMarkParamType", 0),
                         ),
 
                 "ItemPlus":(
@@ -130,7 +135,9 @@
                         ("list", "BaseAttrTypes", 0),
                         ("list", "BaseAttrValues", 0),
                         ("list", "HelpBattleSkills", 0),
+                        ("DWORD", "FightPowerEx", 0),
                         ("list", "EquipPlaceColorList", 0),
+                        ("list", "HelpBattleNotify", 0),
                         ),
 
                 "DogzEquipPlus":(
@@ -289,6 +296,7 @@
                         ("DWORD", "NPCID", 1),
                         ("BYTE", "IsStrengthenByPlayerCount", 0),
                         ("BYTE", "LVStrengthenType", 0),
+                        ("BYTE", "CmpNPCBaseLV", 0),
                         ("DWORD", "HitTime", 0),
                         ("DWORD", "DefCoefficient", 0),
                         ("DWORD", "AtkCoefficient", 0),
@@ -371,6 +379,9 @@
                         ("DWORD", "CftFaintDefRate", 0),
                         ("DWORD", "CftAtkSpeed", 0),
                         ("DWORD", "CftLuckyHit", 0),
+                        ("DWORD", "CftSpeedPer", 0),
+                        ("DWORD", "CftAtkPer", 0),
+                        ("DWORD", "CftMaxHPPer", 0),
                         ),
 
                 "NPCDropItem":(
@@ -495,6 +506,9 @@
                         ("DWORD", "SkillAtkRateC", 0),
                         ("DWORD", "SpeedPerC", 0),
                         ("DWORD", "AtkSpeedC", 0),
+                        ("DWORD", "SkillAtkRateReduceC", 0),
+                        ("DWORD", "HitC", 0),
+                        ("DWORD", "MissC", 0),
                         ),
 
                 "Success":(
@@ -518,6 +532,7 @@
                         ("DWORD", "PreTreasure", 0),
                         ("list", "SuccID", 0),
                         ("list", "Potentials", 0),
+                        ("list", "SkillPower", 0),
                         ("dict", "NeedItem", 0),
                         ),
 
@@ -529,6 +544,7 @@
                         ("list", "UnLockSkill", 0),
                         ("DWORD", "ActiveMWID", 0),
                         ("list", "ItemAward", 0),
+                        ("DWORD", "ActiveSoulID", 0),
                         ),
 
                 "TreasurePrivilege":(
@@ -619,11 +635,13 @@
                         ("list", "LimitVIPLV", 0),
                         ("DWORD", "LimitLV", 0),
                         ("list", "LimitCnt", 0),
+                        ("DWORD", "ServerLimitCnt", 0),
                         ("BYTE", "MoneyType", 0),
                         ("DWORD", "MoneyNum", 0),
                         ("DWORD", "MoneyOriginal", 0),
                         ("DWORD", "LimitValue", 0),
                         ("char", "NotifyMark", 0),
+                        ("char", "MailKey", 0),
                         ),
 
                 "ActSpringSale":(
@@ -632,9 +650,12 @@
                         ("char", "EndDate", 0),
                         ("list", "StartTimeList", 0),
                         ("list", "EndTimeList", 0),
+                        ("WORD", "AdvanceMinutes", 0),
                         ("WORD", "LVLimit", 0),
                         ("BYTE", "IsDayReset", 0),
                         ("list", "ShopTypeList", 0),
+                        ("char", "MailKey", 0),
+                        ("list", "MailItemPrize", 0),
                         ),
 
                 "DailyQuest":(
@@ -697,6 +718,9 @@
                         ("DWORD", "NPCID", 1),
                         ("DWORD", "MapID", 0),
                         ("BYTE", "RefreshMark", 0),
+                        ("BYTE", "IsNeedShunt", 0),
+                        ("BYTE", "RelatedType", 0),
+                        ("WORD", "RelatedID", 0),
                         ("DWORD", "StoneNPCID", 0),
                         ),
 
@@ -745,7 +769,7 @@
                         ("DWORD", "DataMapID", 1),
                         ("BYTE", "InspireType", 1),
                         ("WORD", "InspireMaxLV", 0),
-                        ("DWORD", "MoneyCount", 0),
+                        ("char", "MoneyCount", 0),
                         ),
 
                 "RuneCompound":(
@@ -783,6 +807,7 @@
                         ("list", "RandTimeList1", 0),
                         ("list", "RandItemList2", 0),
                         ("list", "RandTimeList2", 0),
+                        ("dict", "RandItemByUseCount", 0),
                         ("list", "JobItemList", 0),
                         ("BYTE", "MoneyType", 0),
                         ("DWORD", "MoneyCount", 0),
@@ -879,6 +904,8 @@
                         ("dict", "GridItemInfo", 0),
                         ("list", "JobItemList", 0),
                         ("list", "GridItemRateListFree", 0),
+                        ("list", "FreeGridItemRateList2", 0),
+                        ("dict", "FreeGridItemRateList3", 0),
                         ("list", "GridItemRateList1", 0),
                         ("list", "GridItemRateList2", 0),
                         ("dict", "GridItemRateList3", 0),
@@ -898,9 +925,12 @@
                         ("char", "EndDate", 0),
                         ("list", "StartTimeList", 0),
                         ("list", "EndTimeList", 0),
+                        ("WORD", "AdvanceMinutes", 0),
                         ("WORD", "LVLimit", 0),
                         ("BYTE", "IsDayReset", 0),
-                        ("list", "GiftbagList", 0),
+                        ("list", "GiftbagTypeList", 0),
+                        ("char", "MailKey", 0),
+                        ("list", "MailItemPrize", 0),
                         ),
 
                 "FlashGiftbag":(
@@ -913,6 +943,21 @@
                         ("char", "NotifyKey", 0),
                         ),
 
+                "ActExpRate":(
+                        ("DWORD", "CfgID", 1),
+                        ("WORD", "LVLimit", 0),
+                        ("DWORD", "AddExpRate", 0),
+                        ),
+
+                "ActCostRebate":(
+                        ("DWORD", "CfgID", 1),
+                        ("char", "StartDate", 0),
+                        ("char", "EndDate", 0),
+                        ("WORD", "LVLimit", 0),
+                        ("BYTE", "IsDayReset", 0),
+                        ("list", "TemplateIDList", 0),
+                        ),
+
                 "CostRebateTemplate":(
                         ("DWORD", "TemplateID", 1),
                         ("DWORD", "NeedCostGold", 0),
@@ -921,12 +966,27 @@
                         ("char", "NotifyKey", 0),
                         ),
 
+                "ActBossReborn":(
+                        ("DWORD", "CfgID", 1),
+                        ("char", "StartDate", 0),
+                        ("char", "EndDate", 0),
+                        ("BYTE", "ResetType", 0),
+                        ("WORD", "LVLimit", 0),
+                        ("BYTE", "TemplateID", 0),
+                        ),
+
                 "BossReborn":(
                         ("BYTE", "TemplateID", 1),
                         ("BYTE", "ID", 1),
                         ("DWORD", "TotalTimes", 0),
                         ("WORD", "SingleTimes", 0),
                         ("list", "Reward", 0),
+                        ),
+
+                "ActRealmPoint":(
+                        ("DWORD", "CfgID", 1),
+                        ("WORD", "Multiple", 0),
+                        ("WORD", "LVLimit", 0),
                         ),
 
                 "TrialExchange":(
@@ -949,6 +1009,83 @@
                         ("DWORD", "Index", 1),
                         ("DWORD", "NeedPoint", 0),
                         ("dict", "Award", 0),
+                        ),
+
+                "MapEventPoint":(
+                        ("DWORD", "MapID", 1),
+                        ("DWORD", "NPCID", 1),
+                        ("WORD", "LowLV", 0),
+                        ("WORD", "HighestLV", 0),
+                        ("DWORD", "Defense", 0),
+                        ),
+
+                "TalentSkill":(
+                        ("DWORD", "SkillID", 1),
+                        ("BYTE", "TalentType", 0),
+                        ("BYTE", "Series", 0),
+                        ),
+
+                "ActFlashSale":(
+                        ("DWORD", "CfgID", 1),
+                        ("char", "StartDate", 0),
+                        ("char", "EndDate", 0),
+                        ("list", "StartTimeList", 0),
+                        ("list", "EndTimeList", 0),
+                        ("WORD", "AdvanceMinutes", 0),
+                        ("WORD", "LVLimit", 0),
+                        ("BYTE", "IsDayReset", 0),
+                        ("list", "ShopTypeList", 0),
+                        ("char", "MailKey", 0),
+                        ("list", "MailItemPrize", 0),
+                        ),
+
+                "ActWishingWell":(
+                        ("DWORD", "CfgID", 1),
+                        ("char", "StartDate", 0),
+                        ("char", "EndDate", 0),
+                        ("BYTE", "IsDayReset", 0),
+                        ("BYTE", "ResetType", 0),
+                        ("WORD", "LVLimit", 0),
+                        ("BYTE", "TemplateID", 0),
+                        ),
+
+                "WishingWell":(
+                        ("BYTE", "TemplateID", 1),
+                        ("BYTE", "IsFree", 0),
+                        ("list", "WorldLVLimit", 0),
+                        ("DWORD", "ItemID", 0),
+                        ("WORD", "ItemCnt", 0),
+                        ("BYTE", "IsBind", 0),
+                        ("DWORD", "Weight", 0),
+                        ("DWORD", "Mark", 0),
+                        ),
+
+                "FunctionForecast":(
+                        ("DWORD", "FuncID", 1),
+                        ("dict", "Award", 0),
+                        ),
+
+                "ChatBubbleBox":(
+                        ("BYTE", "BoxID", 1),
+                        ("WORD", "NeedLV", 0),
+                        ("BYTE", "NeedVIPLVGift", 0),
+                        ),
+
+                "ActTotalRecharge":(
+                        ("DWORD", "CfgID", 1),
+                        ("char", "StartDate", 0),
+                        ("char", "EndDate", 0),
+                        ("WORD", "LVLimit", 0),
+                        ("BYTE", "IsDayReset", 0),
+                        ("list", "TemplateIDList", 0),
+                        ),
+
+                "TotalRechargeTemplate":(
+                        ("DWORD", "TemplateID", 1),
+                        ("DWORD", "NeedGold", 0),
+                        ("BYTE", "AwardIndex", 0),
+                        ("dict", "AwardItem", 0),
+                        ("char", "NotifyKey", 0),
                         ),
                 }
 
@@ -1049,21 +1186,25 @@
         self.LimitLV = 0
         self.LimitMagicWeapon = 0
         self.LimiRealmLV = 0
-        self.LimitMissionID = 0
+        self.LimitMissionID = 0
+        self.LimitVIPLV = 0
         return
         
     def GetFuncId(self): return self.FuncId # 功能标识
     def GetLimitLV(self): return self.LimitLV # 开启等级
     def GetLimitMagicWeapon(self): return self.LimitMagicWeapon # 需要解锁法宝ID
     def GetLimiRealmLV(self): return self.LimiRealmLV # 需要境界等级
-    def GetLimitMissionID(self): return self.LimitMissionID # 需要完成的任务ID
+    def GetLimitMissionID(self): return self.LimitMissionID # 需要完成的任务ID
+    def GetLimitVIPLV(self): return self.LimitVIPLV # 需要VIP等级
 
 # 合成表
 class IPY_ItemCompound():
     
     def __init__(self):
         self.ID = 0
+        self.ComposeGroup = 0
         self.MakeID = []
+        self.IsFirstSuccMakeJobItem = 0
         self.UnfixedItemID = []
         self.UnfixedItemCount = 0
         self.FixedItemID = []
@@ -1071,12 +1212,16 @@
         self.NeedMoney = 0
         self.SuccessRate = 0
         self.SuccessRateMax = 0
+        self.SuccessRateIncrease = []
         self.AddonsCountMax = 0
-        self.SysMark = ""
+        self.SysMark = ""
+        self.SysMarkParamType = 0
         return
         
     def GetID(self): return self.ID # 合成配置编号ID
+    def GetComposeGroup(self): return self.ComposeGroup # 合成归组类型
     def GetMakeID(self): return self.MakeID # 可合成的道具ID,多个则随机一个
+    def GetIsFirstSuccMakeJobItem(self): return self.IsFirstSuccMakeJobItem # 首次成功是否必出本职业
     def GetUnfixedItemID(self): return self.UnfixedItemID # 不固定道具ID, 多个ID时则任意一种均可
     def GetUnfixedItemCount(self): return self.UnfixedItemCount # 不固定道具消耗数量
     def GetFixedItemID(self): return self.FixedItemID # 消耗固定道具ID, 多个ID时代表每个ID均需消耗
@@ -1084,8 +1229,10 @@
     def GetNeedMoney(self): return self.NeedMoney #  消耗铜钱
     def GetSuccessRate(self): return self.SuccessRate #  成功率万分率
     def GetSuccessRateMax(self): return self.SuccessRateMax #  最大成功率万分率
+    def GetSuccessRateIncrease(self): return self.SuccessRateIncrease # 提高成功率道具, 道具ID|个数|提高的概率
     def GetAddonsCountMax(self): return self.AddonsCountMax # 最大可附加材料数, 增加概率用, 非必须, 0代表不可附加材料
-    def GetSysMark(self): return self.SysMark # 提示mark
+    def GetSysMark(self): return self.SysMark # 提示mark
+    def GetSysMarkParamType(self): return self.SysMarkParamType # 系统提示参数组合类型
 
 # 物品强化效果表
 class IPY_ItemPlus():
@@ -1157,14 +1304,18 @@
         self.BaseAttrTypes = []
         self.BaseAttrValues = []
         self.HelpBattleSkills = []
-        self.EquipPlaceColorList = []
+        self.FightPowerEx = 0
+        self.EquipPlaceColorList = []
+        self.HelpBattleNotify = []
         return
         
     def GetDogzID(self): return self.DogzID # 神兽ID
     def GetBaseAttrTypes(self): return self.BaseAttrTypes # 基础属性类型列表
     def GetBaseAttrValues(self): return self.BaseAttrValues # 基础属性值列表
     def GetHelpBattleSkills(self): return self.HelpBattleSkills # 助战技能ID列表
-    def GetEquipPlaceColorList(self): return self.EquipPlaceColorList # 穿戴装备颜色限制
+    def GetFightPowerEx(self): return self.FightPowerEx # 助战附加战力
+    def GetEquipPlaceColorList(self): return self.EquipPlaceColorList # 穿戴装备颜色限制
+    def GetHelpBattleNotify(self): return self.HelpBattleNotify # 助战广播 ["广播key",[参数1,参数2,...],广播CD分钟]
 
 # 神兽强化表
 class IPY_DogzEquipPlus():
@@ -1490,6 +1641,7 @@
         self.NPCID = 0
         self.IsStrengthenByPlayerCount = 0
         self.LVStrengthenType = 0
+        self.CmpNPCBaseLV = 0
         self.HitTime = 0
         self.DefCoefficient = 0
         self.AtkCoefficient = 0
@@ -1507,6 +1659,7 @@
     def GetNPCID(self): return self.NPCID # NPCID
     def GetIsStrengthenByPlayerCount(self): return self.IsStrengthenByPlayerCount # 是否根据人数成长
     def GetLVStrengthenType(self): return self.LVStrengthenType # 等级成长类型, 0-不按等级成长;1-按玩家平均等级;2-按玩家最大等级;3-按世界等级;
+    def GetCmpNPCBaseLV(self): return self.CmpNPCBaseLV # 是否比较NPC表等级, 是的话取NPC表配置等级与成长等级中较大等级
     def GetHitTime(self): return self.HitTime # 受击次数
     def GetDefCoefficient(self): return self.DefCoefficient # 人物防御系数
     def GetAtkCoefficient(self): return self.AtkCoefficient # 人物攻击系数
@@ -1642,7 +1795,10 @@
         self.CftIgnoreDefRateReduce = 0
         self.CftFaintDefRate = 0
         self.CftAtkSpeed = 0
-        self.CftLuckyHit = 0
+        self.CftLuckyHit = 0
+        self.CftSpeedPer = 0
+        self.CftAtkPer = 0
+        self.CftMaxHPPer = 0
         return
         
     def GetLV(self): return self.LV # 等级
@@ -1664,7 +1820,10 @@
     def GetCftIgnoreDefRateReduce(self): return self.CftIgnoreDefRateReduce # 无视防御抗性系数
     def GetCftFaintDefRate(self): return self.CftFaintDefRate # 控制抵抗系数
     def GetCftAtkSpeed(self): return self.CftAtkSpeed # 攻速系数
-    def GetCftLuckyHit(self): return self.CftLuckyHit # 会心一击系数
+    def GetCftLuckyHit(self): return self.CftLuckyHit # 会心一击系数
+    def GetCftSpeedPer(self): return self.CftSpeedPer # 移动速度百分比系数
+    def GetCftAtkPer(self): return self.CftAtkPer # 攻击百分比系数
+    def GetCftMaxHPPer(self): return self.CftMaxHPPer # 生命百分比系数
 
 # NPC掉落表
 class IPY_NPCDropItem():
@@ -1892,7 +2051,10 @@
         self.SuperHitReduceC = 0
         self.SkillAtkRateC = 0
         self.SpeedPerC = 0
-        self.AtkSpeedC = 0
+        self.AtkSpeedC = 0
+        self.SkillAtkRateReduceC = 0
+        self.HitC = 0
+        self.MissC = 0
         return
         
     def GetClassLV(self): return self.ClassLV #  装备阶级
@@ -1919,7 +2081,10 @@
     def GetSuperHitReduceC(self): return self.SuperHitReduceC #  暴击抗性百分比系数
     def GetSkillAtkRateC(self): return self.SkillAtkRateC #  技能伤害百分比系数
     def GetSpeedPerC(self): return self.SpeedPerC #  移动速度百分比系数
-    def GetAtkSpeedC(self): return self.AtkSpeedC #  攻击速度系数
+    def GetAtkSpeedC(self): return self.AtkSpeedC #  攻击速度系数
+    def GetSkillAtkRateReduceC(self): return self.SkillAtkRateReduceC #  技能减伤百分比系数
+    def GetHitC(self): return self.HitC #  命中系数
+    def GetMissC(self): return self.MissC #  闪避系数
 
 # 成就表
 class IPY_Success():
@@ -1961,6 +2126,7 @@
         self.PreTreasure = 0
         self.SuccID = []
         self.Potentials = []
+        self.SkillPower = []
         self.NeedItem = {}
         return
         
@@ -1969,6 +2135,7 @@
     def GetPreTreasure(self): return self.PreTreasure # 前置法宝
     def GetSuccID(self): return self.SuccID # 成就ID
     def GetPotentials(self): return self.Potentials # 技能潜力升级
+    def GetSkillPower(self): return self.SkillPower # 技能解锁战力
     def GetNeedItem(self): return self.NeedItem # 需要消耗物品
 
 # 法宝升级表
@@ -1981,7 +2148,8 @@
         self.AddAttr = {}
         self.UnLockSkill = []
         self.ActiveMWID = 0
-        self.ItemAward = []
+        self.ItemAward = []
+        self.ActiveSoulID = 0
         return
         
     def GetMWID(self): return self.MWID # 法宝ID
@@ -1990,7 +2158,8 @@
     def GetAddAttr(self): return self.AddAttr # 属性
     def GetUnLockSkill(self): return self.UnLockSkill # 解锁的技能
     def GetActiveMWID(self): return self.ActiveMWID # 激活法宝ID
-    def GetItemAward(self): return self.ItemAward # 物品奖励[itemID,cnt,isbind]
+    def GetItemAward(self): return self.ItemAward # 物品奖励[itemID,cnt,isbind]
+    def GetActiveSoulID(self): return self.ActiveSoulID # 激活魂ID
 
 # 法宝特权表
 class IPY_TreasurePrivilege():
@@ -2164,11 +2333,13 @@
         self.LimitVIPLV = []
         self.LimitLV = 0
         self.LimitCnt = []
+        self.ServerLimitCnt = 0
         self.MoneyType = 0
         self.MoneyNum = 0
         self.MoneyOriginal = 0
         self.LimitValue = 0
-        self.NotifyMark = ""
+        self.NotifyMark = ""
+        self.MailKey = ""
         return
         
     def GetID(self): return self.ID # ID
@@ -2183,12 +2354,14 @@
     def GetRefreshType(self): return self.RefreshType # 刷新类型 0-不重置,1-onWeek0点,2-onWeek5点,3-OnDay0点,4-OnDay5点
     def GetLimitVIPLV(self): return self.LimitVIPLV # VIP限制
     def GetLimitLV(self): return self.LimitLV # 等级限制
-    def GetLimitCnt(self): return self.LimitCnt # 限制数量
+    def GetLimitCnt(self): return self.LimitCnt # 个人限制数量
+    def GetServerLimitCnt(self): return self.ServerLimitCnt # 全服限制数量
     def GetMoneyType(self): return self.MoneyType # 金钱类型
     def GetMoneyNum(self): return self.MoneyNum # 金钱数量
     def GetMoneyOriginal(self): return self.MoneyOriginal # 原价
     def GetLimitValue(self): return self.LimitValue # 限制条件
-    def GetNotifyMark(self): return self.NotifyMark # 广播提示
+    def GetNotifyMark(self): return self.NotifyMark # 广播提示
+    def GetMailKey(self): return self.MailKey # 背包不足时邮件KEY
 
 # 限时特惠表
 class IPY_ActSpringSale():
@@ -2199,9 +2372,12 @@
         self.EndDate = ""
         self.StartTimeList = []
         self.EndTimeList = []
+        self.AdvanceMinutes = 0
         self.LVLimit = 0
         self.IsDayReset = 0
-        self.ShopTypeList = []
+        self.ShopTypeList = []
+        self.MailKey = ""
+        self.MailItemPrize = []
         return
         
     def GetCfgID(self): return self.CfgID # 配置ID
@@ -2209,9 +2385,12 @@
     def GetEndDate(self): return self.EndDate # 结束日期
     def GetStartTimeList(self): return self.StartTimeList # 开启时间列表, 支持多个时段
     def GetEndTimeList(self): return self.EndTimeList # 结束时间列表, 支持多个时段
+    def GetAdvanceMinutes(self): return self.AdvanceMinutes # 前端提前X分钟展示活动
     def GetLVLimit(self): return self.LVLimit # 限制等级
     def GetIsDayReset(self): return self.IsDayReset # 是否每天重置
-    def GetShopTypeList(self): return self.ShopTypeList # 商店类型列表
+    def GetShopTypeList(self): return self.ShopTypeList # 商店类型列表
+    def GetMailKey(self): return self.MailKey # 活动更新时发送邮件key
+    def GetMailItemPrize(self): return self.MailItemPrize # 活动更新时发送邮件奖励物品
 
 # 日常任务表
 class IPY_DailyQuest():
@@ -2338,12 +2517,18 @@
         self.NPCID = 0
         self.MapID = 0
         self.RefreshMark = 0
+        self.IsNeedShunt = 0
+        self.RelatedType = 0
+        self.RelatedID = 0
         self.StoneNPCID = 0
         return
         
     def GetNPCID(self): return self.NPCID # ID
     def GetMapID(self): return self.MapID # 地图ID
     def GetRefreshMark(self): return self.RefreshMark # 刷新标识点
+    def GetIsNeedShunt(self): return self.IsNeedShunt # 是否需要分流
+    def GetRelatedType(self): return self.RelatedType # 刷怪关联类型
+    def GetRelatedID(self): return self.RelatedID # 关联ID
     def GetStoneNPCID(self): return self.StoneNPCID # 墓碑NPCID
 
 # 古神禁地表
@@ -2441,7 +2626,7 @@
         self.DataMapID = 0
         self.InspireType = 0
         self.InspireMaxLV = 0
-        self.MoneyCount = 0
+        self.MoneyCount = ""
         return
         
     def GetDataMapID(self): return self.DataMapID # 地图ID
@@ -2516,6 +2701,7 @@
         self.RandTimeList1 = []
         self.RandItemList2 = []
         self.RandTimeList2 = []
+        self.RandItemByUseCount = {}
         self.JobItemList = []
         self.MoneyType = 0
         self.MoneyCount = 0
@@ -2530,6 +2716,7 @@
     def GetRandTimeList1(self): return self.RandTimeList1 # 随机次数饼图列表1
     def GetRandItemList2(self): return self.RandItemList2 # 随机物品饼图列表2
     def GetRandTimeList2(self): return self.RandTimeList2 # 随机次数饼图列表2
+    def GetRandItemByUseCount(self): return self.RandItemByUseCount # 宝箱开启X次对应特殊产出,与饼图列表2互斥
     def GetJobItemList(self): return self.JobItemList # 职业物品列表
     def GetMoneyType(self): return self.MoneyType # 货币类型
     def GetMoneyCount(self): return self.MoneyCount # 货币数量
@@ -2723,6 +2910,8 @@
         self.GridItemInfo = {}
         self.JobItemList = []
         self.GridItemRateListFree = []
+        self.FreeGridItemRateList2 = []
+        self.FreeGridItemRateList3 = {}
         self.GridItemRateList1 = []
         self.GridItemRateList2 = []
         self.GridItemRateList3 = {}
@@ -2734,6 +2923,8 @@
     def GetGridItemInfo(self): return self.GridItemInfo # 格子编号对应物品信息 {"编号":[物品ID, 个数], ...}
     def GetJobItemList(self): return self.JobItemList # 职业物品组列表 [[职业1物品, 职业2物品, ...], ...]
     def GetGridItemRateListFree(self): return self.GridItemRateListFree # 免费产出格子编号饼图 [[概率, 格子编号], ...]
+    def GetFreeGridItemRateList2(self): return self.FreeGridItemRateList2 # 免费每满x次保底产出格子编号饼图 [[概率, 格子编号], ...]
+    def GetFreeGridItemRateList3(self): return self.FreeGridItemRateList3 # 免费第x次必出产出格子编号饼图 {次数:[[概率, 格子编号], ...], ...}
     def GetGridItemRateList1(self): return self.GridItemRateList1 # 常规产出格子编号饼图 [[概率, 格子编号], ...]
     def GetGridItemRateList2(self): return self.GridItemRateList2 # 每满x次保底产出格子编号饼图 [[概率, 格子编号], ...]
     def GetGridItemRateList3(self): return self.GridItemRateList3 # 第x次必出产出格子编号饼图 {次数:[[概率, 格子编号], ...], ...}
@@ -2763,9 +2954,12 @@
         self.EndDate = ""
         self.StartTimeList = []
         self.EndTimeList = []
+        self.AdvanceMinutes = 0
         self.LVLimit = 0
         self.IsDayReset = 0
-        self.GiftbagList = []
+        self.GiftbagTypeList = []
+        self.MailKey = ""
+        self.MailItemPrize = []
         return
         
     def GetCfgID(self): return self.CfgID # 配置ID
@@ -2773,9 +2967,12 @@
     def GetEndDate(self): return self.EndDate # 结束日期
     def GetStartTimeList(self): return self.StartTimeList # 开启时间列表, 支持多个时段
     def GetEndTimeList(self): return self.EndTimeList # 结束时间列表, 支持多个时段
+    def GetAdvanceMinutes(self): return self.AdvanceMinutes # 前端提前X分钟展示活动
     def GetLVLimit(self): return self.LVLimit # 限制等级
     def GetIsDayReset(self): return self.IsDayReset # 是否每天重置
-    def GetGiftbagList(self): return self.GiftbagList # 礼包模板类型列表
+    def GetGiftbagTypeList(self): return self.GiftbagTypeList # 礼包类型列表
+    def GetMailKey(self): return self.MailKey # 活动更新时发送邮件key
+    def GetMailItemPrize(self): return self.MailItemPrize # 活动更新时发送邮件奖励物品
 
 # 限时礼包模板表
 class IPY_FlashGiftbag():
@@ -2798,6 +2995,38 @@
     def GetMainItemID(self): return self.MainItemID # 标的物品ID
     def GetNotifyKey(self): return self.NotifyKey # 全服广播key,默认两个参数(玩家名, 档位额度)
 
+# 双倍经验活动表
+class IPY_ActExpRate():
+    
+    def __init__(self):
+        self.CfgID = 0
+        self.LVLimit = 0
+        self.AddExpRate = 0
+        return
+        
+    def GetCfgID(self): return self.CfgID # 配置ID
+    def GetLVLimit(self): return self.LVLimit # 限制等级
+    def GetAddExpRate(self): return self.AddExpRate # 经验倍率加成,万分率
+
+# 消费返利活动表
+class IPY_ActCostRebate():
+    
+    def __init__(self):
+        self.CfgID = 0
+        self.StartDate = ""
+        self.EndDate = ""
+        self.LVLimit = 0
+        self.IsDayReset = 0
+        self.TemplateIDList = []
+        return
+        
+    def GetCfgID(self): return self.CfgID # 配置ID
+    def GetStartDate(self): return self.StartDate # 开启日期
+    def GetEndDate(self): return self.EndDate # 结束日期
+    def GetLVLimit(self): return self.LVLimit # 限制等级
+    def GetIsDayReset(self): return self.IsDayReset # 是否每天重置
+    def GetTemplateIDList(self): return self.TemplateIDList # 模板ID列表
+
 # 消费返利模板表
 class IPY_CostRebateTemplate():
     
@@ -2815,6 +3044,25 @@
     def GetAwardItemList(self): return self.AwardItemList # 返利物品信息列表 [(物品ID,个数,是否绑定),...]
     def GetNotifyKey(self): return self.NotifyKey # 全服广播key,默认两个参数(玩家名, 档位额度)
 
+# BOSS复活活动时间表
+class IPY_ActBossReborn():
+    
+    def __init__(self):
+        self.CfgID = 0
+        self.StartDate = ""
+        self.EndDate = ""
+        self.ResetType = 0
+        self.LVLimit = 0
+        self.TemplateID = 0
+        return
+        
+    def GetCfgID(self): return self.CfgID # 配置ID
+    def GetStartDate(self): return self.StartDate # 开启日期
+    def GetEndDate(self): return self.EndDate # 结束日期
+    def GetResetType(self): return self.ResetType # 重置类型,0-0点重置;1-5点重置
+    def GetLVLimit(self): return self.LVLimit # 限制等级
+    def GetTemplateID(self): return self.TemplateID # 模板编号
+
 # BOSS复活表
 class IPY_BossReborn():
     
@@ -2831,6 +3079,19 @@
     def GetTotalTimes(self): return self.TotalTimes # 可完成的总次数,0表示不限次数
     def GetSingleTimes(self): return self.SingleTimes # 单次领奖需要的次数
     def GetReward(self): return self.Reward # 奖励物品ID1
+
+# 多倍修行点活动时间表
+class IPY_ActRealmPoint():
+    
+    def __init__(self):
+        self.CfgID = 0
+        self.Multiple = 0
+        self.LVLimit = 0
+        return
+        
+    def GetCfgID(self): return self.CfgID # 配置ID
+    def GetMultiple(self): return self.Multiple # 倍数
+    def GetLVLimit(self): return self.LVLimit # 限制等级
 
 # 宗门试炼兑换表
 class IPY_TrialExchange():
@@ -2878,6 +3139,169 @@
     def GetIndex(self): return self.Index # 索引
     def GetNeedPoint(self): return self.NeedPoint # 需要点数
     def GetAward(self): return self.Award # 奖励 {"职业":[[物品ID,个数,是否绑定],...], ...}
+
+# 地图NPC配置表-挂机点
+class IPY_MapEventPoint():
+    
+    def __init__(self):
+        self.MapID = 0
+        self.NPCID = 0
+        self.LowLV = 0
+        self.HighestLV = 0
+        self.Defense = 0
+        return
+        
+    def GetMapID(self): return self.MapID
+    def GetNPCID(self): return self.NPCID
+    def GetLowLV(self): return self.LowLV #  推荐最低等级
+    def GetHighestLV(self): return self.HighestLV #  推荐最高等级
+    def GetDefense(self): return self.Defense #  推荐防御
+
+# 天赋技能表
+class IPY_TalentSkill():
+    
+    def __init__(self):
+        self.SkillID = 0
+        self.TalentType = 0
+        self.Series = 0
+        return
+        
+    def GetSkillID(self): return self.SkillID # 技能ID
+    def GetTalentType(self): return self.TalentType # 天赋类型
+    def GetSeries(self): return self.Series # 天赋系别
+
+# 限时抢购表
+class IPY_ActFlashSale():
+    
+    def __init__(self):
+        self.CfgID = 0
+        self.StartDate = ""
+        self.EndDate = ""
+        self.StartTimeList = []
+        self.EndTimeList = []
+        self.AdvanceMinutes = 0
+        self.LVLimit = 0
+        self.IsDayReset = 0
+        self.ShopTypeList = []
+        self.MailKey = ""
+        self.MailItemPrize = []
+        return
+        
+    def GetCfgID(self): return self.CfgID # 配置ID
+    def GetStartDate(self): return self.StartDate # 开启日期
+    def GetEndDate(self): return self.EndDate # 结束日期
+    def GetStartTimeList(self): return self.StartTimeList # 开启时间列表, 支持多个时段
+    def GetEndTimeList(self): return self.EndTimeList # 结束时间列表, 支持多个时段
+    def GetAdvanceMinutes(self): return self.AdvanceMinutes # 前端提前X分钟展示活动
+    def GetLVLimit(self): return self.LVLimit # 限制等级
+    def GetIsDayReset(self): return self.IsDayReset # 是否每天重置
+    def GetShopTypeList(self): return self.ShopTypeList # 商店类型列表
+    def GetMailKey(self): return self.MailKey # 活动更新时发送邮件key
+    def GetMailItemPrize(self): return self.MailItemPrize # 活动更新时发送邮件奖励物品
+
+# 许愿池活动时间表
+class IPY_ActWishingWell():
+    
+    def __init__(self):
+        self.CfgID = 0
+        self.StartDate = ""
+        self.EndDate = ""
+        self.IsDayReset = 0
+        self.ResetType = 0
+        self.LVLimit = 0
+        self.TemplateID = 0
+        return
+        
+    def GetCfgID(self): return self.CfgID # 配置ID
+    def GetStartDate(self): return self.StartDate # 开启日期
+    def GetEndDate(self): return self.EndDate # 结束日期
+    def GetIsDayReset(self): return self.IsDayReset # 是否每天重置
+    def GetResetType(self): return self.ResetType # 重置类型,0-0点重置;1-5点重置
+    def GetLVLimit(self): return self.LVLimit # 限制等级
+    def GetTemplateID(self): return self.TemplateID # 模板编号
+
+# 许愿池库模板表
+class IPY_WishingWell():
+    
+    def __init__(self):
+        self.TemplateID = 0
+        self.IsFree = 0
+        self.WorldLVLimit = []
+        self.ItemID = 0
+        self.ItemCnt = 0
+        self.IsBind = 0
+        self.Weight = 0
+        self.Mark = 0
+        return
+        
+    def GetTemplateID(self): return self.TemplateID # 模板ID
+    def GetIsFree(self): return self.IsFree # 是否免费库
+    def GetWorldLVLimit(self): return self.WorldLVLimit # 世界等级范围
+    def GetItemID(self): return self.ItemID # 物品ID
+    def GetItemCnt(self): return self.ItemCnt # 物品数量
+    def GetIsBind(self): return self.IsBind # 是否绑定
+    def GetWeight(self): return self.Weight # 权重
+    def GetMark(self): return self.Mark # 排序用标识
+
+# 功能预告表
+class IPY_FunctionForecast():
+    
+    def __init__(self):
+        self.FuncID = 0
+        self.Award = {}
+        return
+        
+    def GetFuncID(self): return self.FuncID # 功能ID
+    def GetAward(self): return self.Award # 属性类型
+
+# 聊天气泡表
+class IPY_ChatBubbleBox():
+    
+    def __init__(self):
+        self.BoxID = 0
+        self.NeedLV = 0
+        self.NeedVIPLVGift = 0
+        return
+        
+    def GetBoxID(self): return self.BoxID # 气泡框ID
+    def GetNeedLV(self): return self.NeedLV # 所需等级
+    def GetNeedVIPLVGift(self): return self.NeedVIPLVGift # 所需购买VIP等级礼包
+
+# 累计充值活动表
+class IPY_ActTotalRecharge():
+    
+    def __init__(self):
+        self.CfgID = 0
+        self.StartDate = ""
+        self.EndDate = ""
+        self.LVLimit = 0
+        self.IsDayReset = 0
+        self.TemplateIDList = []
+        return
+        
+    def GetCfgID(self): return self.CfgID # 配置ID
+    def GetStartDate(self): return self.StartDate # 开启日期
+    def GetEndDate(self): return self.EndDate # 结束日期
+    def GetLVLimit(self): return self.LVLimit # 限制等级
+    def GetIsDayReset(self): return self.IsDayReset # 是否每天重置
+    def GetTemplateIDList(self): return self.TemplateIDList # 模板ID列表
+
+# 累计充值模板表
+class IPY_TotalRechargeTemplate():
+    
+    def __init__(self):
+        self.TemplateID = 0
+        self.NeedGold = 0
+        self.AwardIndex = 0
+        self.AwardItem = {}
+        self.NotifyKey = ""
+        return
+        
+    def GetTemplateID(self): return self.TemplateID # 模板ID
+    def GetNeedGold(self): return self.NeedGold # 需要充值仙玉数
+    def GetAwardIndex(self): return self.AwardIndex # 返利奖励索引0~31,同个模板中不重复
+    def GetAwardItem(self): return self.AwardItem # 返利物品信息列表 {职业:[(物品ID,个数,是否绑定),...]}
+    def GetNotifyKey(self): return self.NotifyKey # 全服广播key,默认两个参数(玩家名, 档位额度)
 
 
 def Log(msg, playerID=0, par=0):
@@ -3069,16 +3493,42 @@
         self.ipyActFlashGiftbagLen = len(self.ipyActFlashGiftbagCache)
         self.ipyFlashGiftbagCache = self.__LoadFileData("FlashGiftbag", IPY_FlashGiftbag)
         self.ipyFlashGiftbagLen = len(self.ipyFlashGiftbagCache)
+        self.ipyActExpRateCache = self.__LoadFileData("ActExpRate", IPY_ActExpRate)
+        self.ipyActExpRateLen = len(self.ipyActExpRateCache)
+        self.ipyActCostRebateCache = self.__LoadFileData("ActCostRebate", IPY_ActCostRebate)
+        self.ipyActCostRebateLen = len(self.ipyActCostRebateCache)
         self.ipyCostRebateTemplateCache = self.__LoadFileData("CostRebateTemplate", IPY_CostRebateTemplate)
         self.ipyCostRebateTemplateLen = len(self.ipyCostRebateTemplateCache)
+        self.ipyActBossRebornCache = self.__LoadFileData("ActBossReborn", IPY_ActBossReborn)
+        self.ipyActBossRebornLen = len(self.ipyActBossRebornCache)
         self.ipyBossRebornCache = self.__LoadFileData("BossReborn", IPY_BossReborn)
         self.ipyBossRebornLen = len(self.ipyBossRebornCache)
+        self.ipyActRealmPointCache = self.__LoadFileData("ActRealmPoint", IPY_ActRealmPoint)
+        self.ipyActRealmPointLen = len(self.ipyActRealmPointCache)
         self.ipyTrialExchangeCache = self.__LoadFileData("TrialExchange", IPY_TrialExchange)
         self.ipyTrialExchangeLen = len(self.ipyTrialExchangeCache)
         self.ipyAllPeoplePartyCache = self.__LoadFileData("AllPeopleParty", IPY_AllPeopleParty)
         self.ipyAllPeoplePartyLen = len(self.ipyAllPeoplePartyCache)
         self.ipyAllPeoplePartyAwardCache = self.__LoadFileData("AllPeoplePartyAward", IPY_AllPeoplePartyAward)
         self.ipyAllPeoplePartyAwardLen = len(self.ipyAllPeoplePartyAwardCache)
+        self.ipyMapEventPointCache = self.__LoadFileData("MapEventPoint", IPY_MapEventPoint)
+        self.ipyMapEventPointLen = len(self.ipyMapEventPointCache)
+        self.ipyTalentSkillCache = self.__LoadFileData("TalentSkill", IPY_TalentSkill)
+        self.ipyTalentSkillLen = len(self.ipyTalentSkillCache)
+        self.ipyActFlashSaleCache = self.__LoadFileData("ActFlashSale", IPY_ActFlashSale)
+        self.ipyActFlashSaleLen = len(self.ipyActFlashSaleCache)
+        self.ipyActWishingWellCache = self.__LoadFileData("ActWishingWell", IPY_ActWishingWell)
+        self.ipyActWishingWellLen = len(self.ipyActWishingWellCache)
+        self.ipyWishingWellCache = self.__LoadFileData("WishingWell", IPY_WishingWell)
+        self.ipyWishingWellLen = len(self.ipyWishingWellCache)
+        self.ipyFunctionForecastCache = self.__LoadFileData("FunctionForecast", IPY_FunctionForecast)
+        self.ipyFunctionForecastLen = len(self.ipyFunctionForecastCache)
+        self.ipyChatBubbleBoxCache = self.__LoadFileData("ChatBubbleBox", IPY_ChatBubbleBox)
+        self.ipyChatBubbleBoxLen = len(self.ipyChatBubbleBoxCache)
+        self.ipyActTotalRechargeCache = self.__LoadFileData("ActTotalRecharge", IPY_ActTotalRecharge)
+        self.ipyActTotalRechargeLen = len(self.ipyActTotalRechargeCache)
+        self.ipyTotalRechargeTemplateCache = self.__LoadFileData("TotalRechargeTemplate", IPY_TotalRechargeTemplate)
+        self.ipyTotalRechargeTemplateLen = len(self.ipyTotalRechargeTemplateCache)
         Log("IPY_FuncConfig count=%s" % len(self.ipyFuncConfigDict))
         Log("IPY_DataMgr InitOK!")
         return
@@ -3170,22 +3620,26 @@
         for i, strValue in enumerate(rowList):
             if i == 0:
                 continue
-            fieldName = fieldList[i][1]
-            strValue = strValue.lstrip().rstrip()
-            if strValue.isdigit():
-                configValue = int(strValue)
-            elif (strValue.startswith("{") and strValue.endswith("}")) \
-                or (strValue.startswith("[") and strValue.endswith("]")) \
-                or (strValue.startswith("(") and strValue.endswith(")")):
-                configValue = eval(strValue)
-            elif "_" in strValue and type(self.__StrToDict(strValue)) == dict:
-                configValue = self.__StrToDict(strValue)
-            elif ChConfig.Def_Str_Montant in strValue:
-                configValue = eval("(%s,)" % strValue.replace(ChConfig.Def_Str_Montant, ","))
-            elif strValue in ["-", ""]:
-                configValue = ""
-            else:
-                configValue = self.__ToFloat(strValue)
+            try:
+                fieldName = fieldList[i][1]
+                strValue = strValue.lstrip().rstrip()
+                if strValue.isdigit():
+                    configValue = int(strValue)
+                elif (strValue.startswith("{") and strValue.endswith("}")) \
+                    or (strValue.startswith("[") and strValue.endswith("]")) \
+                    or (strValue.startswith("(") and strValue.endswith(")")):
+                    configValue = eval(strValue)
+                elif "_" in strValue and type(self.__StrToDict(strValue)) == dict:
+                    configValue = self.__StrToDict(strValue)
+                elif ChConfig.Def_Str_Montant in strValue:
+                    configValue = eval("(%s,)" % strValue.replace(ChConfig.Def_Str_Montant, ","))
+                elif strValue in ["-", ""]:
+                    configValue = ""
+                else:
+                    configValue = self.__ToFloat(strValue)
+            except BaseException:
+                ErrLog("SetIpyDataError: tableName=%s,key=%s,i=%s,value=%s" % ("FuncConfig", key, i, strValue))
+                raise
             setattr(funcConfigObj, fieldName, configValue)
         self.ipyFuncConfigDict[key] = funcConfigObj
         return
@@ -3407,16 +3861,42 @@
     def GetActFlashGiftbagByIndex(self, index): return self.ipyActFlashGiftbagCache[index]
     def GetFlashGiftbagCount(self): return self.ipyFlashGiftbagLen
     def GetFlashGiftbagByIndex(self, index): return self.ipyFlashGiftbagCache[index]
+    def GetActExpRateCount(self): return self.ipyActExpRateLen
+    def GetActExpRateByIndex(self, index): return self.ipyActExpRateCache[index]
+    def GetActCostRebateCount(self): return self.ipyActCostRebateLen
+    def GetActCostRebateByIndex(self, index): return self.ipyActCostRebateCache[index]
     def GetCostRebateTemplateCount(self): return self.ipyCostRebateTemplateLen
     def GetCostRebateTemplateByIndex(self, index): return self.ipyCostRebateTemplateCache[index]
+    def GetActBossRebornCount(self): return self.ipyActBossRebornLen
+    def GetActBossRebornByIndex(self, index): return self.ipyActBossRebornCache[index]
     def GetBossRebornCount(self): return self.ipyBossRebornLen
     def GetBossRebornByIndex(self, index): return self.ipyBossRebornCache[index]
+    def GetActRealmPointCount(self): return self.ipyActRealmPointLen
+    def GetActRealmPointByIndex(self, index): return self.ipyActRealmPointCache[index]
     def GetTrialExchangeCount(self): return self.ipyTrialExchangeLen
     def GetTrialExchangeByIndex(self, index): return self.ipyTrialExchangeCache[index]
     def GetAllPeoplePartyCount(self): return self.ipyAllPeoplePartyLen
     def GetAllPeoplePartyByIndex(self, index): return self.ipyAllPeoplePartyCache[index]
     def GetAllPeoplePartyAwardCount(self): return self.ipyAllPeoplePartyAwardLen
     def GetAllPeoplePartyAwardByIndex(self, index): return self.ipyAllPeoplePartyAwardCache[index]
+    def GetMapEventPointCount(self): return self.ipyMapEventPointLen
+    def GetMapEventPointByIndex(self, index): return self.ipyMapEventPointCache[index]
+    def GetTalentSkillCount(self): return self.ipyTalentSkillLen
+    def GetTalentSkillByIndex(self, index): return self.ipyTalentSkillCache[index]
+    def GetActFlashSaleCount(self): return self.ipyActFlashSaleLen
+    def GetActFlashSaleByIndex(self, index): return self.ipyActFlashSaleCache[index]
+    def GetActWishingWellCount(self): return self.ipyActWishingWellLen
+    def GetActWishingWellByIndex(self, index): return self.ipyActWishingWellCache[index]
+    def GetWishingWellCount(self): return self.ipyWishingWellLen
+    def GetWishingWellByIndex(self, index): return self.ipyWishingWellCache[index]
+    def GetFunctionForecastCount(self): return self.ipyFunctionForecastLen
+    def GetFunctionForecastByIndex(self, index): return self.ipyFunctionForecastCache[index]
+    def GetChatBubbleBoxCount(self): return self.ipyChatBubbleBoxLen
+    def GetChatBubbleBoxByIndex(self, index): return self.ipyChatBubbleBoxCache[index]
+    def GetActTotalRechargeCount(self): return self.ipyActTotalRechargeLen
+    def GetActTotalRechargeByIndex(self, index): return self.ipyActTotalRechargeCache[index]
+    def GetTotalRechargeTemplateCount(self): return self.ipyTotalRechargeTemplateLen
+    def GetTotalRechargeTemplateByIndex(self, index): return self.ipyTotalRechargeTemplateCache[index]
 
 IPYData = IPY_DataMgr()
 def IPY_Data(): return IPYData
@@ -3611,7 +4091,7 @@
     '''查询条件下与对应查询字段参考值相近的数据实例;参考值小于配置表最小值时返回none,大于最大值时返回最大值对应的实例
     @param dtName: 表名,不含tag
     @param keyName: 参考字段名
-    @param keyValue: 参考字段值
+    @param keyValue: 参考字段值,大于等于字段值时返回对应数据
     @param conditionDict: 查询条件,{查询字段名:字段值, ...}
     @return: 找不到数据返回 None , 否则返回对应的 ipyData 数据实例
     '''
@@ -3643,7 +4123,7 @@
         for i in xrange(near - 1, low - 1, -1):
             nearData = dataList[i]
             nearValue = getattr(nearData, "%s" % keyName)
-            if nearValue < keyValue:
+            if nearValue <= keyValue:
                 return nearData
             
     elif keyValue > nearValue:

--
Gitblit v1.8.0