From 912c7af646ef3640da22f0cf3e94a6fae02cf6ab Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 02 十二月 2024 18:49:58 +0800
Subject: [PATCH] 5559 [越南][英文][tqxbqy][砍树]优化启动检查配表格式(增加检查指定的字段格式dict、list)

---
 PySysDB/生成IpyGameDataPY/IpyGameDataPYTemp.py                                         |    4 ++++
 ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py                      |    8 ++++++--
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py |   24 ++++++++++++++----------
 PySysDB/PySysDBPY.h                                                                  |   10 +++++-----
 PySysDB/PySysDBG.h                                                                   |    2 +-
 5 files changed, 30 insertions(+), 18 deletions(-)

diff --git a/PySysDB/PySysDBG.h b/PySysDB/PySysDBG.h
index c5c3980..e3e29c3 100644
--- a/PySysDB/PySysDBG.h
+++ b/PySysDB/PySysDBG.h
@@ -908,7 +908,7 @@
 	list		NotifyInfoLoop;	//全服提示信息 - 循环广播[间隔分钟, 广播key]
 	WORD		LVLimit;	//限制等级
 	BYTE		IsDayReset;	//是否每天重置
-	list		ShopTypeList;	//商店类型列表
+	dict		ShopTypeList;	//商店类型列表
 };
 
 
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index d42e417..ba99500 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -1812,7 +1812,7 @@
 	WORD		_GiftbagType;	//礼包模板类型
 	DWORD		_GiftbagID;	//礼包编号
 	WORD		BuyCountLimit;		//限购次数,0不限购
-	list		GiftItemList;	//礼包物品信息列表 [(物品ID,个数,是否绑定),...]
+	eval		GiftItemList;	//礼包物品信息列表 [(物品ID,个数,是否绑定),...]
 	WORD		Discount;	//折扣百分比
 };
 
@@ -1905,7 +1905,7 @@
 	WORD		DropDiffLVLimit;	//掉落等级差值限制
 	list		GuajiAwardSet;	//挂机收益设置,x秒|x次小怪掉率
 	list		DropItemRateList;	//小怪掉落饼图概率
-	list		DropItemRateListBoss;	//Boss掉落饼图概率
+	dict		DropItemRateListBoss;	//Boss掉落饼图概率
 };
 
 //集字活动兑换模板表
@@ -1914,7 +1914,7 @@
 {
 	DWORD		_TemplateID;	//模板ID
 	BYTE		ExchangeNum;	//兑换编号(同个模板中需唯一不可变)
-	list		ExchangeItemInfo;	//兑换目标物品[物品ID,个数,是否绑定]
+	eval		ExchangeItemInfo;	//兑换目标物品[物品ID,个数,是否绑定]
 	BYTE		ExchangeCountMax;		//最大兑换次数(0不限制)
 	list		NeedItemList;	//所需物品信息列表 [[物品ID,个数,是否绑定], ...]
 	BYTE		NeedNotify;		//是否需要广播
@@ -2209,7 +2209,7 @@
 	WORD		AdvanceMinutes;	//前端提前X分钟展示活动
 	WORD		LVLimit;	//限制等级
 	BYTE		IsDayReset;	//是否每天重置
-	list		ShopTypeList;	//商店类型列表
+	dict		ShopTypeList;	//商店类型列表
 	char		MailKey;		//活动更新时发送邮件key
 	list		MailItemPrize;		//活动更新时发送邮件奖励物品
 };
@@ -2659,7 +2659,7 @@
 	BYTE		ActionType;	//活动条目ID
 	DWORD		TotalTimes;	//可完成的总次数,0表示不限次数
 	WORD		SingleTimes;	//单次领奖需要的次数
-	list		Reward;	//奖励物品
+	eval		Reward;	//奖励物品
 	WORD		Point;	//积分
 };
 
diff --git "a/PySysDB/\347\224\237\346\210\220IpyGameDataPY/IpyGameDataPYTemp.py" "b/PySysDB/\347\224\237\346\210\220IpyGameDataPY/IpyGameDataPYTemp.py"
index 0a5516e..0a0bb50 100644
--- "a/PySysDB/\347\224\237\346\210\220IpyGameDataPY/IpyGameDataPYTemp.py"
+++ "b/PySysDB/\347\224\237\346\210\220IpyGameDataPY/IpyGameDataPYTemp.py"
@@ -173,8 +173,12 @@
                         attrValue = value
                     elif fieldType == "dict":
                         attrValue = self.__StrToDict(value)
+                        if type(attrValue) != dict:
+                            raise
                     elif fieldType == "list":
                         attrValue = self.__StrToList(value)
+                        if type(attrValue) not in [list, tuple]:
+                            raise
                     elif fieldType == "eval":
                         attrValue = self.__StrToEval(value)
                     elif fieldType == "float":
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
index 716a2af..618c5d7 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
@@ -741,7 +741,7 @@
                         ("list", "NotifyInfoLoop", 0),
                         ("WORD", "LVLimit", 0),
                         ("BYTE", "IsDayReset", 0),
-                        ("list", "ShopTypeList", 0),
+                        ("dict", "ShopTypeList", 0),
                         ),
 
                 "Store":(
@@ -2250,7 +2250,7 @@
     def GetNotifyInfoLoop(self): return self.attrTuple[11] # 全服提示信息 - 循环广播[间隔分钟, 广播key] list
     def GetLVLimit(self): return self.attrTuple[12] # 限制等级 WORD
     def GetIsDayReset(self): return self.attrTuple[13] # 是否每天重置 BYTE
-    def GetShopTypeList(self): return self.attrTuple[14] # 商店类型列表 list
+    def GetShopTypeList(self): return self.attrTuple[14] # 商店类型列表 dict
 
 # 商城表
 class IPY_Store():
@@ -3189,8 +3189,12 @@
                         attrValue = value
                     elif fieldType == "dict":
                         attrValue = self.__StrToDict(value)
+                        if type(attrValue) != dict:
+                            raise
                     elif fieldType == "list":
                         attrValue = self.__StrToList(value)
+                        if type(attrValue) not in [list, tuple]:
+                            raise
                     elif fieldType == "eval":
                         attrValue = self.__StrToEval(value)
                     elif fieldType == "float":
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 23ad2c1..bbcd979 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -1438,7 +1438,7 @@
                         ("WORD", "GiftbagType", 1),
                         ("DWORD", "GiftbagID", 1),
                         ("WORD", "BuyCountLimit", 0),
-                        ("list", "GiftItemList", 0),
+                        ("eval", "GiftItemList", 0),
                         ("WORD", "Discount", 0),
                         ),
 
@@ -1507,13 +1507,13 @@
                         ("WORD", "DropDiffLVLimit", 0),
                         ("list", "GuajiAwardSet", 0),
                         ("list", "DropItemRateList", 0),
-                        ("list", "DropItemRateListBoss", 0),
+                        ("dict", "DropItemRateListBoss", 0),
                         ),
 
                 "CollectWordsExchange":(
                         ("DWORD", "TemplateID", 1),
                         ("BYTE", "ExchangeNum", 0),
-                        ("list", "ExchangeItemInfo", 0),
+                        ("eval", "ExchangeItemInfo", 0),
                         ("BYTE", "ExchangeCountMax", 0),
                         ("list", "NeedItemList", 0),
                         ("BYTE", "NeedNotify", 0),
@@ -1739,7 +1739,7 @@
                         ("WORD", "AdvanceMinutes", 0),
                         ("WORD", "LVLimit", 0),
                         ("BYTE", "IsDayReset", 0),
-                        ("list", "ShopTypeList", 0),
+                        ("dict", "ShopTypeList", 0),
                         ("char", "MailKey", 0),
                         ("list", "MailItemPrize", 0),
                         ),
@@ -2071,7 +2071,7 @@
                         ("BYTE", "ActionType", 0),
                         ("DWORD", "TotalTimes", 0),
                         ("WORD", "SingleTimes", 0),
-                        ("list", "Reward", 0),
+                        ("eval", "Reward", 0),
                         ("WORD", "Point", 0),
                         ),
 
@@ -4624,7 +4624,7 @@
     def GetGiftbagType(self): return self.attrTuple[0] # 礼包模板类型 WORD
     def GetGiftbagID(self): return self.attrTuple[1] # 礼包编号 DWORD
     def GetBuyCountLimit(self): return self.attrTuple[2] # 限购次数,0不限购 WORD
-    def GetGiftItemList(self): return self.attrTuple[3] # 礼包物品信息列表 [(物品ID,个数,是否绑定),...] list
+    def GetGiftItemList(self): return self.attrTuple[3] # 礼包物品信息列表 [(物品ID,个数,是否绑定),...] eval
     def GetDiscount(self): return self.attrTuple[4] # 折扣百分比 WORD
 
 # 双倍经验活动表
@@ -4733,7 +4733,7 @@
     def GetDropDiffLVLimit(self): return self.attrTuple[6] # 掉落等级差值限制 WORD
     def GetGuajiAwardSet(self): return self.attrTuple[7] # 挂机收益设置,x秒|x次小怪掉率 list
     def GetDropItemRateList(self): return self.attrTuple[8] # 小怪掉落饼图概率 list
-    def GetDropItemRateListBoss(self): return self.attrTuple[9] # Boss掉落饼图概率 list
+    def GetDropItemRateListBoss(self): return self.attrTuple[9] # Boss掉落饼图概率 dict
 
 # 集字活动兑换模板表
 class IPY_CollectWordsExchange():
@@ -4744,7 +4744,7 @@
         
     def GetTemplateID(self): return self.attrTuple[0] # 模板ID DWORD
     def GetExchangeNum(self): return self.attrTuple[1] # 兑换编号(同个模板中需唯一不可变) BYTE
-    def GetExchangeItemInfo(self): return self.attrTuple[2] # 兑换目标物品[物品ID,个数,是否绑定] list
+    def GetExchangeItemInfo(self): return self.attrTuple[2] # 兑换目标物品[物品ID,个数,是否绑定] eval
     def GetExchangeCountMax(self): return self.attrTuple[3] # 最大兑换次数(0不限制) BYTE
     def GetNeedItemList(self): return self.attrTuple[4] # 所需物品信息列表 [[物品ID,个数,是否绑定], ...] list
     def GetNeedNotify(self): return self.attrTuple[5] # 是否需要广播 BYTE
@@ -5085,7 +5085,7 @@
     def GetAdvanceMinutes(self): return self.attrTuple[5] # 前端提前X分钟展示活动 WORD
     def GetLVLimit(self): return self.attrTuple[6] # 限制等级 WORD
     def GetIsDayReset(self): return self.attrTuple[7] # 是否每天重置 BYTE
-    def GetShopTypeList(self): return self.attrTuple[8] # 商店类型列表 list
+    def GetShopTypeList(self): return self.attrTuple[8] # 商店类型列表 dict
     def GetMailKey(self): return self.attrTuple[9] # 活动更新时发送邮件key char
     def GetMailItemPrize(self): return self.attrTuple[10] # 活动更新时发送邮件奖励物品 list
 
@@ -5612,7 +5612,7 @@
     def GetActionType(self): return self.attrTuple[1] # 活动条目ID BYTE
     def GetTotalTimes(self): return self.attrTuple[2] # 可完成的总次数,0表示不限次数 DWORD
     def GetSingleTimes(self): return self.attrTuple[3] # 单次领奖需要的次数 WORD
-    def GetReward(self): return self.attrTuple[4] # 奖励物品 list
+    def GetReward(self): return self.attrTuple[4] # 奖励物品 eval
     def GetPoint(self): return self.attrTuple[5] # 积分 WORD
 
 # 运势活动时间表
@@ -6781,8 +6781,12 @@
                         attrValue = value
                     elif fieldType == "dict":
                         attrValue = self.__StrToDict(value)
+                        if type(attrValue) != dict:
+                            raise
                     elif fieldType == "list":
                         attrValue = self.__StrToList(value)
+                        if type(attrValue) not in [list, tuple]:
+                            raise
                     elif fieldType == "eval":
                         attrValue = self.__StrToEval(value)
                     elif fieldType == "float":

--
Gitblit v1.8.0