hxp
2024-07-01 a2a6db879bf7cc85051d0233952d7e50cf2ed317
ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
@@ -21,6 +21,7 @@
import hashlib
import os
import gc
'''表结构定义字典
{
@@ -424,6 +425,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),
@@ -456,18 +470,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":(
@@ -772,6 +809,46 @@
                        ("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":(
                        ("DWORD", "CfgID", 1),
                        ("char", "ActMark", 0),
@@ -928,6 +1005,18 @@
                        ("BYTE", "IsJobLimit", 0),
                        ("list", "CostEquipColor", 0),
                        ("BYTE", "UnSuitRate", 0),
                        ),
                "MineAreaItem":(
                        ("BYTE", "MineID", 1),
                        ("WORD", "LimitLV", 0),
                        ("DWORD", "ItemID", 0),
                        ("BYTE", "ItemLV", 0),
                        ("DWORD", "ItemCount", 0),
                        ("float", "ItemWeight", 0),
                        ("DWORD", "RefreshWeightSys", 0),
                        ("DWORD", "RefreshWeight", 0),
                        ("DWORD", "RefreshWeightSuper", 0),
                        ),
                "FamilyWarRankAward":(
@@ -1536,6 +1625,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():
    
@@ -1584,12 +1691,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():
@@ -1600,7 +1710,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():
@@ -2044,6 +2179,61 @@
    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():
    
@@ -2272,6 +2462,23 @@
    def GetCostEquipColor(self): return self.attrTuple[5] # 可用装备品质 list
    def GetUnSuitRate(self): return self.attrTuple[6] # 单件非套装加成概率 BYTE
# 福地物品表
class IPY_MineAreaItem():
    def __init__(self):
        self.attrTuple = None
        return
    def GetMineID(self): return self.attrTuple[0] # 矿物ID BYTE
    def GetLimitLV(self): return self.attrTuple[1] # 解锁等级 WORD
    def GetItemID(self): return self.attrTuple[2] # 物品ID DWORD
    def GetItemLV(self): return self.attrTuple[3] # 物品等级 BYTE
    def GetItemCount(self): return self.attrTuple[4] # 物品个数 DWORD
    def GetItemWeight(self): return self.attrTuple[5] # 物品总重量 float
    def GetRefreshWeightSys(self): return self.attrTuple[6] # 系统刷新权重 DWORD
    def GetRefreshWeight(self): return self.attrTuple[7] # 常规刷新权重 DWORD
    def GetRefreshWeightSuper(self): return self.attrTuple[8] # 超级刷新权重 DWORD
# 仙盟联赛排名奖励表
class IPY_FamilyWarRankAward():
    
@@ -2327,6 +2534,34 @@
        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):
        Log("IPY_DataMgr Reload... onlyCheck=%s" % onlyCheck)
        if not onlyCheck:
@@ -2370,10 +2605,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)
@@ -2402,6 +2639,9 @@
        self.__LoadFileData("CrossDemonLandZoneMap", onlyCheck)
        self.__LoadFileData("CrossFamilyFlagwarZoneMap", 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)
@@ -2416,6 +2656,7 @@
        self.__LoadFileData("CrossActCTGBillboard", onlyCheck)
        self.__LoadFileData("CrossActCTGBillboardOrder", onlyCheck)
        self.__LoadFileData("EquipStarUp", onlyCheck)
        self.__LoadFileData("MineAreaItem", onlyCheck)
        self.__LoadFileData("FamilyWarRankAward", onlyCheck)
        self.__LoadFileData("AssistThanksGift", onlyCheck)
        self.__LoadFileData("FairyDomain", onlyCheck)
@@ -2897,6 +3138,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
@@ -2924,6 +3172,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")
@@ -3121,6 +3376,27 @@
        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")
        return self.ipyActLoginAwardLen
@@ -3219,6 +3495,13 @@
        self.CheckLoadData("EquipStarUp")
        return self.ipyEquipStarUpCache[index]
    def GetMineAreaItemCount(self):
        self.CheckLoadData("MineAreaItem")
        return self.ipyMineAreaItemLen
    def GetMineAreaItemByIndex(self, index):
        self.CheckLoadData("MineAreaItem")
        return self.ipyMineAreaItemCache[index]
    def GetFamilyWarRankAwardCount(self):
        self.CheckLoadData("FamilyWarRankAward")
        return self.ipyFamilyWarRankAwardLen