hxp
2019-11-12 2b3d5e31bafd7a9cd4b4738e38186ffed4cee5f6
ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
@@ -41,6 +41,11 @@
                        ("char", "Numerical5", 0),
                        ),
                "CreateRoleLimitServer":(
                        ("list", "LimitServerGroupIDRangeList", 0),
                        ("list", "LimitServerGroupIDList", 0),
                        ),
                "WorldLV":(
                        ("WORD", "WorldLV", 1),
                        ("DWORD", "OpenServerSecond", 0),
@@ -59,6 +64,38 @@
                "MarketQuery":(
                        ("WORD", "QueryType", 1),
                        ("dict", "LimitInfo", 0),
                        ),
                "AuctionItem":(
                        ("DWORD", "AuctionItemID", 1),
                        ("BYTE", "NoticeSaleMinutes", 0),
                        ("WORD", "FamilySaleMinutes", 0),
                        ("WORD", "WorldSaleMinutes", 0),
                        ("WORD", "BasePrice", 0),
                        ("WORD", "BuyoutPrice", 0),
                        ("WORD", "BiddingAdd", 0),
                        ("BYTE", "NeedWorldNotify", 0),
                        ("BYTE", "Sortpriority", 0),
                        ),
                "AuctionSystemItem":(
                        ("DWORD", "CfgID", 1),
                        ("char", "StartDate", 0),
                        ("char", "EndDate", 0),
                        ("char", "StartTime", 0),
                        ("char", "EndTime", 0),
                        ("list", "WorldLVRange", 0),
                        ("list", "AddRandSecondRange", 0),
                        ("WORD", "ReplenishCDMinutes", 0),
                        ("BYTE", "ReplenishAuctionCount", 0),
                        ("DWORD", "ReplenishItemID", 0),
                        ("list", "ReplenishEquipInfo", 0),
                        ("list", "ReplenishEquipPlaces", 0),
                        ("BYTE", "AuctionCount", 0),
                        ("list", "RandMinuteRange", 0),
                        ("list", "ItemCountWeightList", 0),
                        ("list", "AuctionItemWeightList", 0),
                        ("list", "RandMailKeyList", 0),
                        ),
                "DailyAction":(
@@ -166,6 +203,11 @@
                        ("char", "SourceName", 0),
                        ),
                "BOSSFirstKill":(
                        ("DWORD", "NPCID", 1),
                        ("list", "ServerFirstKillPlayerAward", 0),
                        ),
                "QuestionBank":(
                        ("DWORD", "ID", 1),
                        ("char", "Answer", 0),
@@ -269,9 +311,8 @@
                "ActExpRate":(
                        ("DWORD", "CfgID", 1),
                        ("char", "ActMark", 0),
                        ("list", "PlatformList", 0),
                        ("list", "ServerIDList", 0),
                        ("list", "ServerGroupIDList", 0),
                        ("list", "ServerGroupIDListExcept", 0),
                        ("char", "StartDate", 0),
                        ("char", "EndDate", 0),
                        ("list", "StartTimeList", 0),
@@ -298,9 +339,8 @@
                "ActBossReborn":(
                        ("DWORD", "CfgID", 1),
                        ("char", "ActMark", 0),
                        ("list", "PlatformList", 0),
                        ("list", "ServerIDList", 0),
                        ("list", "ServerGroupIDList", 0),
                        ("list", "ServerGroupIDListExcept", 0),
                        ("char", "StartDate", 0),
                        ("char", "EndDate", 0),
                        ("BYTE", "ResetType", 0),
@@ -371,9 +411,8 @@
                "ActWishingWell":(
                        ("DWORD", "CfgID", 1),
                        ("char", "ActMark", 0),
                        ("list", "PlatformList", 0),
                        ("list", "ServerIDList", 0),
                        ("list", "ServerGroupIDList", 0),
                        ("list", "ServerGroupIDListExcept", 0),
                        ("char", "StartDate", 0),
                        ("char", "EndDate", 0),
                        ("BYTE", "IsDayReset", 0),
@@ -423,6 +462,8 @@
                        ("BYTE", "DanLV", 1),
                        ("WORD", "LVUpScore", 0),
                        ("list", "MatchRange", 0),
                        ("BYTE", "MatchRobotRate", 0),
                        ("BYTE", "MatchRobotRateEx", 0),
                        ),
                "CrossPenglaiZoneMap":(
@@ -459,6 +500,7 @@
                        ("BYTE", "ResetType", 0),
                        ("dict", "NotifyInfoStart", 0),
                        ("dict", "NotifyInfoEnd", 0),
                        ("list", "NotifyInfoLoop", 0),
                        ("WORD", "LVLimit", 0),
                        ),
@@ -509,6 +551,28 @@
                        ("list", "NotifyInfoLoop", 0),
                        ("WORD", "LVLimit", 0),
                        ),
                "EquipStarUp":(
                        ("BYTE", "ClassLV", 1),
                        ("BYTE", "EquipPlace", 1),
                        ("BYTE", "Star", 1),
                        ("list", "CostEquipPlace", 0),
                        ("BYTE", "IsJobLimit", 0),
                        ("list", "CostEquipColor", 0),
                        ("BYTE", "UnSuitRate", 0),
                        ),
                "FamilyWarRankAward":(
                        ("WORD", "WarWorldLV", 1),
                        ("BYTE", "WarRank", 0),
                        ("list", "RankAuctionItem", 0),
                        ),
                "FairyDomain":(
                        ("WORD", "ID", 1),
                        ("DWORD", "HourCntPubLimit", 0),
                        ("DWORD", "DayCntPubLimit", 0),
                        ),
                }
@@ -530,6 +594,17 @@
    def GetNumerical3(self): return self.Numerical3 # 数据3
    def GetNumerical4(self): return self.Numerical4 # 数据4
    def GetNumerical5(self): return self.Numerical5 # 数据5
# 创角限制服务器配置表
class IPY_CreateRoleLimitServer():
    def __init__(self):
        self.LimitServerGroupIDRangeList = []
        self.LimitServerGroupIDList = []
        return
    def GetLimitServerGroupIDRangeList(self): return self.LimitServerGroupIDRangeList # 限制创角的服务器组ID范围列表
    def GetLimitServerGroupIDList(self): return self.LimitServerGroupIDList # 限制创角的服务器组ID列表
# 世界等级表格
class IPY_WorldLV():
@@ -573,6 +648,72 @@
        
    def GetQueryType(self): return self.QueryType # 查询类型
    def GetLimitInfo(self): return self.LimitInfo # 限制条件
# 拍卖物品表
class IPY_AuctionItem():
    def __init__(self):
        self.AuctionItemID = 0
        self.NoticeSaleMinutes = 0
        self.FamilySaleMinutes = 0
        self.WorldSaleMinutes = 0
        self.BasePrice = 0
        self.BuyoutPrice = 0
        self.BiddingAdd = 0
        self.NeedWorldNotify = 0
        self.Sortpriority = 0
        return
    def GetAuctionItemID(self): return self.AuctionItemID
    def GetNoticeSaleMinutes(self): return self.NoticeSaleMinutes # 预告拍卖分钟
    def GetFamilySaleMinutes(self): return self.FamilySaleMinutes # 仙盟拍卖分钟
    def GetWorldSaleMinutes(self): return self.WorldSaleMinutes # 全服拍卖分钟
    def GetBasePrice(self): return self.BasePrice # 起拍价
    def GetBuyoutPrice(self): return self.BuyoutPrice # 一口价
    def GetBiddingAdd(self): return self.BiddingAdd # 竞价增加
    def GetNeedWorldNotify(self): return self.NeedWorldNotify # 是否需要广播
    def GetSortpriority(self): return self.Sortpriority # 排序优先级归组
# 拍卖行系统拍品表
class IPY_AuctionSystemItem():
    def __init__(self):
        self.CfgID = 0
        self.StartDate = ""
        self.EndDate = ""
        self.StartTime = ""
        self.EndTime = ""
        self.WorldLVRange = []
        self.AddRandSecondRange = []
        self.ReplenishCDMinutes = 0
        self.ReplenishAuctionCount = 0
        self.ReplenishItemID = 0
        self.ReplenishEquipInfo = []
        self.ReplenishEquipPlaces = []
        self.AuctionCount = 0
        self.RandMinuteRange = []
        self.ItemCountWeightList = []
        self.AuctionItemWeightList = []
        self.RandMailKeyList = []
        return
    def GetCfgID(self): return self.CfgID
    def GetStartDate(self): return self.StartDate # 开启日期
    def GetEndDate(self): return self.EndDate # 结束日期
    def GetStartTime(self): return self.StartTime # 开启时间
    def GetEndTime(self): return self.EndTime # 结束时间
    def GetWorldLVRange(self): return self.WorldLVRange # 世界等级范围限制
    def GetAddRandSecondRange(self): return self.AddRandSecondRange # 每件拍品随机间隔上架秒数 上限|下限
    def GetReplenishCDMinutes(self): return self.ReplenishCDMinutes # 动态补充拍品间隔分钟
    def GetReplenishAuctionCount(self): return self.ReplenishAuctionCount # 动态补充拍品保底数
    def GetReplenishItemID(self): return self.ReplenishItemID # 动态补充物品ID
    def GetReplenishEquipInfo(self): return self.ReplenishEquipInfo # 动态补充装备信息 [阶,颜色,是否套装]
    def GetReplenishEquipPlaces(self): return self.ReplenishEquipPlaces # 动态补充上架装备位列表
    def GetAuctionCount(self): return self.AuctionCount # 指定上架次数
    def GetRandMinuteRange(self): return self.RandMinuteRange # 指定上架随机间隔分钟下限|上限
    def GetItemCountWeightList(self): return self.ItemCountWeightList # 指定上架随机件数权重列表, [[权重, 件数], ...]
    def GetAuctionItemWeightList(self): return self.AuctionItemWeightList # 指定上架物品随机权重, [[权重, 物品ID],[权重, [阶,颜色,部位集合,是否套装,星级]] ...]
    def GetRandMailKeyList(self): return self.RandMailKeyList # 指定上架随机邮件列表,有配置时上架的时候在线玩家会收到一封上架邮件提醒
# 日常活动表
class IPY_DailyAction():
@@ -795,6 +936,17 @@
    def GetRebornPreNotifyTime(self): return self.RebornPreNotifyTime # 复活前X秒通知
    def GetSourceName(self): return self.SourceName # BOSS来源
# Boss首杀
class IPY_BOSSFirstKill():
    def __init__(self):
        self.NPCID = 0
        self.ServerFirstKillPlayerAward = []
        return
    def GetNPCID(self): return self.NPCID # ID
    def GetServerFirstKillPlayerAward(self): return self.ServerFirstKillPlayerAward #  全服首杀玩家奖励 [[物品ID,个数,是否拍品], ...]
# 宴会题库表
class IPY_QuestionBank():
    
@@ -1011,9 +1163,8 @@
    
    def __init__(self):
        self.CfgID = 0
        self.ActMark = ""
        self.PlatformList = []
        self.ServerIDList = []
        self.ServerGroupIDList = []
        self.ServerGroupIDListExcept = []
        self.StartDate = ""
        self.EndDate = ""
        self.StartTimeList = []
@@ -1026,9 +1177,8 @@
        return
        
    def GetCfgID(self): return self.CfgID # 配置ID
    def GetActMark(self): return self.ActMark # 活动组标记
    def GetPlatformList(self): return self.PlatformList # 活动平台列表["平台A", "平台A", ...],配[]代表所有
    def GetServerIDList(self): return self.ServerIDList # 服务器ID列表
    def GetServerGroupIDList(self): return self.ServerGroupIDList # 服务器组ID列表
    def GetServerGroupIDListExcept(self): return self.ServerGroupIDListExcept # 排除的服务器组ID列表
    def GetStartDate(self): return self.StartDate # 开启日期
    def GetEndDate(self): return self.EndDate # 结束日期
    def GetStartTimeList(self): return self.StartTimeList # 开启时间列表, 支持多个时段
@@ -1071,9 +1221,8 @@
    
    def __init__(self):
        self.CfgID = 0
        self.ActMark = ""
        self.PlatformList = []
        self.ServerIDList = []
        self.ServerGroupIDList = []
        self.ServerGroupIDListExcept = []
        self.StartDate = ""
        self.EndDate = ""
        self.ResetType = 0
@@ -1084,9 +1233,8 @@
        return
        
    def GetCfgID(self): return self.CfgID # 配置ID
    def GetActMark(self): return self.ActMark # 活动组标记
    def GetPlatformList(self): return self.PlatformList # 活动平台列表["平台A", "平台A", ...],配[]代表所有
    def GetServerIDList(self): return self.ServerIDList # 服务器ID列表
    def GetServerGroupIDList(self): return self.ServerGroupIDList # 服务器组ID列表
    def GetServerGroupIDListExcept(self): return self.ServerGroupIDListExcept # 排除的服务器组ID列表
    def GetStartDate(self): return self.StartDate # 开启日期
    def GetEndDate(self): return self.EndDate # 结束日期
    def GetResetType(self): return self.ResetType # 重置类型,0-0点重置;1-5点重置
@@ -1223,9 +1371,8 @@
    
    def __init__(self):
        self.CfgID = 0
        self.ActMark = ""
        self.PlatformList = []
        self.ServerIDList = []
        self.ServerGroupIDList = []
        self.ServerGroupIDListExcept = []
        self.StartDate = ""
        self.EndDate = ""
        self.IsDayReset = 0
@@ -1237,9 +1384,8 @@
        return
        
    def GetCfgID(self): return self.CfgID # 配置ID
    def GetActMark(self): return self.ActMark # 活动组标记
    def GetPlatformList(self): return self.PlatformList # 活动平台列表["平台A", "平台A", ...],配[]代表所有
    def GetServerIDList(self): return self.ServerIDList # 服务器ID列表
    def GetServerGroupIDList(self): return self.ServerGroupIDList # 服务器组ID列表
    def GetServerGroupIDListExcept(self): return self.ServerGroupIDListExcept # 排除的服务器组ID列表
    def GetStartDate(self): return self.StartDate # 开启日期
    def GetEndDate(self): return self.EndDate # 结束日期
    def GetIsDayReset(self): return self.IsDayReset # 是否每天重置
@@ -1329,12 +1475,16 @@
    def __init__(self):
        self.DanLV = 0
        self.LVUpScore = 0
        self.MatchRange = []
        self.MatchRange = []
        self.MatchRobotRate = 0
        self.MatchRobotRateEx = 0
        return
        
    def GetDanLV(self): return self.DanLV # 段位等级
    def GetLVUpScore(self): return self.LVUpScore # 升段位所需积分
    def GetMatchRange(self): return self.MatchRange # 可匹配到的玩家段位区间 [从段位A, 到段位B],配[]代表只匹配本段位的
    def GetMatchRange(self): return self.MatchRange # 可匹配到的玩家段位区间 [从段位A, 到段位B],配[]代表只匹配本段位的
    def GetMatchRobotRate(self): return self.MatchRobotRate # 匹配机器人基础概率,百分率
    def GetMatchRobotRateEx(self): return self.MatchRobotRateEx # 匹配机器人失败次数附加概率,百分率
# 跨服Boss蓬莱仙境分区地图表
class IPY_CrossPenglaiZoneMap():
@@ -1397,6 +1547,7 @@
        self.ResetType = 0
        self.NotifyInfoStart = {}
        self.NotifyInfoEnd = {}
        self.NotifyInfoLoop = []
        self.LVLimit = 0
        return
        
@@ -1411,6 +1562,7 @@
    def GetResetType(self): return self.ResetType # 重置类型,0-0点重置;1-5点重置
    def GetNotifyInfoStart(self): return self.NotifyInfoStart # 全服提示信息 - 相对开始时间
    def GetNotifyInfoEnd(self): return self.NotifyInfoEnd # 全服提示信息 - 相对结束时间
    def GetNotifyInfoLoop(self): return self.NotifyInfoLoop # 全服提示信息 - 循环广播[间隔分钟, 广播key]
    def GetLVLimit(self): return self.LVLimit # 限制等级
# 节日巡礼活动时间表
@@ -1512,6 +1664,53 @@
    def GetNotifyInfoEnd(self): return self.NotifyInfoEnd # 全服提示信息 - 相对结束时间
    def GetNotifyInfoLoop(self): return self.NotifyInfoLoop # 全服提示信息 - 循环广播[间隔分钟, 广播key]
    def GetLVLimit(self): return self.LVLimit # 限制等级
# 装备升星表
class IPY_EquipStarUp():
    def __init__(self):
        self.ClassLV = 0
        self.EquipPlace = 0
        self.Star = 0
        self.CostEquipPlace = []
        self.IsJobLimit = 0
        self.CostEquipColor = []
        self.UnSuitRate = 0
        return
    def GetClassLV(self): return self.ClassLV # 阶级
    def GetEquipPlace(self): return self.EquipPlace # 装备位
    def GetStar(self): return self.Star # 星数
    def GetCostEquipPlace(self): return self.CostEquipPlace # 可用装备部位
    def GetIsJobLimit(self): return self.IsJobLimit # 是否只用本职业装备材料
    def GetCostEquipColor(self): return self.CostEquipColor # 可用装备品质
    def GetUnSuitRate(self): return self.UnSuitRate # 单件非套装加成概率
# 仙盟联赛排名奖励表
class IPY_FamilyWarRankAward():
    def __init__(self):
        self.WarWorldLV = 0
        self.WarRank = 0
        self.RankAuctionItem = []
        return
    def GetWarWorldLV(self): return self.WarWorldLV # 联赛世界等级
    def GetWarRank(self): return self.WarRank # 联赛排名
    def GetRankAuctionItem(self): return self.RankAuctionItem # 拍品奖励[[拍品ID,个数], ...]
# 缥缈仙域表
class IPY_FairyDomain():
    def __init__(self):
        self.ID = 0
        self.HourCntPubLimit = 0
        self.DayCntPubLimit = 0
        return
    def GetID(self): return self.ID # 事件编号
    def GetHourCntPubLimit(self): return self.HourCntPubLimit # 全服每小时次数限制
    def GetDayCntPubLimit(self): return self.DayCntPubLimit # 全服每天次数限制
def Log(msg, playerID=0, par=0):
@@ -1539,12 +1738,18 @@
        self.ipyConfigEx = {}
        self.ipyFuncConfigCache = self.__LoadFileData("FuncConfig", IPY_FuncConfig)
        self.ipyFuncConfigLen = len(self.ipyFuncConfigCache)
        self.ipyCreateRoleLimitServerCache = self.__LoadFileData("CreateRoleLimitServer", IPY_CreateRoleLimitServer)
        self.ipyCreateRoleLimitServerLen = len(self.ipyCreateRoleLimitServerCache)
        self.ipyWorldLVCache = self.__LoadFileData("WorldLV", IPY_WorldLV)
        self.ipyWorldLVLen = len(self.ipyWorldLVCache)
        self.ipyFamilyCache = self.__LoadFileData("Family", IPY_Family)
        self.ipyFamilyLen = len(self.ipyFamilyCache)
        self.ipyMarketQueryCache = self.__LoadFileData("MarketQuery", IPY_MarketQuery)
        self.ipyMarketQueryLen = len(self.ipyMarketQueryCache)
        self.ipyAuctionItemCache = self.__LoadFileData("AuctionItem", IPY_AuctionItem)
        self.ipyAuctionItemLen = len(self.ipyAuctionItemCache)
        self.ipyAuctionSystemItemCache = self.__LoadFileData("AuctionSystemItem", IPY_AuctionSystemItem)
        self.ipyAuctionSystemItemLen = len(self.ipyAuctionSystemItemCache)
        self.ipyDailyActionCache = self.__LoadFileData("DailyAction", IPY_DailyAction)
        self.ipyDailyActionLen = len(self.ipyDailyActionCache)
        self.ipyDailyActionCustomCache = self.__LoadFileData("DailyActionCustom", IPY_DailyActionCustom)
@@ -1567,6 +1772,8 @@
        self.ipyChinMapLen = len(self.ipyChinMapCache)
        self.ipyBOSSInfoCache = self.__LoadFileData("BOSSInfo", IPY_BOSSInfo)
        self.ipyBOSSInfoLen = len(self.ipyBOSSInfoCache)
        self.ipyBOSSFirstKillCache = self.__LoadFileData("BOSSFirstKill", IPY_BOSSFirstKill)
        self.ipyBOSSFirstKillLen = len(self.ipyBOSSFirstKillCache)
        self.ipyQuestionBankCache = self.__LoadFileData("QuestionBank", IPY_QuestionBank)
        self.ipyQuestionBankLen = len(self.ipyQuestionBankCache)
        self.ipyFamilyRedPackCache = self.__LoadFileData("FamilyRedPack", IPY_FamilyRedPack)
@@ -1627,6 +1834,12 @@
        self.ipyNewUniquenessArriveLen = len(self.ipyNewUniquenessArriveCache)
        self.ipyActLuckyTreasureCache = self.__LoadFileData("ActLuckyTreasure", IPY_ActLuckyTreasure)
        self.ipyActLuckyTreasureLen = len(self.ipyActLuckyTreasureCache)
        self.ipyEquipStarUpCache = self.__LoadFileData("EquipStarUp", IPY_EquipStarUp)
        self.ipyEquipStarUpLen = len(self.ipyEquipStarUpCache)
        self.ipyFamilyWarRankAwardCache = self.__LoadFileData("FamilyWarRankAward", IPY_FamilyWarRankAward)
        self.ipyFamilyWarRankAwardLen = len(self.ipyFamilyWarRankAwardCache)
        self.ipyFairyDomainCache = self.__LoadFileData("FairyDomain", IPY_FairyDomain)
        self.ipyFairyDomainLen = len(self.ipyFairyDomainCache)
        Log("IPY_FuncConfig count=%s" % len(self.ipyFuncConfigDict))
        Log("IPY_DataMgr InitOK!")
        return
@@ -1795,12 +2008,18 @@
    
    def GetFuncConfigCount(self): return self.ipyFuncConfigLen
    def GetFuncConfigByIndex(self, index): return self.ipyFuncConfigCache[index]
    def GetCreateRoleLimitServerCount(self): return self.ipyCreateRoleLimitServerLen
    def GetCreateRoleLimitServerByIndex(self, index): return self.ipyCreateRoleLimitServerCache[index]
    def GetWorldLVCount(self): return self.ipyWorldLVLen
    def GetWorldLVByIndex(self, index): return self.ipyWorldLVCache[index]
    def GetFamilyCount(self): return self.ipyFamilyLen
    def GetFamilyByIndex(self, index): return self.ipyFamilyCache[index]
    def GetMarketQueryCount(self): return self.ipyMarketQueryLen
    def GetMarketQueryByIndex(self, index): return self.ipyMarketQueryCache[index]
    def GetAuctionItemCount(self): return self.ipyAuctionItemLen
    def GetAuctionItemByIndex(self, index): return self.ipyAuctionItemCache[index]
    def GetAuctionSystemItemCount(self): return self.ipyAuctionSystemItemLen
    def GetAuctionSystemItemByIndex(self, index): return self.ipyAuctionSystemItemCache[index]
    def GetDailyActionCount(self): return self.ipyDailyActionLen
    def GetDailyActionByIndex(self, index): return self.ipyDailyActionCache[index]
    def GetDailyActionCustomCount(self): return self.ipyDailyActionCustomLen
@@ -1823,6 +2042,8 @@
    def GetChinMapByIndex(self, index): return self.ipyChinMapCache[index]
    def GetBOSSInfoCount(self): return self.ipyBOSSInfoLen
    def GetBOSSInfoByIndex(self, index): return self.ipyBOSSInfoCache[index]
    def GetBOSSFirstKillCount(self): return self.ipyBOSSFirstKillLen
    def GetBOSSFirstKillByIndex(self, index): return self.ipyBOSSFirstKillCache[index]
    def GetQuestionBankCount(self): return self.ipyQuestionBankLen
    def GetQuestionBankByIndex(self, index): return self.ipyQuestionBankCache[index]
    def GetFamilyRedPackCount(self): return self.ipyFamilyRedPackLen
@@ -1883,6 +2104,12 @@
    def GetNewUniquenessArriveByIndex(self, index): return self.ipyNewUniquenessArriveCache[index]
    def GetActLuckyTreasureCount(self): return self.ipyActLuckyTreasureLen
    def GetActLuckyTreasureByIndex(self, index): return self.ipyActLuckyTreasureCache[index]
    def GetEquipStarUpCount(self): return self.ipyEquipStarUpLen
    def GetEquipStarUpByIndex(self, index): return self.ipyEquipStarUpCache[index]
    def GetFamilyWarRankAwardCount(self): return self.ipyFamilyWarRankAwardLen
    def GetFamilyWarRankAwardByIndex(self, index): return self.ipyFamilyWarRankAwardCache[index]
    def GetFairyDomainCount(self): return self.ipyFairyDomainLen
    def GetFairyDomainByIndex(self, index): return self.ipyFairyDomainCache[index]
IPYData = IPY_DataMgr()
def IPY_Data(): return IPYData