From 09fef77b16601ee5b0f53f34ccb23804b8448c8c Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 28 五月 2025 17:59:13 +0800
Subject: [PATCH] 102 【主界面】官职晋升-服务端

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py |  273 +++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 259 insertions(+), 14 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 49273bf..c1e5011 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -11,6 +11,8 @@
 #
 # 详细描述: 读取PY表
 #
+# @note: 本脚本由 \PySysDB\生成IpyGameDataPY 生成
+#
 #-------------------------------------------------------------------------------
 #"""Version = 2018-05-10 12:00"""
 #-------------------------------------------------------------------------------
@@ -33,6 +35,27 @@
 }
 '''
 Def_IpyTable = {
+                "DirtyList":(
+                        ("WORD", "ID", 0),
+                        ("char", "Word", 0),
+                        ),
+
+                "DirtyName":(
+                        ("WORD", "ID", 0),
+                        ("char", "Word", 0),
+                        ),
+
+                "FuncTeamSet":(
+                        ("DWORD", "FuncMapID", 1),
+                        ("BYTE", "NeedName", 0),
+                        ("BYTE", "MemberMax", 0),
+                        ("BYTE", "ApplyMax", 0),
+                        ("BYTE", "ReqApplyMax", 0),
+                        ("BYTE", "SortType", 0),
+                        ("BYTE", "SortReverse", 0),
+                        ("BYTE", "OPLimitInAct", 0),
+                        ),
+
                 "Dienstgrad":(
                         ("DWORD", "ID", 1),
                         ("WORD", "Type", 0),
@@ -121,6 +144,15 @@
                         ("list", "LVAttrValueList", 0),
                         ),
 
+                "Task":(
+                        ("WORD", "TaskID", 1),
+                        ("BYTE", "TaskGroup", 0),
+                        ("BYTE", "TaskType", 0),
+                        ("list", "TaskConds", 0),
+                        ("DWORD", "NeedValue", 0),
+                        ("list", "AwardItemList", 0),
+                        ),
+
                 "RealmXXZL":(
                         ("WORD", "TaskID", 1),
                         ("BYTE", "TaskType", 0),
@@ -134,11 +166,6 @@
                         ("DWORD", "LVMax", 0),
                         ("list", "AddAttrType", 0),
                         ("list", "AddAttrNum", 0),
-                        ("DWORD", "BuffID", 0),
-                        ("DWORD", "ExpRate", 0),
-                        ("DWORD", "ExpLimit", 0),
-                        ("dict", "LearnSkillIDInfo", 0),
-                        ("BYTE", "AddFreePoint", 0),
                         ),
 
                 "RealmLVUPTask":(
@@ -2417,6 +2444,35 @@
                         ("list", "AwardItemList", 0),
                         ),
 
+                "Family":(
+                        ("BYTE", "FamilyLV", 1),
+                        ("BYTE", "MemberMax", 0),
+                        ("BYTE", "DeputyLeaderMax", 0),
+                        ("BYTE", "EliteMax", 0),
+                        ("DWORD", "NeedExp", 0),
+                        ("DWORD", "ZhenbaogeWeights", 0),
+                        ),
+
+                "FamilyEmblem":(
+                        ("BYTE", "EmblemID", 1),
+                        ("BYTE", "UnlockFamilyLV", 0),
+                        ("DWORD", "ExpireMinutes", 0),
+                        ("DWORD", "CustomFamilyID", 0),
+                        ),
+
+                "FamilyZhenbaogeCut":(
+                        ("BYTE", "CutNum", 1),
+                        ("DWORD", "CutWeight", 0),
+                        ("float", "MinRatio", 0),
+                        ("float", "RandRatio", 0),
+                        ),
+
+                "FamilyZhenbaogeItem":(
+                        ("BYTE", "ItemGroupNum", 1),
+                        ("DWORD", "ItemWeight", 0),
+                        ("list", "ItemList", 0),
+                        ),
+
                 "FamilyZhenfa":(
                         ("BYTE", "ZhenfaType", 1),
                         ("WORD", "ZhenfaLV", 1),
@@ -2587,8 +2643,52 @@
                         ("DWORD", "NeedQiyun", 0),
                         ("list", "AwardItemList", 0),
                         ),
+
+                "TreeLV":(
+                        ("BYTE", "TreeLV", 1),
+                        ("DWORD", "LVUPNeedMoney", 0),
+                        ("DWORD", "LVUPNeedTime", 0),
+                        ("list", "EquipColorRateList", 0),
+                        ("list", "ExAwardItemRateList", 0),
+                        ),
                 }
 
+
+# 屏蔽词
+class IPY_DirtyList():
+    
+    def __init__(self):
+        self.attrTuple = None
+        return
+        
+    def GetID(self): return self.attrTuple[0] # WORD
+    def GetWord(self): return self.attrTuple[1] # 屏蔽词 char
+
+# 玩家名屏蔽词
+class IPY_DirtyName():
+    
+    def __init__(self):
+        self.attrTuple = None
+        return
+        
+    def GetID(self): return self.attrTuple[0] # WORD
+    def GetWord(self): return self.attrTuple[1] # 屏蔽词 char
+
+# 功能队伍设定表
+class IPY_FuncTeamSet():
+    
+    def __init__(self):
+        self.attrTuple = None
+        return
+        
+    def GetFuncMapID(self): return self.attrTuple[0] # 功能地图ID DWORD
+    def GetNeedName(self): return self.attrTuple[1] # 需要队伍名 BYTE
+    def GetMemberMax(self): return self.attrTuple[2] # 最大人员数 BYTE
+    def GetApplyMax(self): return self.attrTuple[3] # 最大接受申请数 BYTE
+    def GetReqApplyMax(self): return self.attrTuple[4] # 最大申请数 BYTE
+    def GetSortType(self): return self.attrTuple[5] # 队伍列表排序方案 BYTE
+    def GetSortReverse(self): return self.attrTuple[6] # 是否倒序 BYTE
+    def GetOPLimitInAct(self): return self.attrTuple[7] # 活动期间限制队伍操作 BYTE
 
 # 称号表
 class IPY_Dienstgrad():
@@ -2728,6 +2828,20 @@
     def GetLVAttrTypeList(self): return self.attrTuple[8] # 每级额外属性类(非累积) list
     def GetLVAttrValueList(self): return self.attrTuple[9] # 每级额外属性值(非累积) list
 
+# 任务表
+class IPY_Task():
+    
+    def __init__(self):
+        self.attrTuple = None
+        return
+        
+    def GetTaskID(self): return self.attrTuple[0] # 任务ID WORD
+    def GetTaskGroup(self): return self.attrTuple[1] # 任务组别 0-主线 BYTE
+    def GetTaskType(self): return self.attrTuple[2] # 任务类型 BYTE
+    def GetTaskConds(self): return self.attrTuple[3] # 任务条件[...] list
+    def GetNeedValue(self): return self.attrTuple[4] # 所需任务值 DWORD
+    def GetAwardItemList(self): return self.attrTuple[5] # 奖励物品列表 [[物品ID,个数,是否拍品], ...] list
+
 # 境界修仙之路
 class IPY_RealmXXZL():
     
@@ -2751,12 +2865,7 @@
     def GetLvLarge(self): return self.attrTuple[1] # 大境界 BYTE
     def GetLVMax(self): return self.attrTuple[2] # 等级上限 DWORD
     def GetAddAttrType(self): return self.attrTuple[3] # 境界加成属性类型 list
-    def GetAddAttrNum(self): return self.attrTuple[4] # 境界加成属性值 list
-    def GetBuffID(self): return self.attrTuple[5] # 给全服在线玩家增加buff DWORD
-    def GetExpRate(self): return self.attrTuple[6] # 修为池经验速率 DWORD
-    def GetExpLimit(self): return self.attrTuple[7] # 修为池经验上限 DWORD
-    def GetLearnSkillIDInfo(self): return self.attrTuple[8] # 学习技能ID信息 {"职业":[技能ID, ...], ...} dict
-    def GetAddFreePoint(self): return self.attrTuple[9] # 增加自由属性点 BYTE
+    def GetAddAttrNum(self): return self.attrTuple[4] # 境界加成属性值 list
 
 # 境界进阶任务表
 class IPY_RealmLVUPTask():
@@ -6184,6 +6293,55 @@
     def GetNeedHurtTotal(self): return self.attrTuple[2] # 所需总伤血 DWORD
     def GetAwardItemList(self): return self.attrTuple[3] # 奖励物品列表[[物品ID,个数,是否拍品], ...] list
 
+# 仙盟等级表
+class IPY_Family():
+    
+    def __init__(self):
+        self.attrTuple = None
+        return
+        
+    def GetFamilyLV(self): return self.attrTuple[0] # 仙盟等级 BYTE
+    def GetMemberMax(self): return self.attrTuple[1] # 成员数上限 BYTE
+    def GetDeputyLeaderMax(self): return self.attrTuple[2] # 副盟主数上限 BYTE
+    def GetEliteMax(self): return self.attrTuple[3] # 精英数上限 BYTE
+    def GetNeedExp(self): return self.attrTuple[4] # 升级所需经验 DWORD
+    def GetZhenbaogeWeights(self): return self.attrTuple[5] # 珍宝阁总权重 DWORD
+
+# 仙盟徽章表
+class IPY_FamilyEmblem():
+    
+    def __init__(self):
+        self.attrTuple = None
+        return
+        
+    def GetEmblemID(self): return self.attrTuple[0] # 徽章ID BYTE
+    def GetUnlockFamilyLV(self): return self.attrTuple[1] # 解锁仙盟等级,为0时代表其他方式解锁 BYTE
+    def GetExpireMinutes(self): return self.attrTuple[2] # 有效时长,分钟 DWORD
+    def GetCustomFamilyID(self): return self.attrTuple[3] # 定制仙盟ID DWORD
+
+# 仙盟珍宝阁砍价表
+class IPY_FamilyZhenbaogeCut():
+    
+    def __init__(self):
+        self.attrTuple = None
+        return
+        
+    def GetCutNum(self): return self.attrTuple[0] # 砍价人次 BYTE
+    def GetCutWeight(self): return self.attrTuple[1] # 砍价权重 DWORD
+    def GetMinRatio(self): return self.attrTuple[2] # 保底比值 float
+    def GetRandRatio(self): return self.attrTuple[3] # 随机比值 float
+
+# 仙盟珍宝阁物品表
+class IPY_FamilyZhenbaogeItem():
+    
+    def __init__(self):
+        self.attrTuple = None
+        return
+        
+    def GetItemGroupNum(self): return self.attrTuple[0] # 物品组编号 BYTE
+    def GetItemWeight(self): return self.attrTuple[1] # 随机权重 DWORD
+    def GetItemList(self): return self.attrTuple[2] # 物品列表[[物品ID,个数,是否拍品], ...] list
+
 # 仙盟阵法表
 class IPY_FamilyZhenfa():
     
@@ -6469,6 +6627,19 @@
     def GetAwardIndex(self): return self.attrTuple[0] # 奖励索引 WORD
     def GetNeedQiyun(self): return self.attrTuple[1] # 所需气运值 DWORD
     def GetAwardItemList(self): return self.attrTuple[2] # 奖励物品列表 list
+
+# 仙树等级表
+class IPY_TreeLV():
+    
+    def __init__(self):
+        self.attrTuple = None
+        return
+        
+    def GetTreeLV(self): return self.attrTuple[0] # 仙树等级 BYTE
+    def GetLVUPNeedMoney(self): return self.attrTuple[1] # 升到下一级所需货币数 DWORD
+    def GetLVUPNeedTime(self): return self.attrTuple[2] # 升级下一级所需所需秒 DWORD
+    def GetEquipColorRateList(self): return self.attrTuple[3] # 产出装备品质概率列表,[0品质万分率, 1品质万分率, ...] list
+    def GetExAwardItemRateList(self): return self.attrTuple[4] # 每次砍树概率额外产出道具饼图,[[万分率,[物品ID,个数]], ...] list
 
 
 def Log(msg, playerID=0, par=0):
@@ -6525,6 +6696,9 @@
         Log("IPY_DataMgr Reload... onlyCheck=%s" % onlyCheck)
         if not onlyCheck:
             self.ipyConfigEx = {}
+        self.__LoadFileData("DirtyList", onlyCheck)
+        self.__LoadFileData("DirtyName", onlyCheck)
+        self.__LoadFileData("FuncTeamSet", onlyCheck)
         self.__LoadFileData("Dienstgrad", onlyCheck)
         self.__LoadFileData("TitleStarUp", onlyCheck)
         self.__LoadFileData("PlayerFace", onlyCheck)
@@ -6535,6 +6709,7 @@
         self.__LoadFileData("RolePoint", onlyCheck)
         self.__LoadFileData("LingQiAttr", onlyCheck)
         self.__LoadFileData("LingQiTrain", onlyCheck)
+        self.__LoadFileData("Task", onlyCheck)
         self.__LoadFileData("RealmXXZL", onlyCheck)
         self.__LoadFileData("Realm", onlyCheck)
         self.__LoadFileData("RealmLVUPTask", onlyCheck)
@@ -6767,6 +6942,10 @@
         self.__LoadFileData("EquipPlusEvolve", onlyCheck)
         self.__LoadFileData("FamilyBossAward", onlyCheck)
         self.__LoadFileData("FamilyBossHurtAward", onlyCheck)
+        self.__LoadFileData("Family", onlyCheck)
+        self.__LoadFileData("FamilyEmblem", onlyCheck)
+        self.__LoadFileData("FamilyZhenbaogeCut", onlyCheck)
+        self.__LoadFileData("FamilyZhenbaogeItem", onlyCheck)
         self.__LoadFileData("FamilyZhenfa", onlyCheck)
         self.__LoadFileData("ItemWashMax", onlyCheck)
         self.__LoadFileData("HorsePetBossAward", onlyCheck)
@@ -6790,6 +6969,7 @@
         self.__LoadFileData("Zhanling", onlyCheck)
         self.__LoadFileData("Xiangong", onlyCheck)
         self.__LoadFileData("TiandaoTree", onlyCheck)
+        self.__LoadFileData("TreeLV", onlyCheck)
         Log("IPY_DataMgr ReloadOK! onlyCheck=%s" % onlyCheck)
         return
     
@@ -6802,10 +6982,12 @@
     
     def __LoadFileData(self, tableName, onlyCheck=False):
         # @param onlyCheck: 是否仅检查格式,一般启动时用
-        curPath = ChConfig.GetDBPath() + "\\PySysDB\\tag" + tableName + ".txt"
+        curPath = ChConfig.GetServerConfigPath() + "\\PySysDB\\" + tableName + ".txt"
         if not os.path.isfile(curPath):
-            ErrLog("can not find file = %s,%s" % (tableName, curPath))
-            raise Exception("can not find file = %s,%s" % (tableName, curPath))
+            curPath = ChConfig.GetServerConfigPath() + "\\PySysDB\\tag" + tableName + ".txt"
+            if not os.path.isfile(curPath):
+                ErrLog("can not find file = %s,%s" % (tableName, curPath))
+                raise Exception("can not find file = %s,%s" % (tableName, curPath))
         
         if not onlyCheck:
             if not hasattr(self, "ipy%sLen" % tableName):
@@ -6999,6 +7181,27 @@
         return setList
     
 
+    def GetDirtyListCount(self):
+        self.CheckLoadData("DirtyList")
+        return self.ipyDirtyListLen
+    def GetDirtyListByIndex(self, index):
+        self.CheckLoadData("DirtyList")
+        return self.ipyDirtyListCache[index]
+
+    def GetDirtyNameCount(self):
+        self.CheckLoadData("DirtyName")
+        return self.ipyDirtyNameLen
+    def GetDirtyNameByIndex(self, index):
+        self.CheckLoadData("DirtyName")
+        return self.ipyDirtyNameCache[index]
+
+    def GetFuncTeamSetCount(self):
+        self.CheckLoadData("FuncTeamSet")
+        return self.ipyFuncTeamSetLen
+    def GetFuncTeamSetByIndex(self, index):
+        self.CheckLoadData("FuncTeamSet")
+        return self.ipyFuncTeamSetCache[index]
+
     def GetDienstgradCount(self):
         self.CheckLoadData("Dienstgrad")
         return self.ipyDienstgradLen
@@ -7068,6 +7271,13 @@
     def GetLingQiTrainByIndex(self, index):
         self.CheckLoadData("LingQiTrain")
         return self.ipyLingQiTrainCache[index]
+
+    def GetTaskCount(self):
+        self.CheckLoadData("Task")
+        return self.ipyTaskLen
+    def GetTaskByIndex(self, index):
+        self.CheckLoadData("Task")
+        return self.ipyTaskCache[index]
 
     def GetRealmXXZLCount(self):
         self.CheckLoadData("RealmXXZL")
@@ -8693,6 +8903,34 @@
         self.CheckLoadData("FamilyBossHurtAward")
         return self.ipyFamilyBossHurtAwardCache[index]
 
+    def GetFamilyCount(self):
+        self.CheckLoadData("Family")
+        return self.ipyFamilyLen
+    def GetFamilyByIndex(self, index):
+        self.CheckLoadData("Family")
+        return self.ipyFamilyCache[index]
+
+    def GetFamilyEmblemCount(self):
+        self.CheckLoadData("FamilyEmblem")
+        return self.ipyFamilyEmblemLen
+    def GetFamilyEmblemByIndex(self, index):
+        self.CheckLoadData("FamilyEmblem")
+        return self.ipyFamilyEmblemCache[index]
+
+    def GetFamilyZhenbaogeCutCount(self):
+        self.CheckLoadData("FamilyZhenbaogeCut")
+        return self.ipyFamilyZhenbaogeCutLen
+    def GetFamilyZhenbaogeCutByIndex(self, index):
+        self.CheckLoadData("FamilyZhenbaogeCut")
+        return self.ipyFamilyZhenbaogeCutCache[index]
+
+    def GetFamilyZhenbaogeItemCount(self):
+        self.CheckLoadData("FamilyZhenbaogeItem")
+        return self.ipyFamilyZhenbaogeItemLen
+    def GetFamilyZhenbaogeItemByIndex(self, index):
+        self.CheckLoadData("FamilyZhenbaogeItem")
+        return self.ipyFamilyZhenbaogeItemCache[index]
+
     def GetFamilyZhenfaCount(self):
         self.CheckLoadData("FamilyZhenfa")
         return self.ipyFamilyZhenfaLen
@@ -8853,6 +9091,13 @@
     def GetTiandaoTreeByIndex(self, index):
         self.CheckLoadData("TiandaoTree")
         return self.ipyTiandaoTreeCache[index]
+
+    def GetTreeLVCount(self):
+        self.CheckLoadData("TreeLV")
+        return self.ipyTreeLVLen
+    def GetTreeLVByIndex(self, index):
+        self.CheckLoadData("TreeLV")
+        return self.ipyTreeLVCache[index]
 
 IPYData = IPY_DataMgr()
 def IPY_Data(): return IPYData

--
Gitblit v1.8.0