ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
@@ -21,6 +21,7 @@
import hashlib
import os
import gc
'''表结构定义字典
{
@@ -432,6 +433,19 @@
                        ("BYTE", "IsDayReset", 0),
                        ),
                "ActFamilyCTGAssist":(
                        ("DWORD", "CfgID", 1),
                        ("list", "PlatformList", 0),
                        ("list", "ServerGroupIDList", 0),
                        ("BYTE", "ActNum", 0),
                        ("char", "StartDate", 0),
                        ("char", "EndDate", 0),
                        ("dict", "NotifyInfoStart", 0),
                        ("dict", "NotifyInfoEnd", 0),
                        ("list", "NotifyInfoLoop", 0),
                        ("BYTE", "IsDayReset", 0),
                        ),
                "ActCollectWords":(
                        ("DWORD", "CfgID", 1),
                        ("list", "PlatformList", 0),
@@ -464,18 +478,41 @@
                        ("BYTE", "ActNum", 0),
                        ("char", "StartDate", 0),
                        ("char", "EndDate", 0),
                        ("char", "JoinStartTime", 0),
                        ("char", "JoinEndTime", 0),
                        ("dict", "NotifyInfoStart", 0),
                        ("dict", "NotifyInfoEnd", 0),
                        ("list", "NotifyInfoLoop", 0),
                        ("BYTE", "IsDayReset", 0),
                        ("BYTE", "ResetType", 0),
                        ("list", "TemplateIDList", 0),
                        ("list", "FamilyTemplateIDList", 0),
                        ),
                "ActBossTrialTemplate":(
                        ("DWORD", "TemplateID", 1),
                        ("BYTE", "Rank", 0),
                        ("list", "AwardItemList", 0),
                        ("list", "MemAwardItemList", 0),
                        ),
                "CrossActBossTrial":(
                        ("DWORD", "CfgID", 1),
                        ("char", "ActGroupName", 0),
                        ("BYTE", "ZoneID", 0),
                        ("list", "ServerIDRangeList", 0),
                        ("char", "StartDate", 0),
                        ("char", "EndDate", 0),
                        ("char", "JoinStartTime", 0),
                        ("char", "JoinEndTime", 0),
                        ("dict", "NotifyInfoStart", 0),
                        ("dict", "NotifyInfoEnd", 0),
                        ("list", "NotifyInfoLoop", 0),
                        ("BYTE", "IsDayReset", 0),
                        ("BYTE", "ResetType", 0),
                        ("list", "RankLimitList", 0),
                        ("WORD", "PersonalTemplateID", 0),
                        ("WORD", "FamilyTemplateID", 0),
                        ),
                "ActXianXiaMJ":(
@@ -696,6 +733,12 @@
                        ("list", "ServerGroupIDList", 0),
                        ),
                "CrossZoneBattlefield":(
                        ("char", "CrossZoneName", 1),
                        ("BYTE", "ZoneID", 1),
                        ("list", "ServerGroupIDList", 0),
                        ),
                "CrossZonePK":(
                        ("char", "CrossZoneName", 1),
                        ("BYTE", "ZoneID", 1),
@@ -771,6 +814,46 @@
                        ("dict", "NotifyInfoStart", 0),
                        ("dict", "NotifyInfoEnd", 0),
                        ("WORD", "LVLimit", 0),
                        ),
                "ActBuyCountGift":(
                        ("DWORD", "CfgID", 1),
                        ("list", "PlatformList", 0),
                        ("list", "ServerGroupIDList", 0),
                        ("BYTE", "ActNum", 0),
                        ("char", "StartDate", 0),
                        ("char", "EndDate", 0),
                        ("dict", "NotifyInfoStart", 0),
                        ("dict", "NotifyInfoEnd", 0),
                        ("list", "NotifyInfoLoop", 0),
                        ("BYTE", "IsDayReset", 0),
                        ("BYTE", "ResetType", 0),
                        ),
                "ActTask":(
                        ("DWORD", "CfgID", 1),
                        ("list", "PlatformList", 0),
                        ("list", "ServerGroupIDList", 0),
                        ("BYTE", "ActNum", 0),
                        ("char", "StartDate", 0),
                        ("char", "EndDate", 0),
                        ("dict", "NotifyInfoStart", 0),
                        ("dict", "NotifyInfoEnd", 0),
                        ("list", "NotifyInfoLoop", 0),
                        ("BYTE", "IsDayReset", 0),
                        ("BYTE", "ResetType", 0),
                        ),
                "ActLoginNew":(
                        ("DWORD", "CfgID", 1),
                        ("list", "PlatformList", 0),
                        ("list", "ServerGroupIDList", 0),
                        ("BYTE", "ActNum", 0),
                        ("char", "StartDate", 0),
                        ("char", "EndDate", 0),
                        ("dict", "NotifyInfoStart", 0),
                        ("dict", "NotifyInfoEnd", 0),
                        ("list", "NotifyInfoLoop", 0),
                        ),
                "ActLoginAward":(
@@ -952,6 +1035,14 @@
                "AssistThanksGift":(
                        ("DWORD", "GiftID", 1),
                        ("BYTE", "AssistAwardCount", 0),
                        ),
                "Worship":(
                        ("BYTE", "WorshipType", 1),
                        ("DWORD", "WorshipValue", 1),
                        ("BYTE", "WorshipDays", 0),
                        ("BYTE", "MoneyType", 0),
                        ("list", "MoneyRange", 0),
                        ),
                "FairyDomain":(
@@ -1562,6 +1653,24 @@
    def GetNotifyInfoLoop(self): return self.attrTuple[8] # 全服提示信息 - 循环广播[间隔分钟, 广播key] list
    def GetIsDayReset(self): return self.attrTuple[9] # 是否每天重置 BYTE
# 仙盟充值协助活动表
class IPY_ActFamilyCTGAssist():
    def __init__(self):
        self.attrTuple = None
        return
    def GetCfgID(self): return self.attrTuple[0] # 配置ID DWORD
    def GetPlatformList(self): return self.attrTuple[1] # 活动平台列表["平台A", "平台A", ...],配[]代表所有 list
    def GetServerGroupIDList(self): return self.attrTuple[2] # 服务器ID列表 list
    def GetActNum(self): return self.attrTuple[3] # 活动分组编号, 活动类型 * 10 + 不同界面编号 BYTE
    def GetStartDate(self): return self.attrTuple[4] # 开启日期 char
    def GetEndDate(self): return self.attrTuple[5] # 结束日期 char
    def GetNotifyInfoStart(self): return self.attrTuple[6] # 全服提示信息 - 相对开始时间 dict
    def GetNotifyInfoEnd(self): return self.attrTuple[7] # 全服提示信息 - 相对结束时间 dict
    def GetNotifyInfoLoop(self): return self.attrTuple[8] # 全服提示信息 - 循环广播[间隔分钟, 广播key] list
    def GetIsDayReset(self): return self.attrTuple[9] # 是否每天重置 BYTE
# 集字活动时间表
class IPY_ActCollectWords():
    
@@ -1610,12 +1719,15 @@
    def GetActNum(self): return self.attrTuple[3] # 活动分组编号, 活动类型 * 10 + 不同界面编号 BYTE
    def GetStartDate(self): return self.attrTuple[4] # 开启日期 char
    def GetEndDate(self): return self.attrTuple[5] # 结束日期 char
    def GetNotifyInfoStart(self): return self.attrTuple[6] # 全服提示信息 - 相对开始时间 dict
    def GetNotifyInfoEnd(self): return self.attrTuple[7] # 全服提示信息 - 相对结束时间 dict
    def GetNotifyInfoLoop(self): return self.attrTuple[8] # 全服提示信息 - 循环广播[间隔分钟, 广播key] list
    def GetIsDayReset(self): return self.attrTuple[9] # 是否每天重置 BYTE
    def GetResetType(self): return self.attrTuple[10] # 重置类型,0-0点重置;1-5点重置 BYTE
    def GetTemplateIDList(self): return self.attrTuple[11] # 榜单模板编号列表 list
    def GetJoinStartTime(self): return self.attrTuple[6] # 参与开始时间点 char
    def GetJoinEndTime(self): return self.attrTuple[7] # 参与结束时间点 char
    def GetNotifyInfoStart(self): return self.attrTuple[8] # 全服提示信息 - 相对开始时间 dict
    def GetNotifyInfoEnd(self): return self.attrTuple[9] # 全服提示信息 - 相对结束时间 dict
    def GetNotifyInfoLoop(self): return self.attrTuple[10] # 全服提示信息 - 循环广播[间隔分钟, 广播key] list
    def GetIsDayReset(self): return self.attrTuple[11] # 是否每天重置 BYTE
    def GetResetType(self): return self.attrTuple[12] # 重置类型,0-0点重置;1-5点重置 BYTE
    def GetTemplateIDList(self): return self.attrTuple[13] # 榜单模板编号列表 list
    def GetFamilyTemplateIDList(self): return self.attrTuple[14] # 仙盟榜单模板编号列表 list
# Boss历练榜单模版表
class IPY_ActBossTrialTemplate():
@@ -1626,7 +1738,32 @@
        
    def GetTemplateID(self): return self.attrTuple[0] # 模板编号 DWORD
    def GetRank(self): return self.attrTuple[1] # 名次 BYTE
    def GetAwardItemList(self): return self.attrTuple[2] # 奖励物品信息列表 [[物品ID,个数,是否拍品], ...] list
    def GetAwardItemList(self): return self.attrTuple[2] # 奖励物品列表[[物品ID,个数,是否拍品], ...] 仙盟榜时为盟主奖励,如果没有配置,则统一取成员奖励 list
    def GetMemAwardItemList(self): return self.attrTuple[3] # 仙盟榜成员奖励物品信息列表[[物品ID,个数,是否拍品], ...] list
# Boss历练跨服活动表
class IPY_CrossActBossTrial():
    def __init__(self):
        self.attrTuple = None
        return
    def GetCfgID(self): return self.attrTuple[0] # 配置ID DWORD
    def GetActGroupName(self): return self.attrTuple[1] # 活动组名(同组活动的名字需相同) char
    def GetZoneID(self): return self.attrTuple[2] # 组内分组编号 BYTE
    def GetServerIDRangeList(self): return self.attrTuple[3] # 活动的账号服务器ID范围列表 [[serverIDA, serverIDB], ...] list
    def GetStartDate(self): return self.attrTuple[4] # 开启日期 char
    def GetEndDate(self): return self.attrTuple[5] # 结束日期 char
    def GetJoinStartTime(self): return self.attrTuple[6] # 参与开始时间点 char
    def GetJoinEndTime(self): return self.attrTuple[7] # 参与结束时间点 char
    def GetNotifyInfoStart(self): return self.attrTuple[8] # 全服提示信息 - 相对开始时间 dict
    def GetNotifyInfoEnd(self): return self.attrTuple[9] # 全服提示信息 - 相对结束时间 dict
    def GetNotifyInfoLoop(self): return self.attrTuple[10] # 全服提示信息 - 循环广播[循环分钟, 广播key, [广播参数列表可选]] list
    def GetIsDayReset(self): return self.attrTuple[11] # 是否每天重置 BYTE
    def GetResetType(self): return self.attrTuple[12] # 重置类型,0-0点重置;1-5点重置 BYTE
    def GetRankLimitList(self): return self.attrTuple[13] # 上榜个数限制 个人|仙盟 list
    def GetPersonalTemplateID(self): return self.attrTuple[14] # 个人排行模板编号 WORD
    def GetFamilyTemplateID(self): return self.attrTuple[15] # 仙盟排行模板编号 WORD
# 仙匣秘境活动时间表
class IPY_ActXianXiaMJ():
@@ -1936,6 +2073,17 @@
    def GetZoneID(self): return self.attrTuple[1] # 赛区ID BYTE
    def GetServerGroupIDList(self): return self.attrTuple[2] # 赛区服务器组ID列表 list
# 跨服分区表古神战场
class IPY_CrossZoneBattlefield():
    def __init__(self):
        self.attrTuple = None
        return
    def GetCrossZoneName(self): return self.attrTuple[0] # 跨服分区名 char
    def GetZoneID(self): return self.attrTuple[1] # 赛区ID BYTE
    def GetServerGroupIDList(self): return self.attrTuple[2] # 赛区服务器组ID列表 list
# 跨服分区表竞技场
class IPY_CrossZonePK():
    
@@ -2057,6 +2205,61 @@
    def GetNotifyInfoStart(self): return self.attrTuple[9] # 全服提示信息 - 相对开始时间 dict
    def GetNotifyInfoEnd(self): return self.attrTuple[10] # 全服提示信息 - 相对结束时间 dict
    def GetLVLimit(self): return self.attrTuple[11] # 限制等级 WORD
# 购买次数礼包活动时间表
class IPY_ActBuyCountGift():
    def __init__(self):
        self.attrTuple = None
        return
    def GetCfgID(self): return self.attrTuple[0] # 配置ID DWORD
    def GetPlatformList(self): return self.attrTuple[1] # 活动平台列表["平台A", "平台A", ...],配[]代表所有 list
    def GetServerGroupIDList(self): return self.attrTuple[2] # 服务器ID列表 list
    def GetActNum(self): return self.attrTuple[3] # 活动分组编号, 活动类型 * 10 + 不同界面编号 BYTE
    def GetStartDate(self): return self.attrTuple[4] # 开启日期 char
    def GetEndDate(self): return self.attrTuple[5] # 结束日期 char
    def GetNotifyInfoStart(self): return self.attrTuple[6] # 全服提示信息 - 相对开始时间 dict
    def GetNotifyInfoEnd(self): return self.attrTuple[7] # 全服提示信息 - 相对结束时间 dict
    def GetNotifyInfoLoop(self): return self.attrTuple[8] # 全服提示信息 - 循环广播[间隔分钟, 广播key] list
    def GetIsDayReset(self): return self.attrTuple[9] # 是否每天重置 BYTE
    def GetResetType(self): return self.attrTuple[10] # 重置类型,0-0点重置;1-5点重置 BYTE
# 任务活动时间表
class IPY_ActTask():
    def __init__(self):
        self.attrTuple = None
        return
    def GetCfgID(self): return self.attrTuple[0] # 配置ID DWORD
    def GetPlatformList(self): return self.attrTuple[1] # 活动平台列表["平台A", "平台A", ...],配[]代表所有 list
    def GetServerGroupIDList(self): return self.attrTuple[2] # 服务器ID列表 list
    def GetActNum(self): return self.attrTuple[3] # 活动分组编号, 活动类型 * 10 + 不同界面编号 BYTE
    def GetStartDate(self): return self.attrTuple[4] # 开启日期 char
    def GetEndDate(self): return self.attrTuple[5] # 结束日期 char
    def GetNotifyInfoStart(self): return self.attrTuple[6] # 全服提示信息 - 相对开始时间 dict
    def GetNotifyInfoEnd(self): return self.attrTuple[7] # 全服提示信息 - 相对结束时间 dict
    def GetNotifyInfoLoop(self): return self.attrTuple[8] # 全服提示信息 - 循环广播[间隔分钟, 广播key] list
    def GetIsDayReset(self): return self.attrTuple[9] # 是否每天重置 BYTE
    def GetResetType(self): return self.attrTuple[10] # 重置类型,0-0点重置;1-5点重置 BYTE
# 登录活动奖励时间表新
class IPY_ActLoginNew():
    def __init__(self):
        self.attrTuple = None
        return
    def GetCfgID(self): return self.attrTuple[0] # 配置ID DWORD
    def GetPlatformList(self): return self.attrTuple[1] # 活动平台列表["平台A", "平台A", ...],配[]代表所有 list
    def GetServerGroupIDList(self): return self.attrTuple[2] # 服务器ID列表 list
    def GetActNum(self): return self.attrTuple[3] # 活动分组编号, 活动类型 * 10 + 不同界面编号 BYTE
    def GetStartDate(self): return self.attrTuple[4] # 开启日期 char
    def GetEndDate(self): return self.attrTuple[5] # 结束日期 char
    def GetNotifyInfoStart(self): return self.attrTuple[6] # 全服提示信息 - 相对开始时间 dict
    def GetNotifyInfoEnd(self): return self.attrTuple[7] # 全服提示信息 - 相对结束时间 dict
    def GetNotifyInfoLoop(self): return self.attrTuple[8] # 全服提示信息 - 循环广播[间隔分钟, 广播key] list
# 登录奖励时间表
class IPY_ActLoginAward():
@@ -2324,6 +2527,19 @@
    def GetGiftID(self): return self.attrTuple[0] # 礼盒物品ID DWORD
    def GetAssistAwardCount(self): return self.attrTuple[1] #  协助奖励每日次数 BYTE
# 膜拜表
class IPY_Worship():
    def __init__(self):
        self.attrTuple = None
        return
    def GetWorshipType(self): return self.attrTuple[0] # 膜拜类型 BYTE
    def GetWorshipValue(self): return self.attrTuple[1] # 膜拜值 DWORD
    def GetWorshipDays(self): return self.attrTuple[2] # 膜拜天数 BYTE
    def GetMoneyType(self): return self.attrTuple[3] # 膜拜货币类型 BYTE
    def GetMoneyRange(self): return self.attrTuple[4] # 货币值范围 list
# 缥缈仙域表
class IPY_FairyDomain():
    
@@ -2356,6 +2572,34 @@
        self.ipyFuncConfigDict = {} # 功能配置表缓存 {key:IPY_FuncConfig, ...}
        self.classSizeDict = {} # 数据表类对象占用内存大小 {dtName:size, ...}
        self.IpyDataClear(True)
        return
    def Recycle(self):
        Log("IPY_DataMgr Recycle")
        for tableName in Def_IpyTable.keys():
            if not hasattr(self, "ipy%sLen" % tableName):
                continue
            cacheList = getattr(self, "ipy%sCache" % tableName)
            del cacheList
            delattr(self, "ipy%sLen" % tableName)
            delattr(self, "ipy%sCache" % tableName)
            Log("Recycle IPY_%s" % tableName)
        del self.fileMD5Dict, self.ipyConfigEx, self.ipyDataIndexMap, self.ipyDataIndexMapEx, self.ipyFuncConfigDict, self.classSizeDict
        self.fileMD5Dict = {}
        self.ipyConfigEx = {}
        self.ipyDataIndexMap = {}
        self.ipyDataIndexMapEx = {}
        self.ipyFuncConfigDict = {}
        self.classSizeDict = {}
        gc.collect()
        return
    def LoadAll(self):
        ## 加载全部数据,测试内存用,实际应用中不调用
        for tableName in Def_IpyTable.keys():
            setattr(self, "ipy%sLen" % tableName, 0)
        self.IpyDataClear()
        return
    
    def IpyDataClear(self, onlyCheck=False):
@@ -2402,10 +2646,12 @@
        self.__LoadFileData("ActExpRate", onlyCheck)
        self.__LoadFileData("ActCostRebate", onlyCheck)
        self.__LoadFileData("ActBuyOne", onlyCheck)
        self.__LoadFileData("ActFamilyCTGAssist", onlyCheck)
        self.__LoadFileData("ActCollectWords", onlyCheck)
        self.__LoadFileData("ActGarbageSorting", onlyCheck)
        self.__LoadFileData("ActBossTrial", onlyCheck)
        self.__LoadFileData("ActBossTrialTemplate", onlyCheck)
        self.__LoadFileData("CrossActBossTrial", onlyCheck)
        self.__LoadFileData("ActXianXiaMJ", onlyCheck)
        self.__LoadFileData("ActGodGift", onlyCheck)
        self.__LoadFileData("ActHorsePetFeast", onlyCheck)
@@ -2424,6 +2670,7 @@
        self.__LoadFileData("ActManyDayRecharge", onlyCheck)
        self.__LoadFileData("ActTotalRecharge", onlyCheck)
        self.__LoadFileData("CrossZoneComm", onlyCheck)
        self.__LoadFileData("CrossZoneBattlefield", onlyCheck)
        self.__LoadFileData("CrossZonePK", onlyCheck)
        self.__LoadFileData("ChampionshipTime", onlyCheck)
        self.__LoadFileData("ChampionshipRank", onlyCheck)
@@ -2433,6 +2680,9 @@
        self.__LoadFileData("CrossPenglaiZoneMap", onlyCheck)
        self.__LoadFileData("CrossDemonLandZoneMap", onlyCheck)
        self.__LoadFileData("ActWeekParty", onlyCheck)
        self.__LoadFileData("ActBuyCountGift", onlyCheck)
        self.__LoadFileData("ActTask", onlyCheck)
        self.__LoadFileData("ActLoginNew", onlyCheck)
        self.__LoadFileData("ActLoginAward", onlyCheck)
        self.__LoadFileData("ActFeastWeekParty", onlyCheck)
        self.__LoadFileData("ActNewFairyCeremony", onlyCheck)
@@ -2450,6 +2700,7 @@
        self.__LoadFileData("MineAreaItem", onlyCheck)
        self.__LoadFileData("FamilyWarRankAward", onlyCheck)
        self.__LoadFileData("AssistThanksGift", onlyCheck)
        self.__LoadFileData("Worship", onlyCheck)
        self.__LoadFileData("FairyDomain", onlyCheck)
        Log("IPY_DataMgr ReloadOK! onlyCheck=%s" % onlyCheck)
        return
@@ -2936,6 +3187,13 @@
        self.CheckLoadData("ActBuyOne")
        return self.ipyActBuyOneCache[index]
    def GetActFamilyCTGAssistCount(self):
        self.CheckLoadData("ActFamilyCTGAssist")
        return self.ipyActFamilyCTGAssistLen
    def GetActFamilyCTGAssistByIndex(self, index):
        self.CheckLoadData("ActFamilyCTGAssist")
        return self.ipyActFamilyCTGAssistCache[index]
    def GetActCollectWordsCount(self):
        self.CheckLoadData("ActCollectWords")
        return self.ipyActCollectWordsLen
@@ -2963,6 +3221,13 @@
    def GetActBossTrialTemplateByIndex(self, index):
        self.CheckLoadData("ActBossTrialTemplate")
        return self.ipyActBossTrialTemplateCache[index]
    def GetCrossActBossTrialCount(self):
        self.CheckLoadData("CrossActBossTrial")
        return self.ipyCrossActBossTrialLen
    def GetCrossActBossTrialByIndex(self, index):
        self.CheckLoadData("CrossActBossTrial")
        return self.ipyCrossActBossTrialCache[index]
    def GetActXianXiaMJCount(self):
        self.CheckLoadData("ActXianXiaMJ")
@@ -3090,6 +3355,13 @@
        self.CheckLoadData("CrossZoneComm")
        return self.ipyCrossZoneCommCache[index]
    def GetCrossZoneBattlefieldCount(self):
        self.CheckLoadData("CrossZoneBattlefield")
        return self.ipyCrossZoneBattlefieldLen
    def GetCrossZoneBattlefieldByIndex(self, index):
        self.CheckLoadData("CrossZoneBattlefield")
        return self.ipyCrossZoneBattlefieldCache[index]
    def GetCrossZonePKCount(self):
        self.CheckLoadData("CrossZonePK")
        return self.ipyCrossZonePKLen
@@ -3152,6 +3424,27 @@
    def GetActWeekPartyByIndex(self, index):
        self.CheckLoadData("ActWeekParty")
        return self.ipyActWeekPartyCache[index]
    def GetActBuyCountGiftCount(self):
        self.CheckLoadData("ActBuyCountGift")
        return self.ipyActBuyCountGiftLen
    def GetActBuyCountGiftByIndex(self, index):
        self.CheckLoadData("ActBuyCountGift")
        return self.ipyActBuyCountGiftCache[index]
    def GetActTaskCount(self):
        self.CheckLoadData("ActTask")
        return self.ipyActTaskLen
    def GetActTaskByIndex(self, index):
        self.CheckLoadData("ActTask")
        return self.ipyActTaskCache[index]
    def GetActLoginNewCount(self):
        self.CheckLoadData("ActLoginNew")
        return self.ipyActLoginNewLen
    def GetActLoginNewByIndex(self, index):
        self.CheckLoadData("ActLoginNew")
        return self.ipyActLoginNewCache[index]
    def GetActLoginAwardCount(self):
        self.CheckLoadData("ActLoginAward")
@@ -3272,6 +3565,13 @@
        self.CheckLoadData("AssistThanksGift")
        return self.ipyAssistThanksGiftCache[index]
    def GetWorshipCount(self):
        self.CheckLoadData("Worship")
        return self.ipyWorshipLen
    def GetWorshipByIndex(self, index):
        self.CheckLoadData("Worship")
        return self.ipyWorshipCache[index]
    def GetFairyDomainCount(self):
        self.CheckLoadData("FairyDomain")
        return self.ipyFairyDomainLen