From 1e544f34c1e4144b03b6b8b273034a06a0cbecac Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期四, 30 五月 2019 18:13:30 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.0.87:10010/r/SnxxServerCode

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFB.py    |    2 
 Tool/配置导表工具/拖动配表到此导出.bat                                                                  |   10 
 Tool/配置导表工具/config2.ini                                                                   |   14 
 Tool/配置导表工具/示例表行列.xlsx                                                                    |    0 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py |   17 
 Tool/配置导表工具/gamecfg_export.py                                                             |  513 ++++++++++++++++++++++++++++++++
 Tool/配置导表工具/readme.txt                                                                    |   34 ++
 Tool/配置导表工具/示例表列.xlsx                                                                     |    0 
 Tool/配置导表工具/TableExportMap.txt                                                            |  264 ++++++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py      |   23 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PetControl.py  |   17 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py    |    2 
 Tool/配置导表工具/示例表行.xlsx                                                                     |    0 
 PySysDB/PySysDBPY.h                                                                       |    9 
 Tool/配置导表工具/config.ini                                                                    |   10 
 15 files changed, 907 insertions(+), 8 deletions(-)

diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 1b3f7e7..55693eb 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -538,6 +538,15 @@
 	dict		SweepGoodDrop;	//扫荡珍稀符印
 };
 
+//地图表格
+
+struct tagChinMap
+{
+	DWORD		_MapID;	//地图ID
+	BYTE		CanRide;	//可否骑乘
+	BYTE		CanOutPet;	//可否召唤宠物
+};
+
 //副本总表
 
 struct tagFBFunc
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 2a96f71..782cf3e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -451,6 +451,12 @@
                         ("dict", "SweepGoodDrop", 0),
                         ),
 
+                "ChinMap":(
+                        ("DWORD", "MapID", 1),
+                        ("BYTE", "CanRide", 0),
+                        ("BYTE", "CanOutPet", 0),
+                        ),
+
                 "FBFunc":(
                         ("DWORD", "DataMapID", 1),
                         ("BYTE", "DayTimes", 0),
@@ -2335,6 +2341,19 @@
     def GetSweepRunePoint(self): return self.SweepRunePoint # 扫荡符印精华
     def GetSweepYsog(self): return self.SweepYsog # 扫荡魔精
     def GetSweepGoodDrop(self): return self.SweepGoodDrop # 扫荡珍稀符印
+
+# 地图表格
+class IPY_ChinMap():
+    
+    def __init__(self):
+        self.MapID = 0
+        self.CanRide = 0
+        self.CanOutPet = 0
+        return
+        
+    def GetMapID(self): return self.MapID # 地图ID
+    def GetCanRide(self): return self.CanRide # 可否骑乘
+    def GetCanOutPet(self): return self.CanOutPet # 可否召唤宠物
 
 # 副本总表
 class IPY_FBFunc():
@@ -4562,6 +4581,8 @@
         self.ipyNPCDropItemLen = len(self.ipyNPCDropItemCache)
         self.ipyRuneTowerCache = self.__LoadFileData("RuneTower", IPY_RuneTower)
         self.ipyRuneTowerLen = len(self.ipyRuneTowerCache)
+        self.ipyChinMapCache = self.__LoadFileData("ChinMap", IPY_ChinMap)
+        self.ipyChinMapLen = len(self.ipyChinMapCache)
         self.ipyFBFuncCache = self.__LoadFileData("FBFunc", IPY_FBFunc)
         self.ipyFBFuncLen = len(self.ipyFBFuncCache)
         self.ipyFBLineCache = self.__LoadFileData("FBLine", IPY_FBLine)
@@ -5024,6 +5045,8 @@
     def GetNPCDropItemByIndex(self, index): return self.ipyNPCDropItemCache[index]
     def GetRuneTowerCount(self): return self.ipyRuneTowerLen
     def GetRuneTowerByIndex(self, index): return self.ipyRuneTowerCache[index]
+    def GetChinMapCount(self): return self.ipyChinMapLen
+    def GetChinMapByIndex(self, index): return self.ipyChinMapCache[index]
     def GetFBFuncCount(self): return self.ipyFBFuncLen
     def GetFBFuncByIndex(self, index): return self.ipyFBFuncCache[index]
     def GetFBLineCount(self): return self.ipyFBLineLen
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
index d07bd51..3a9db86 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -260,6 +260,8 @@
     if curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomScene):
         PlayerFB.DoExitCustomScene(curPlayer)
         
+    PetControl.DoLogic_PetLoadMapOK(curPlayer)
+    
     msgInfo = ""
     GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetPlayerID(), 0, 0, "RefreshMainServerRole", msgInfo, len(msgInfo))
     return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PetControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PetControl.py
index 827b656..6b72837 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PetControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PetControl.py
@@ -46,6 +46,7 @@
 import BaseAttack
 import PassiveBuffEffMng
 import ChNetSendPack
+import IpyGameDataPY
 #---------------------------------------------------------------------
 
 DefPetRebornHPRate = 100  # 宠物死亡复活血量百分比
@@ -460,7 +461,7 @@
 # @return BOOL 是否可出战
 # @remarks 检查当前指定宠物是否可出战
 def CheckPetCanFight(curPlayer, curPetObj):
-    if not GameWorld.GetMap().GetMapCanOutPet():
+    if not GetMapCanOutPet(curPlayer):
         #Pet_liubo_314885 此地图禁止宠物
         PlayerControl.NotifyCode(curPlayer, "Pet_liubo_314885")
         return False
@@ -546,7 +547,7 @@
     if not rolePet.GetIsBattle():
         return
     
-    if not GameWorld.GetMap().GetMapCanOutPet():
+    if not GetMapCanOutPet(curPlayer):
         #此地图禁止宠物
         return
     #召唤宠物出战
@@ -578,7 +579,7 @@
 # @remarks 
 def DoLogic_PetLoadMapOK(curPlayer):
     
-    if GameWorld.GetMap().GetMapCanOutPet():
+    if GetMapCanOutPet(curPlayer):
         #此地图宠物可以上
         PlayerPet.AutoSummonPet(curPlayer)
         return
@@ -591,6 +592,16 @@
     PlayerControl.NotifyCode(curPlayer, "Pet_liubo_314885")
     return
 
+def GetMapCanOutPet(curPlayer):
+    ## 检查本地图可否出战宠物,支持前端自定义场景
+    customMapID = PlayerControl.GetCustomMapID(curPlayer)
+    if customMapID:
+        ipyMapData = IpyGameDataPY.GetIpyGameData("ChinMap", customMapID)
+        canOutPet = True if ipyMapData and ipyMapData.GetCanOutPet() else False
+    else:
+        canOutPet = GameWorld.GetMap().GetMapCanOutPet()
+    return canOutPet
+
 #---------------------------------------------------------------------
 ## 刷新宠物信息并通知客户端
 #  @param rolePet 宠物实例
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFB.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFB.py
index 693d3c0..172104d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFB.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFB.py
@@ -40,6 +40,7 @@
 import FBHelpBattle
 import SkillShell
 import PyGameData
+import PetControl
 import NPCCommon
 
 import time
@@ -510,6 +511,7 @@
     PlayerControl.SetCustomMap(curPlayer, mapID, lineID)
     GameWorld.Log("玩家开始自定义场景!mapID=%s,lineID=%s" % (mapID, lineID), playerID)
     if mapID:
+        PetControl.DoLogic_PetLoadMapOK(curPlayer)
         FBLogic.OnEnterCustomScene(curPlayer, mapID, lineID)
         
     #通知进入状态
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
index ca5bf25..29b3bfb 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
@@ -188,11 +188,18 @@
     # 未加载成功骑乘会导致模型加载失败报错
     if not curPlayer.GetInitOK():
         return False
-                    
-    #地图不允许骑马 RideLimit_lhs_0
-    if not GameWorld.GetMap().GetMapCanRide():
-        PlayerControl.NotifyCode(curPlayer, "RideLimit_lhs_0")
-        return False
+    
+    customMapID = PlayerControl.GetCustomMapID(curPlayer)
+    if customMapID:
+        ipyMapData = IpyGameDataPY.GetIpyGameData("ChinMap", customMapID)
+        if not ipyMapData or not ipyMapData.GetCanRide():
+            PlayerControl.NotifyCode(curPlayer, "RideLimit_lhs_0")
+            return False
+    else:
+        #地图不允许骑马 RideLimit_lhs_0
+        if not GameWorld.GetMap().GetMapCanRide():
+            PlayerControl.NotifyCode(curPlayer, "RideLimit_lhs_0")
+            return False
     
     #检查玩家状态,只有在空闲状态才能上马
     if curPlayer.GetPlayerVehicle() != IPY_GameWorld.pvNull :
diff --git "a/Tool/\351\205\215\347\275\256\345\257\274\350\241\250\345\267\245\345\205\267/TableExportMap.txt" "b/Tool/\351\205\215\347\275\256\345\257\274\350\241\250\345\267\245\345\205\267/TableExportMap.txt"
new file mode 100644
index 0000000..5d3895f
--- /dev/null
+++ "b/Tool/\351\205\215\347\275\256\345\257\274\350\241\250\345\267\245\345\205\267/TableExportMap.txt"
@@ -0,0 +1,264 @@
+配置母表文件名	客户端路径	客户端表名	服务端路径	服务端表名	主键字段组合	表格说明	
+示例表行	\Config	tagA	\db\PyMongoDataServer\PySysDB	tagA	Lv	示例表行	
+示例表列	\Config	tagB	\db\PyMongoDataServer\PySysDB	tagB	-	示例表列	
+示例表行列	\Config	tagC	\db\PyMongoDataServer\PySysDB	tagC	Lv1|Lv2	示例表行列	
+B.宝箱怪表	\Config	-	\db\PyMongoDataServer\PySysDB	tagTreasureNPC	NPCID	宝箱怪表	
+B.宝箱表开启	\Config	Chests	\db\PyMongoDataServer\PySysDB	tagChests	ChestsItemID	宝箱表开启	
+B.宝箱表产出表	\Config	ChestsAward	\db\PyMongoDataServer\PySysDB	tagChestsAward	ChestsItemID|AwardLV	宝箱表产出表	
+B.Boss技能提示	\Config	bossSkillTips	-	-	id	boss信息提示	
+C.采集物表	\Config	CollectNpc	\db\PyMongoDataServer\PySysDB	tagCollectNPC	NPCID	采集物表	
+C.充值表	\Config	CTG	\db\PyMongoDataServer\PySysDB	tagCTG	GoodsCode	充值表	
+C.充值商品编号表	\Config	OrderInfo	\db\PyMongoDataServer\PySysDB	tagOrderInfo	id	充值商品编号表	
+C.称号表	\Config	Dienstgrad	\db\PyMongoDataServer\PySysDB	tagDienstgrad	ID	称号表	
+C.成就表	\Config	Success	\db\PyMongoDataServer\PySysDB	tagSuccess	id	成就表	
+C.成长型怪物公式参数表	\Config	-	\db\PyMongoDataServer\PySysDB	tagNPCStrengthen	-	成长型怪物公式参数表	
+D.等级表	\Config	PlayerLV	\db\PyMongoDataServer\PySysDB	tagPlayerLV	LV	角色等级相关信息表	
+D.等级开启功能	\Config	FuncOpenLV	\db\PyMongoDataServer\PySysDB	tagFuncOpenLV	FuncId	功能开启表	
+D.地图表格	\Config	Map	\db\PyMongoDataServer\SysDB	tagChinMap	MapID	地图表格	
+D.地图资源表格	\Config	MapResources	-	-	ID	地图资源表格	
+D.掉落表	\Config	NPCDropItem	\db\PyMongoDataServer\PySysDB	tagNPCDropItem	-	NPC掉落表	
+D.地图NPC配置表	\Config	MapEventPoint	\db\PyMongoDataServer\PySysDB	tagMapEventPoint	Key	地图NPC配置表	
+D.地图标试点NPC刷新	-	-	\db\PyMongoDataServer\PySysDB	tagMapRefreshNPC	MapID|RefreshNum	地图标试点NPC刷新	
+F.富文本信息替换	\Config	RichTextMsgReplace	-	RichTextMsgReplace	id	富文本信息替换	
+F.符印表	\Config	Rune	\db\PyMongoDataServer\PySysDB	tagRune	ID	符印表	
+F.副本表	\Config	Dungeon	\db\PyMongoDataServer\PySysDB	tagFBLine	ID	副本表	
+F.副本总表	\Config	DungeonOpenTime	\db\PyMongoDataServer\PySysDB	tagFBFunc	ID	副本总表	
+F.副本状态时间表	\Config	DungeonStateTime	\db\PyMongoDataServer\PySysDB	tagFBStateTime	ID	副本状态时间表	
+F.副本状态时间定制表	\Config	DungeonSpecialStateTime	\db\PyMongoDataServer\PySysDB	tagFBStateTimeCustom	ID	副本状态时间定制表	
+F.副本状态时间定制表合服	\Config	DungeonMixServerStateTime	\db\PyMongoDataServer\PySysDB	tagFBStateTimeCustomMix	ID	副本状态时间定制表合服	
+F.副本助战表	\Config	DungeonHelpBattle	\db\PyMongoDataServer\PySysDB	tagFBHelpBattle	ID	副本助战表	
+F.副本刷怪标识点表	\Config	-	\db\PyMongoDataServer\PySysDB	tagNPCCustomRefresh	ID	副本刷怪标识点表	
+F.符印塔表	\Config	RuneTower	-	-	ID	符印塔表	
+F.符印塔塔层表	\Config	RuneTowerFloor	\db\PyMongoDataServer\PySysDB	tagRuneTower	ID	符印塔塔层表	
+G.GM测试属性表	\Config	-	\db\PyMongoDataServer\PySysDB	tagGMAttr	-	GM测试属性表	
+G.功能配置表格	\Config	FuncConfig	\db\PyMongoDataServer\PySysDB	tagFuncConfig	KEY	功能混合配置表	
+G.怪物名称颜色	\Config	MonsterNameColor	-	MonsterNameColor	ID	怪物名称颜色	
+H.合成表	\Config	ItemCompound	\db\PyMongoDataServer\PySysDB	tagItemCompound	id	合成表	
+H.换装表	\Config	ModelRes	-	ModelRes	ID	换装资源表	
+H.魂石配置表	\Config	AttrFruit	\db\PyMongoDataServer\PySysDB	tagAttrFruit	ID	灵宠魂石坐骑兽魂等配置表	
+J.境界表	\Config	Realm	\db\PyMongoDataServer\PySysDB	tagRealm	Lv	境界表	
+J.技能表	\Config	Skill	\db\PyMongoDataServer\SysDB	tagChinSkill	SkillID	技能表	
+L.灵宠表	\Config	PetInfo	\db\PyMongoDataServer\PySysDB	tagPetInfo	ID	灵宠表	
+L.聊天气泡表	\Config	ChatBubbleBox	\db\PyMongoDataServer\PySysDB	tagChatBubbleBox	BoxID	聊天气泡表	
+Z.装备分解属性表	\Config	EquipDeCompose	\db\PyMongoDataServer\PySysDB	tagEquipDecompose	LV	装备分解属性表	
+L.灵宠升阶消耗表	\Config	PetClassCost	\db\PyMongoDataServer\PySysDB	tagPetClassCost	ID	灵宠升阶消耗表	
+N.NPC表	\Config	NPC	\db\PyMongoDataServer\SysDB	tagChinNPC	NPCID	NPC表	
+N.NPC时间掉血表	\Config	-	\db\PyMongoDataServer\PySysDB	tagNPCTimeLostHP	NPCID	NPC时间掉血表	
+Q.区域镜头	\Config	AreaCamera	-	-	AreaID	区域镜头	
+S.神兵表	\Config	GodWeapon	\db\PyMongoDataServer\PySysDB	tagGodWeapon	ID	神兵表	
+S.属性条目配置	\Config	PlayerProperty	-	PlayerProperty	ID	属性条目配置	
+S.随机名字列表	\Config	RandomName	-	RandomName	ID	随机名字列表	
+W.物品表	\Config	Item	\db\PyMongoDataServer\SysDB	tagChinItem	ID	物品信息表	
+X.洗练属性	\Config	EquipWash	\db\PyMongoDataServer\PySysDB	tagEquipWash	-	装备洗练表	
+X.洗练套装属性	\Config	EquipWashSpec	\db\PyMongoDataServer\PySysDB	tagEquipWashSpec	-	装备洗练套装特殊属性表	
+X.信息提示表	\Config	SysInfo	-	tagSysInfo	key	信息提示表	
+Y.羽翼精炼材料表	\Config	WingRefineExp	\db\PyMongoDataServer\PySysDB	tagWingRefineExp	ID	羽翼精炼材料经验表	
+Y.羽翼精炼属性随机	\Config	WingRefineAttr	\db\PyMongoDataServer\PySysDB	tagWingRefineAttr	ID	羽翼精炼属性表	
+Z.战斗力参数	\Config	FightPowerParam	\db\PyMongoDataServer\PySysDB	tagFightPowerParam	LV	战斗力参数等级系数表	
+Z.装备评分	\Config	EquipGSParam	\db\PyMongoDataServer\PySysDB	tagEquipGSParam	-	装备评分属性系数表	
+Z.装备对应积分经验表	\Config	PetEatEquip	\db\PyMongoDataServer\PySysDB	tagPetEatEquip	ID	装备积分经验表	
+Z.装备强化表	\Config	ItemPlus	\db\PyMongoDataServer\PySysDB	tagItemPlus	id	装备强化表	
+Z.装备强化等级上限	\Config	ItemPlusMax	\db\PyMongoDataServer\PySysDB	tagItemPlusMax	id	装备强化等级上限	
+Z.装备全身强化属性	\Config	ItemPlusSumAttr	\db\PyMongoDataServer\PySysDB	tagItemPlusSumAttr	countNeed	装备全身强化属性	
+Z.坐骑升级消耗表	\Config	HorseUp	\db\PyMongoDataServer\PySysDB	tagHorseUp	ID	坐骑升级消耗表	
+Z.坐骑表	\Config	Horse	\db\PyMongoDataServer\PySysDB	tagHorse	HorseID	坐骑表	
+Z.装备套装属性	\Config	EquipSuit	\db\PyMongoDataServer\PySysDB	tagEquipSuitAttr	id	装备套装属性	
+Z.装备套装材料	\Config	EquipSuitCompound	-	-	id	装备套装材料	
+Z.各个职业相关配置表	\Config	JobSetup	-	tagJobSetup	Job	各个职业相关配置表	
+T.特效管理表	\Config	Effect	-	Effect	id	特效管理表	
+P.屏蔽词	\Config	DirtyWord	\CoreServerGroup\GameServer\GameServerConfig\DirtyList	DirtyList	id	屏蔽词	
+P.排行榜表	\Config	RankList	-	tagRankList	ID	排行榜	
+S.世界等级表	-	WorldLV	\db\PyMongoDataServer\PySysDB	tagWorldLV	WorldLevel	世界等级表	
+X.仙盟表	\Config	Family	\db\PyMongoDataServer\PySysDB	tagFamily	familyLV	仙盟表	
+X.仙盟科技表	\Config	FamilyTech	\db\PyMongoDataServer\PySysDB	tagFamilyTech	teachID	仙盟科技表	
+Z.职业名称	\Config	OccupationName	-	JobName	ID	职业名称	
+X.仙盟Boss表	\Config	FairyBoss	-	tagFairyBoss	id	仙盟Boss表	
+Y.语言表	\Config	Language		Language	id	语言表	
+Y.音效表	\Config	Audio		Audio	ID	音效配置表	
+Y.运营活动表	\Config	ActionControl	\db\PyMongoDataServer\PySysDB	tagActionControl	ID	运营活动表	
+I.Icon表	\Config	Icon		Icon	id	图标配置表	
+C.传送点配置	\Config	maptransport			TransportID	传送点配置表	
+C.创角表	\Config	CreateRole	-	CreateRole	job	创角表	
+Z.战斗伤害数字	\Config	DamageNum		DamageNum	id	战斗伤害数字配置表	
+B.表情表	\Config	Face	-	Face	name	表情表	
+R.日常任务表	\Config	DailyQuest	\db\PyMongoDataServer\PySysDB	tagDailyQuest	ID	日常任务表	
+R.日常活动表	\Config	DailyQuestOpenTime	\db\PyMongoDataServer\PySysDB	tagDailyAction	ID	日常活动表	
+R.日常活动定制表	\Config	DailyQuestSpecialOpenTime	\db\PyMongoDataServer\PySysDB	tagDailyActionCustom	ID	日常活动定制表	
+R.日常活动定制表合服	\Config	DailyQuestMixServerStateTime	\db\PyMongoDataServer\PySysDB	tagDailyActionCustomMix	ID	日常活动定制表合服	
+R.日常活跃奖励表	\Config	DailyLivenessReward	\db\PyMongoDataServer\PySysDB	tagDailyLivenessReward	Liveness	日常活跃奖励表	
+P.拍卖物品表	\Config	AuctionItem	\db\PyMongoDataServer\PySysDB	tagAuctionItem	ItemID	拍卖物品表	
+J.集市表	\Config	Market	-	tagMarket	type	集市表	
+J.集市查询表	\Config	MarketQuery	-	tagMarketQuery	queryType	集市查询表	
+Y.邮件模板表	\Config	Mail	\db\PyMongoDataServer\PySysDB	tagPyMail	MailType	邮件模板表	
+Z.装备全身星数属性	\Config	RoleEquipStars	\db\PyMongoDataServer\PySysDB	tagRoleEquipStars	id	装备全身星数属性	
+F.法宝表	\Config	Treasure	\db\PyMongoDataServer\PySysDB	tagTreasure	ID	法宝表	
+J.技能升级	\Config	TreasureSkill	\db\PyMongoDataServer\PySysDB	tagSkillElement	ID	技能升级表	
+J.界面索引表	\Config	WindowSearch	-	tagWindowSearch	ID	界面索引表	
+X.修行表	\Config	RealmPractice	-	tagRealmPractice	ID	境界修行表	
+F.副本目标提示表	\Config	DungeonHint	-	tagDungeonHint	ID	副本目标提示表	
+Q.签到奖励表	\Config	SignIn	\db\PyMongoDataServer\PySysDB	tagSignAward	RewardID	签到奖励表	
+Q.累计签到奖励表	\Config	ContinueSignIn	\db\PyMongoDataServer\PySysDB	tagContineSignAward	ContineDay	累积签到奖励表	
+V.VIP礼包表	\Config	VIPAward	\db\PyMongoDataServer\PySysDB	tagVIPAward	VIPLV	VIP礼包表	
+D.定制物品表	\Config	AppointItem	\db\PyMongoDataServer\PySysDB	tagAppointItem	ID	定制物品表	
+V.vip特权表	\Config	VipPrivilege	\db\PyMongoDataServer\PySysDB	tagVipPrivilege	VIPPrivilege	VIP特权表	
+V.VIP杀怪加攻击表	\Config	VIPKillNPC	\db\PyMongoDataServer\PySysDB	tagVIPKillNPC	KillLV	VIP杀怪加攻击表	
+S.商城	\Config	Store	\db\PyMongoDataServer\PySysDB	tagStore	ID	商城	
+S.世界BOSS表	\Config	WorldBoss			NPCID	世界boss表	
+B.Boss之家	\Config	BossHome			NPCID	Boss之家表	
+B.Boss信息	\Config	BossInfo	\db\PyMongoDataServer\PySysDB	tagBOSSInfo	NPCID	Boss刷新信息	
+G.个人BOSS	\Config	PersonalBoss	\db\PyMongoDataServer\PySysDB	tagPersonalBoss	NPCID	个人boss表	
+G.古神禁地	\Config	ElderGodArea	\db\PyMongoDataServer\PySysDB	tagElderGodArea	NPCID	古神禁地表	
+F.法宝铸炼表	\Config	TreasureRefine	\db\PyMongoDataServer\PySysDB	tagTreasureRefine	-	法宝铸炼表	
+L.炼丹炉等级表	\Config	RefineStove	\db\PyMongoDataServer\PySysDB	tagRefineStove	-	炼丹炉等级表	
+L.炼丹表	\Config	Alchemy	\db\PyMongoDataServer\PySysDB	tagAlchemy	-	炼丹表	
+L.炼丹表特殊产出表	\Config	AlchemySpec	\db\PyMongoDataServer\PySysDB	tagAlchemySpec	-	炼丹表特殊产出表	
+Y.宴会题库表	\Config	QuestionBank	-	tagQuestionBank	id	宴会题库表	
+X.仙盟活跃表	\Config	UnionLiven	\db\PyMongoDataServer\PySysDB	tagFamilyActivity	ID	仙盟活跃表	
+B.BOSS秀	\Config	ActorShow	\db\PyMongoDataServer\PySysDB	tagNPCShow	-	Boss秀	
+H.红包表	\Config	RedPack	\db\PyMongoDataServer\PySysDB	tagFamilyRedPack	ID	仙盟红包表	
+G.功能预告表	\Config	FunctionForecast	\db\PyMongoDataServer\PySysDB	tagFunctionForecast	ID	功能预告表	
+G.GM命令表	\Config	GmCmd	-	-	Id	GM命令表	
+H.获取途径索引表	\Config	GetItemWays	-	-	ID	获取途径索引表	
+C.查看玩家功能表	\Config	ViewRoleFunc	-	-	id	查看玩家功能战力表	
+Y.引导表	\Config	Guide			ID	功能引导	
+W.我要变强表	\Config	RoleStronger	-	-	id	我要变强表	
+H.获取资源表	\Config	RoleResource	-	-	id	获取资源表	
+N.NPC自言自语表	\Config	NPCDialogue	-	-	ID	NPC随机瞎BB	
+R.任务列表	\Config	TaskList	-	-	ID	任务列表	
+F.封魔坛BOSS表	\Config	DemonJar	\db\PyMongoDataServer\PySysDB	tagSealDemon	NPCID	封魔坛配置表	
+J.剧情对话任务表	\Config	StoryMissions	-	-	ID	剧情对话任务表	
+J.剧情对话	\Config	Dialog	-	-	id	剧情对话表	
+F.副本鼓舞表	\Config	DungeonInspire	\db\PyMongoDataServer\PySysDB	tagFbEncourage	ID	副本鼓舞表	
+F.符印合成表	\Config	RuneCompose	\db\PyMongoDataServer\PySysDB	tagRuneCompound	TagItemID	符印合成表	
+Z.资源找回表	\Config	ResourcesBack	\db\PyMongoDataServer\PySysDB	tagResourcesBack	ID	资源找回表	
+C.场景阴影配置	\Config	SceneShadow				场景阴影表	
+G.怪物刷新点表	\Config	MonsterRefreshPoint	\db\PyMongoDataServer\PySysDB	tagMonsterRefreshPoint	NPCID	怪物刷新点表	
+T.天气效果表	\Config	Weather				天气效果表	
+G.规则表	\Config	Rule			ID	规则表	
+G.功能开关表	\Config	FuncSwitch			ID	功能开关表	
+S.神兽表	\Config	Dogz	\db\PyMongoDataServer\PySysDB	tagDogz	ID	神兽表	
+S.神兽强化表	\Config	DogzEquipPlus	\db\PyMongoDataServer\PySysDB	tagDogzEquipPlus	id	神兽强化表	
+F.副本组队目标表	\Config	TeamTarget				副本组队目标表	
+Q.全民冲榜排行奖励表	\Config	OSCBillRankAward	\db\PyMongoDataServer\PySysDB	tagOSCBillRankAward	-	全民冲榜排行奖励表	
+Q.全民冲榜达成奖励表	\Config	OSCBillTagAward	\db\PyMongoDataServer\PySysDB	tagOSCBillTagAward	-	全民冲榜达成奖励表	
+Q.七天登陆奖励	\Config	InSevenDays	\db\PyMongoDataServer\PySysDB	tagLoginDayAward	RewardID	七天登入奖励	
+Q.七天在线奖励	\Config	OnlineAward	\db\PyMongoDataServer\PySysDB	tagOnlineAward	RewardID	七天在线奖励	
+Q.七天限时特惠表	\Config	SpringSale	\db\PyMongoDataServer\PySysDB	tagSpringSale	GiftID	七天限时特惠	
+D.等级礼包表	\Config	LVAawrd	\db\PyMongoDataServer\PySysDB	tagLVAward	RewardID	等级礼包表	
+T.投资表	\Config	Invest	\db\PyMongoDataServer\PySysDB	tagInvest	id	投资表	
+T.套装特效表	\Config	SuitEffect	-	-	ID	套装特效	
+L.Loading提示表	\Config	LoadingTip				场景切换提示表	
+X.仙魔成就表	\Config	XMZZAchievement	-	-	ID	仙魔成就表	
+X.寻宝产出库表	\Config	XBGetItem	\db\PyMongoDataServer\PySysDB	tagTreasureHouse	ID	寻宝产出库表	
+K.开服红包成就表	\Config	OSRedAchieve	-	-	id	开服红包成就表	
+X.仙宝寻主表	\Config	TreasureFindHost	\db\PyMongoDataServer\PySysDB	tagXBXZ	ID	仙宝寻主表	
+F.法宝升级表	\Config	TreasureUp	\db\PyMongoDataServer\PySysDB	tagTreasureUp	ID	法宝升级表	
+F.法宝特权表	\Config	TreasurePrivilege	\db\PyMongoDataServer\PySysDB	tagTreasurePrivilege	PrivilegeID	法宝特权表	
+L.loading界面功能展示	\Config	LoadingFunction			ID	loading界面功能展示表	
+D.登录广告表	\Config	LoginAd	-	-	id	登录广告表	
+S.双倍经验活动表	\Config	-	\db\PyMongoDataServer\PySysDB	tagActExpRate	CfgID	双倍经验活动表	
+X.消费返利活动表	\Config	-	\db\PyMongoDataServer\PySysDB	tagActCostRebate	CfgID	消费返利活动表	
+X.消费返利模板表	\Config	-	\db\PyMongoDataServer\PySysDB	tagCostRebateTemplate	-	消费返利模板表	
+X.限时特惠表	\Config	-	\db\PyMongoDataServer\PySysDB	tagActSpringSale	-	限时特惠表	
+X.限时礼包表	\Config	-	\db\PyMongoDataServer\PySysDB	tagActFlashGiftbag	-	限时礼包表	
+X.限时礼包模板表	\Config	-	\db\PyMongoDataServer\PySysDB	tagFlashGiftbag	-	限时礼包模板表	
+J.极品白拿表	\Config	FreeGoods	\db\PyMongoDataServer\PySysDB	tagFreeGoods	ID	极品白拿表	
+B.Boss复活	\Config	BossReborn	-	-	Id	Boss复活	
+B.Boss复活模板表	\Config	-	\db\PyMongoDataServer\PySysDB	tagBossReborn	-	Boss复活模板表	
+B.BOSS复活活动时间表	\Config	-	\db\PyMongoDataServer\PySysDB	tagActBossReborn	CfgID	BOSS复活活动时间表	
+X.仙界盛典活动时间表	\Config	-	\db\PyMongoDataServer\PySysDB	tagActFairyCeremony	CfgID	仙界盛典活动时间表	
+X.仙界盛典-绝版降临表	\Config	UniquenessArrive	\db\PyMongoDataServer\PySysDB	tagUniquenessArrive	ID	绝版降临表	
+X.仙界盛典-全民来嗨	\Config	AllPeopleParty	\db\PyMongoDataServer\PySysDB	tagAllPeopleParty	ID	全民来嗨	
+X.仙界盛典-全民来嗨奖励	\Config	AllPeoplePartyAward	\db\PyMongoDataServer\PySysDB	tagAllPeoplePartyAward	ID	全民来嗨奖励	
+T.天赋表	\Config	Talent	\db\PyMongoDataServer\PySysDB	tagTalentSkill	SkillId	天赋表	
+K.空中楼宇	\Config	AerialBuilding	-	-	Id	空中楼宇	
+K.跨服竞技场段位表	\Config	CrossServerArena	\db\PyMongoDataServer\PySysDB	tagCrossRealmPKDan	DanLV	跨服竞技场段位表	
+K.跨服竞技场段位奖励表	\Config	CrossRealmPKDanAward	\db\PyMongoDataServer\PySysDB	tagCrossRealmPKDanAward	CrossZoneName|SeasonID|DanLV	跨服竞技场段位奖励表	
+K.跨服竞技场排名奖励表	\Config	CrossRealmPKOrderAward	\db\PyMongoDataServer\PySysDB	tagCrossRealmPKOrderAward	CrossZoneName|SeasonID	跨服竞技场排名奖励表	
+K.跨服竞技场赛季表	\Config	-	\db\PyMongoDataServer\PySysDB	tagCrossRealmPKSeason	CrossZoneName|ZoneID|SeasonID	跨服竞技场赛季表	
+K.跨服分区表竞技场	\Config	-	\db\PyMongoDataServer\PySysDB	tagCrossZonePK	CrossZoneName|ZoneID	跨服分区表竞技场	
+K.跨服分区表通用	\Config	-	\db\PyMongoDataServer\PySysDB	tagCrossZoneComm	CrossZoneName|ZoneID	跨服分区表通用	
+K.跨服Boss蓬莱仙境分区地图表	\Config	-	\db\PyMongoDataServer\PySysDB	tagCrossPenglaiZoneMap	ZoneID	跨服Boss蓬莱仙境分区地图表	
+D.多倍修行点活动时间表	\Config	-	\db\PyMongoDataServer\PySysDB	tagActRealmPoint	ID	多倍修行点活动时间表	
+Z.宗门试炼兑换表	\Config	TrialExchange	\db\PyMongoDataServer\PySysDB	tagTrialExchange	id	宗门试炼兑换表	
+S.神兽副本	\Config	DogzDungeon			NPCID	神兽副本表	
+Z.宗门试炼奖励表	\Config	TrialRewards	-	-	id	宗门试炼奖励表	
+P.玩家名屏蔽词	\Config	DirtyName	\CoreServerGroup\GameServer\GameServerConfig\DirtyList	DirtyName	id	玩家名屏蔽词	
+W.娲皇遗迹副本奖励预览表	\Config	WHYJReward	-	-	ID	娲皇遗迹副本奖励预览表	
+X.限时抢购表	\Config	-	\db\PyMongoDataServer\PySysDB	tagActFlashSale	CfgID	限时抢购表	
+X.许愿池活动时间表	\Config	-	\db\PyMongoDataServer\PySysDB	tagActWishingWell	CfgID	许愿池活动时间表	
+X.许愿池库模板表	\Config	-	\db\PyMongoDataServer\PySysDB	tagWishingWell	-	许愿池库模板表	
+X.小助手功能表	\Config	Secretary	-	-	ID	小助手功能表	
+L.累计充值活动表	\Config	-	\db\PyMongoDataServer\PySysDB	tagActTotalRecharge	CfgID	累计充值活动表	
+L.累计充值模板表	\Config	-	\db\PyMongoDataServer\PySysDB	tagTotalRechargeTemplate	-	累计充值模板表	
+S.守护表	\Config	Guard	-	-	id	守护表	
+M.魔族法宝副本表	\Config	TreasureDungeon	\db\PyMongoDataServer\PySysDB	tagMagicWeaponFB	-	魔族法宝副本表	
+B.冰晶矿脉星级奖励表	\Config	IceLodeStarAward	\db\PyMongoDataServer\PySysDB	tagIceLodeStarAward	-	冰晶矿脉星级奖励表	
+L.Loading图	\Config	LoadingBackGround				切图背景图	
+R.任务战力表	\Config	TaskPower				任务战力表	
+S.神兵特效表	\Config	GodWeaponEffect	\db\PyMongoDataServer\PySysDB	tagGodWeaponEffect	-	神兵特效表	
+F.分包	\Config	priorbundle				分包资源	
+D.断线提示	\Config	KickOutReason				断线提示	
+J.进入游戏前的提示	\Config	PriorLanguage				进入游戏前的提示	
+S.上古战场随机名字	\Config	AncientRobotName		id	上古战场机器人名字		
+J.聚魂属性表	\Config	GatherSoulProperty	\db\PyMongoDataServer\PySysDB	tagGatherSoulAttr	AttrType	聚魂属性表	
+J.聚魂表	\Config	GatherSoul	\db\PyMongoDataServer\PySysDB	tagGatherSoul	ID	聚魂表	
+J.聚魂合成表	\Config	GatherSoulCompose	\db\PyMongoDataServer\PySysDB	tagGatherSoulCompound	TagItemID	聚魂合成表	
+F.法宝王者法宝表	\Config	KingTreasure	\db\PyMongoDataServer\PySysDB	tagMagicWeaponOfKing	ID	法宝王者法宝表	
+W.王者法宝物品表	\Config	KingTreasureItem	-	-	itemId	王者法宝物品表	
+K.跨服Boss表	\Config	CrossServerBoss			NPCID	跨服boss表	
+S.时装表	\Config	FashionDress	\db\PyMongoDataServer\PySysDB	tagCoat	CoatID	时装表	
+S.时装柜升级表	\Config	FashionDressCabinet	\db\PyMongoDataServer\PySysDB	tagCoatChestUp	LV	时装柜升级表	
+Z.周狂欢表	\Config	WeekParty	-	-	Id	周狂欢表	
+Z.周狂欢模板表	\Config	-	\db\PyMongoDataServer\PySysDB	tagWeekParty	-	周狂欢模板表	
+Z.周狂欢时间表	\Config	-	\db\PyMongoDataServer\PySysDB	tagActWeekParty	-	周狂欢时间表	
+Z.周狂欢积分奖励表	\Config	WeekPartyPoint	-	-	Id	周狂欢积分奖励表	
+C.场景资源替换	\Config	SceneReplace			id	场景资源替换表	
+D.登录奖励模板表	\Config	-	\db\PyMongoDataServer\PySysDB	tagLoginAward	-	登录奖励模板表	
+D.登录奖励时间表	\Config	-	\db\PyMongoDataServer\PySysDB	tagActLoginAward	-	登录奖励时间表	
+Z.诛仙装备套装属性表	\Config	-	\db\PyMongoDataServer\PySysDB	tagZhuXianSuitAttr	id	诛仙装备套装属性表	
+Z.诛仙BOSS表	\Config	JadeDynastyBoss	\db\PyMongoDataServer\PySysDB	tagZhuXianBoss	NPCID	诛仙Boss表	
+Z.诛仙塔表	\Config	JadeDynastyTower	\db\PyMongoDataServer\PySysDB	tagZhuXianTower	floorId	诛仙塔表	
+J.技能帧动画表	\Config	SkillFrameAnimation	-	-	skillTypeId	技能帧动画表	
+Z.诛仙装备分解表	\Config	-	\db\PyMongoDataServer\PySysDB	tagZhuXianEquipDecompose	-	诛仙装备分解表	
+J.节日巡礼模板表	\Config	-	\db\PyMongoDataServer\PySysDB	tagFeastWeekParty	-	节日巡礼模板表	
+J.节日巡礼时间表	\Config	-	\db\PyMongoDataServer\PySysDB	tagActFeastWeekParty	-	节日巡礼时间表	
+J.节日红包时间表	\Config	FestivalRedpack	\db\PyMongoDataServer\PySysDB	tagActFeastRedPacket	-	节日红包时间表	
+J.节日红包每日成就表	\Config	FestivalRedpackTask	\db\PyMongoDataServer\PySysDB	tagActFeastRedPacketSucc	id	节日红包每日成就表	
+X.新仙界盛典活动时间表	\Config	-	\db\PyMongoDataServer\PySysDB	tagActNewFairyCeremony	CfgID	新仙界盛典活动时间表	
+X.新仙界盛典-绝版降临表	\Config	NewUniquenessArrive	\db\PyMongoDataServer\PySysDB	tagNewUniquenessArrive	ID	绝版降临表	
+X.新仙界盛典-全民来嗨	\Config	NewAllPeopleParty	\db\PyMongoDataServer\PySysDB	tagNewAllPeopleParty	ID	全民来嗨	
+X.新仙界盛典-全民来嗨奖励	\Config	NewAllPeoplePartyAward	\db\PyMongoDataServer\PySysDB	tagNewAllPeoplePartyAward	ID	全民来嗨奖励	
+J.节日巡礼表	\Config	HolidayHoming	-	-	Id	节日巡礼表	
+J.节日巡礼积分奖励表	\Config	HolidayHomingPoint	-	-	Id	节日巡礼积分奖励表	
+Z.诛仙宝石共鸣属性表	\Config	JadeDynastyStoneAttr	\db\PyMongoDataServer\PySysDB	tagZhuXianStoneAttr	id	诛仙宝石共鸣属性表	
+J.集字活动表	\Config	Character	-	-	Id	集字活动表	
+X.幸运鉴宝活动时间表	\Config	-	\db\PyMongoDataServer\PySysDB	tagActLuckyTreasure	-	幸运鉴宝活动时间表	
+X.幸运鉴宝库模板表	\Config	-	\db\PyMongoDataServer\PySysDB	tagLuckyTreasureTemplate	-	幸运鉴宝库模板表	
+K.跨服竞技场机器人装备	\Config	CrossServerOneVsOneRobot			id	跨服竞技场机器人装备	
+D.登录奖励表	\Config	LoginReward	-	-	Id	登录奖励表	
+S.神秘商店表	\Config	-	\db\PyMongoDataServer\PySysDB	tagMysteryShop	-	神秘商店表	
+P.拍卖行表	\Config	Auction	-	-	Id	拍卖行表	
+Z.装备位背包索引映射表	\Config	EquipPlaceMap	\db\PyMongoDataServer\PySysDB	tagEquipPlaceIndexMap	PackIndex	装备位背包索引映射表	
+Z.装备总表	\Config	EquipControl	-	-	id	装备总表	
+Z.装备传奇属性等级数值表	\Config	LegendPropertyValue	\db\PyMongoDataServer\PySysDB	tagEquipLegendAttrValue	ItemType|ItemClassLV|ItemColor|IsSuit|id	装备传奇属性等级数值表	
+Z.装备传奇属性类型表	\Config	-	\db\PyMongoDataServer\PySysDB	tagEquipLegendAttrType	ItemType	装备传奇属性类型表	
+Z.装备传奇属性条数表	\Config	-	\db\PyMongoDataServer\PySysDB	tagEquipLegendAttrCount	ItemType|ItemColor|IsSuit	装备传奇属性条数表	
+Z.装备传奇属性值库表	\Config	LegendProperty	\db\PyMongoDataServer\PySysDB	tagEquipLegendAttrLib	id	装备传奇属性值库表	
+Z.装备升星表	\Config	EquipStar	\db\PyMongoDataServer\PySysDB	tagEquipStarUp	ID	装备升星表	
+Z.装备强化进化表	\Config	EquipPlusEvolve	\db\PyMongoDataServer\PySysDB	tagEquipPlusEvolve	ID	装备强化进化表	
+P.拍卖行索引表	\Config	AuctionIndex	-	-	Id	拍卖行表索引表	
+X.仙盟Boss奖励表	\Config	-	\db\PyMongoDataServer\PySysDB	tagFamilyBossAward	ID	仙盟Boss奖励表	
+Z.装备洗练等级上限	\Config	WashLevelMax	\db\PyMongoDataServer\PySysDB	tagItemWashMax	id	装备洗练等级上限	
+Q.骑宠Boss奖励表	\Config	-	\db\PyMongoDataServer\PySysDB	tagHorsePetBossAward	-	骑宠Boss奖励表	
+L.灵根表	\Config	ReikiRoot	\db\PyMongoDataServer\PySysDB	tagRolePoint	id	灵根表	
+P.缥缈仙域表	\Config	HazyRegion	\db\PyMongoDataServer\PySysDB	tagFairyDomain	id	缥缈仙域表	
+P.缥缈奇遇表	\Config	-	\db\PyMongoDataServer\PySysDB	tagFairyAdventures	ID	缥缈奇遇表	
+P.缥缈奇遇对话表	\Config	AdventureDialogue		-	-	id	缥缈仙域对话表
+P.缥缈仙域定制奖励表	\Config	-	\db\PyMongoDataServer\PySysDB	tagFairyDomainAppoint	ID	缥缈仙域定制奖励表	
+L.炼丹数量表	\Config	AlchemyCount	\db\PyMongoDataServer\PySysDB	tagAlchemyResult	ID	炼丹数量表	
+F.副本Buff表	\Config	DungeonUseBuff	\db\PyMongoDataServer\PySysDB	tagFBBuyBuff	ID	副本Buff表	
+F.法宝章节任务表	\Config	TreasureChapter	-	-	id	法宝章节表	
+T.天星塔表	\Config	SkyTower	\db\PyMongoDataServer\PySysDB	tagSkyTower	floorId	天星塔表	
+R.任务反馈表	\Config	TaskFeedback	-	-	taskId	任务反馈表
+R.任务反馈功能表	\Config	TaskFeedbackFunc	-	-	id	任务反馈功能表
\ No newline at end of file
diff --git "a/Tool/\351\205\215\347\275\256\345\257\274\350\241\250\345\267\245\345\205\267/config.ini" "b/Tool/\351\205\215\347\275\256\345\257\274\350\241\250\345\267\245\345\205\267/config.ini"
new file mode 100644
index 0000000..dcdf669
--- /dev/null
+++ "b/Tool/\351\205\215\347\275\256\345\257\274\350\241\250\345\267\245\345\205\267/config.ini"
@@ -0,0 +1,10 @@
+[config]
+
+; 客户端项目根路径
+ClientRootPath = D:\ProjS1\Assets\ResourcesOut\Refdata
+
+; 服务端项目根路径
+ServerRootPath = D:\Server
+
+; 后端特殊文件编码 {"编码":"文件名|文件名|..."}
+EncodingSpec = {"utf8":"P.屏蔽词|P.玩家名屏蔽词"}
\ No newline at end of file
diff --git "a/Tool/\351\205\215\347\275\256\345\257\274\350\241\250\345\267\245\345\205\267/config2.ini" "b/Tool/\351\205\215\347\275\256\345\257\274\350\241\250\345\267\245\345\205\267/config2.ini"
new file mode 100644
index 0000000..a6bb26f
--- /dev/null
+++ "b/Tool/\351\205\215\347\275\256\345\257\274\350\241\250\345\267\245\345\205\267/config2.ini"
@@ -0,0 +1,14 @@
+[config]
+
+; 客户端项目根路径
+ClientRootPath = E:\Snxxz_Client\Assets\ResourcesOut\Refdata
+ClientRootPath1 = E:\Snxxz_Client2\Assets\ResourcesOut\Refdata
+
+; 服务端项目根路径
+ServerRootPath = E:\snxx_server
+;ServerRootPath1 = X:\SNServer
+ServerRootPath1 = X:\snxx_server
+ServerRootPath2 = Y:\snxx_server
+
+; 后端特殊文件编码 {"编码":"文件名|文件名|..."}
+EncodingSpec = {"utf8":"P.屏蔽词|"}
\ No newline at end of file
diff --git "a/Tool/\351\205\215\347\275\256\345\257\274\350\241\250\345\267\245\345\205\267/gamecfg_export.py" "b/Tool/\351\205\215\347\275\256\345\257\274\350\241\250\345\267\245\345\205\267/gamecfg_export.py"
new file mode 100644
index 0000000..06e74ea
--- /dev/null
+++ "b/Tool/\351\205\215\347\275\256\345\257\274\350\241\250\345\267\245\345\205\267/gamecfg_export.py"
@@ -0,0 +1,513 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Code.gamecfg_export
+#
+# @todo:游戏客户端服务端配置文件导出
+# @author hxp
+# @date 2017-07-19
+# @version 1.0
+#
+# 详细描述: 根据策划配置的母表格导出客户端服务端程序使用的配置文件
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2017-07-19 12:00"""
+#-------------------------------------------------------------------------------
+
+import ctypes
+import ConfigParser
+import xlrd
+import sys
+import os
+
+####################################################################################################
+
+STD_INPUT_HANDLE = -10
+STD_OUTPUT_HANDLE = -11
+STD_ERROR_HANDLE = -12
+
+# 字体颜色定义 ,关键在于颜色编码,由2位十六进制组成,分别取0~f,前一位指的是背景色,后一位指的是字体色
+#由于该函数的限制,应该是只有这16种,可以前景色与背景色组合。也可以几种颜色通过或运算组合,组合后还是在这16种颜色中
+
+# Windows CMD命令行 字体颜色定义 text colors
+FOREGROUND_BLACK = 0x00 # black.
+FOREGROUND_DARKBLUE = 0x01 # dark blue.
+FOREGROUND_DARKGREEN = 0x02 # dark green.
+FOREGROUND_DARKSKYBLUE = 0x03 # dark skyblue.
+FOREGROUND_DARKRED = 0x04 # dark red.
+FOREGROUND_DARKPINK = 0x05 # dark pink.
+FOREGROUND_DARKYELLOW = 0x06 # dark yellow.
+FOREGROUND_DARKWHITE = 0x07 # dark white.
+FOREGROUND_DARKGRAY = 0x08 # dark gray.
+FOREGROUND_BLUE = 0x09 # blue.
+FOREGROUND_GREEN = 0x0a # green.
+FOREGROUND_SKYBLUE = 0x0b # skyblue.
+FOREGROUND_RED = 0x0c # red.
+FOREGROUND_PINK = 0x0d # pink.
+FOREGROUND_YELLOW = 0x0e # yellow.
+FOREGROUND_WHITE = 0x0f # white.
+
+# Windows CMD命令行 背景颜色定义 background colors
+BACKGROUND_BLUE = 0x10 # dark blue.
+BACKGROUND_GREEN = 0x20 # dark green.
+BACKGROUND_DARKSKYBLUE = 0x30 # dark skyblue.
+BACKGROUND_DARKRED = 0x40 # dark red.
+BACKGROUND_DARKPINK = 0x50 # dark pink.
+BACKGROUND_DARKYELLOW = 0x60 # dark yellow.
+BACKGROUND_DARKWHITE = 0x70 # dark white.
+BACKGROUND_DARKGRAY = 0x80 # dark gray.
+BACKGROUND_BLUE = 0x90 # blue.
+BACKGROUND_GREEN = 0xa0 # green.
+BACKGROUND_SKYBLUE = 0xb0 # skyblue.
+BACKGROUND_RED = 0xc0 # red.
+BACKGROUND_PINK = 0xd0 # pink.
+BACKGROUND_YELLOW = 0xe0 # yellow.
+BACKGROUND_WHITE = 0xf0 # white.
+
+# get handle
+std_out_handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
+
+def set_cmd_text_color(color, handle=std_out_handle):
+	Bool = ctypes.windll.kernel32.SetConsoleTextAttribute(handle, color)
+	return Bool
+
+#reset white
+def resetColor():
+	set_cmd_text_color(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE)
+	return
+
+#暗红色
+#dark red
+def printDarkRed(mess):
+	set_cmd_text_color(FOREGROUND_DARKRED)
+	sys.stdout.write(mess)
+	resetColor()
+	return
+
+#红色
+#red
+def printRed(mess, newLine=True):
+	set_cmd_text_color(FOREGROUND_RED)
+	sys.stdout.write(mess)
+	if newLine:
+		sys.stdout.write("\n")
+	resetColor()
+	return
+	
+####################################################################################################
+
+cfg = ConfigParser.ConfigParser()
+if os.path.exists("config2.ini"):
+	cfg.read("config2.ini")
+else:
+	cfg.read("config.ini")
+ClientRootPath = cfg.get("config", "ClientRootPath")
+ServerRootPath = cfg.get("config", "ServerRootPath")
+
+print "ClientRootPath: %s" % ClientRootPath
+print "ServerRootPath: %s" % ServerRootPath
+
+ClientRootPathList = [ClientRootPath]
+for i in xrange(1, 6):
+	if not cfg.has_option("config", "ClientRootPath%s" % i):
+		break
+	ClientRootPathEx = cfg.get("config", "ClientRootPath%s" % i)
+	ClientRootPathList.append(ClientRootPathEx)
+	
+ServerRootPathList = [ServerRootPath]
+for i in xrange(1, 6):
+	if not cfg.has_option("config", "ServerRootPath%s" % i):
+		break
+	serverRootPathEx = cfg.get("config", "ServerRootPath%s" % i)
+	ServerRootPathList.append(serverRootPathEx)
+if len(ServerRootPathList) > 1:
+	print "ServerRootPathList: %s" % ServerRootPathList
+
+ExportSign = ["C", "G", "S", "M", ""]
+def GetExportSign(value):
+	exportSign = ""
+	upperSign = value.upper().replace(" ", "")
+	for s in upperSign:
+		if s not in ExportSign or s in exportSign:
+			return None
+		exportSign += s
+	return upperSign
+
+Encoding = "gbk"
+EncodingSpec = eval(cfg.get("config", "EncodingSpec"))
+
+def DoExportCfgFile(fileName, exportInfo):
+	encoding = Encoding
+	for e, f in EncodingSpec.items():
+		if fileName in f:
+			encoding = e
+			break
+	sys.setdefaultencoding(encoding)
+	print "----------------------------"
+	filePath = exportInfo[0]
+	clientPath = exportInfo[1]
+	clientFileName = exportInfo[2]
+	serverPath = exportInfo[3]
+	serverFileName = exportInfo[4]
+	pkInfo = exportInfo[5]
+			
+	exportContent = __GetFileExportContent(filePath, pkInfo)
+	if not exportContent:
+		return
+	gServerCfg, mServerCfg, serverCfg, clientCfg = exportContent
+	
+	if not gServerCfg and not mServerCfg and not serverCfg and not clientCfg:
+		printRed("配置文件无效!%s" % (filePath))
+		return
+	
+	print "开始导表: %s" % filePath
+	# unicode中的‘\xa0’字符在转换成gbk编码时会出现问题,gbk无法转换'\xa0'字符
+	# 所以,在转换的时候必需进行一些前置动作 string.replace(u'\xa0', u' ') 
+	if gServerCfg:
+		for ServerRootPath in ServerRootPathList:
+			gServerCfgName = ServerRootPath + "\CoreServerGroup\GameServer\PySysDB" + "\%s.txt" % serverFileName
+			fp = open(gServerCfgName, "w")
+			for c in gServerCfg:
+				fp.write("%s\n" % (c.replace(u'\xa0', u' ')))
+			fp.close()
+			print "导出GameServer: %s" % gServerCfgName
+		
+	if mServerCfg:
+		for ServerRootPath in ServerRootPathList:
+			mServerCfgName = ServerRootPath + "\db\PyMongoDataServer\PySysDB" + "\%s.txt" % serverFileName
+			fp = open(mServerCfgName, "w")
+			for c in mServerCfg:
+				fp.write("%s\n" % (c.replace(u'\xa0', u' ')))
+			fp.close()
+			print "导出MapServer: %s" % mServerCfgName
+			
+	if serverCfg:
+		for ServerRootPath in ServerRootPathList:
+			serverCfgName = ServerRootPath + serverPath + "\%s.txt" % serverFileName
+			fp = open(serverCfgName, "w")
+			for c in serverCfg:
+				fp.write("%s\n" % (c.replace(u'\xa0', u' ')))
+			fp.close()
+			print "导出服务端: %s" % serverCfgName
+			
+	if clientCfg:
+		for ClientRootPath in ClientRootPathList:
+			sys.setdefaultencoding("utf8") # 前端默认编码
+			clientCfgName = ClientRootPath + clientPath + "\%s.txt" % clientFileName
+			fp = open(clientCfgName, "w")
+			for c in clientCfg:
+				fp.write("%s\n" % (c.replace(u'\xa0', u' ')))
+			fp.close()
+			print "导出客户端: %s" % clientCfgName
+		
+	return True
+
+def __GetFileExportContent(filePath, pkInfo):
+	gServerCfg = []
+	mServerCfg = []
+	serverCfg = []
+	clientCfg = []
+	gServerCfgColList = [] # gameServer服务端配置所需要的列索引列表
+	mServerCfgColList = [] # mapServer服务端配置所需要的列索引列表 - 额外的
+	serverCfgColList = [] # 服务端配置所需要的列索引列表
+	clientCfgColList = [] # 客户端配置所需要的列索引列表
+	gServerCfgRowList = [] # gameServer服务端配置所需要的行索引列表
+	mServerCfgRowList = [] # mapServer服务端配置所需要的行索引列表 - 额外的
+	serverCfgRowList = [] # 服务端配置所需要的行索引列表
+	clientCfgRowList = [] # 客户端配置所需要的行索引列表
+	
+	data = xlrd.open_workbook(filePath)
+	table = data.sheet_by_index(0) # 默认只解析第一张工作表
+	nrows = table.nrows # 行数
+	ncols = table.ncols # 列数
+	if not nrows or not ncols:
+		printRed("配置文件无数据!%s" % (filePath))
+		return
+	
+	# 找出需要导出的列, SC配置需要做精确匹配
+	firstRowValuesList = table.row_values(0) # 第一行
+	for col, value in enumerate(firstRowValuesList):
+		if not (isinstance(value, unicode) or isinstance(value, str)):
+			continue
+		upperValue = GetExportSign(value)
+		if upperValue == None:
+			continue
+		if "G" in upperValue:
+			gServerCfgColList.append(col)
+		if "M" in upperValue:
+			mServerCfgColList.append(col)
+		if "S" in upperValue:
+			serverCfgColList.append(col)
+		if "C" in upperValue:
+			clientCfgColList.append(col)
+		
+	# 找出需要导出的行, SC配置需要做精确匹配
+	firstColValuesList = table.col_values(0) # 第一列
+	for row, value in enumerate(firstColValuesList):
+		if not (isinstance(value, unicode) or isinstance(value, str)):
+			continue
+		upperValue = GetExportSign(value)
+		if upperValue == None:
+			continue
+		if "G" in upperValue:
+			gServerCfgRowList.append(row)
+		if "M" in upperValue:
+			mServerCfgRowList.append(row)
+		if "S" in upperValue:
+			serverCfgRowList.append(row)
+		if "C" in upperValue:
+			clientCfgRowList.append(row)
+			
+	# 最多只导一列的,这种表第一列为导出行配置
+	if ncols > 1 and (not gServerCfgColList or gServerCfgColList == [0]) and (not mServerCfgColList or mServerCfgColList == [0]) \
+		and (not serverCfgColList or serverCfgColList == [0]) and (not clientCfgColList or clientCfgColList == [0]):
+		gServerCfgColList = []
+		mServerCfgColList = []
+		serverCfgColList = []
+		clientCfgColList = []
+		
+	# 最多只导一行的,这种表第一行为导出列配置
+	if (not gServerCfgRowList or gServerCfgRowList == [0]) and (not mServerCfgRowList or mServerCfgRowList == [0]) \
+		and (not serverCfgRowList or serverCfgRowList == [0]) and (not clientCfgRowList or clientCfgRowList == [0]):
+		gServerCfgRowList = []
+		mServerCfgRowList = []
+		serverCfgRowList = []
+		clientCfgRowList = []
+	
+	# 1-第一行为导出SC配置;2-第一列为导出SC配置;3-第一行列均为导出SC配置
+	if (gServerCfgColList or mServerCfgColList or serverCfgColList or clientCfgColList) \
+		and (gServerCfgRowList or mServerCfgRowList or serverCfgRowList or clientCfgRowList):
+		exportType = 3 # 行列导出,首行首列为导出配置
+	elif gServerCfgColList or mServerCfgColList or serverCfgColList or clientCfgColList:
+		exportType = 1 # 按列导出,首行为导出配置
+	elif gServerCfgRowList or mServerCfgRowList or serverCfgRowList or clientCfgRowList:
+		exportType = 2 # 按行导出,首列为导出配置
+		# 当仅首列为SC配置时,导出的列为除了首列外的全部
+		gServerCfgColList = range(1, ncols)
+		mServerCfgColList = range(1, ncols)
+		serverCfgColList = range(1, ncols)
+		clientCfgColList = range(1, ncols)
+	else:
+		printRed('文件导出客户端服务端SC配置错误!仅可以设定%s中的一种或多种组合!' % ExportSign)
+		return
+	
+	isFirstRowSC = exportType in [1, 3] # 首行是否SC导出配置
+
+	cfgKeyList = [] # 所有配置数据的主键key列表, 用于判断是否重复key
+	pkFormat = ""
+	pkColList = [] # 主键组合字段列索引
+	pkList = pkInfo.split("|")
+	for i, pk in enumerate(pkList):
+		pkList[i] = pk.upper()
+	# 字段名行
+	fieldRow = 2 if isFirstRowSC else 1
+	fieldRowValuesList = table.row_values(fieldRow) # 字段名行
+	for col, value in enumerate(fieldRowValuesList):
+		if value.upper() in pkList:
+			pkColList.append(col)
+			pkFormat += "%s=%%s, " % value
+			
+	# 当行为SC配置时, 服务端特殊行编号1,3行不导; 列为SC配置时,由列直接配上去, 这里就不再做处理
+	serverIgnoreRow = [1, 3] if isFirstRowSC else [] # gameServer通用
+	
+	gServerFormat = "%s" + "\t%s"*(len(gServerCfgColList) - 1)
+	mServerFormat = "%s" + "\t%s"*(len(mServerCfgColList) - 1)
+	serverFormat = "%s" + "\t%s"*(len(serverCfgColList) - 1)
+	clientFormat = "%s" + "\t%s"*(len(clientCfgColList) - 1)
+	
+	for row in xrange(nrows):
+		# 首行为SC配置时不导
+		if row == 0 and isFirstRowSC:
+			continue
+		
+		rowValuesList = table.row_values(row)
+		# 浮点型转为int
+		for i, v in enumerate(rowValuesList):
+			if type(v) != float:
+				continue
+			intV = int(v)
+			if intV == v:
+				rowValuesList[i] = intV
+				
+		isAdd = False
+		if (exportType == 1 or row in gServerCfgRowList) and row not in serverIgnoreRow and gServerCfgColList:
+			isAdd = True
+			gServerCfg.append(gServerFormat % tuple([rowValuesList[i] for i in gServerCfgColList]))
+
+		if (exportType == 1 or row in mServerCfgRowList) and row not in serverIgnoreRow and mServerCfgColList:
+			isAdd = True
+			mServerCfg.append(mServerFormat % tuple([rowValuesList[i] for i in mServerCfgColList]))
+
+		if (exportType == 1 or row in serverCfgRowList) and row not in serverIgnoreRow and serverCfgColList:
+			isAdd = True
+			serverCfg.append(serverFormat % tuple([rowValuesList[i] for i in serverCfgColList]))
+
+		if (exportType == 1 or row in clientCfgRowList) and clientCfgColList:
+			isAdd = True
+			# 替换导出到客户端用的公式运算符
+			for col, cfgStr in enumerate(rowValuesList):
+				cfgFormula = __RepalceClientCfgFormula(cfgStr)
+				if cfgFormula is None:
+					printRed("替换公式失败!第%s行,第%s列。" % (row + 1, col + 1))
+					return
+				rowValuesList[col] = cfgFormula
+			clientCfg.append(clientFormat % tuple([rowValuesList[i] for i in clientCfgColList]))
+			
+		if isAdd and pkColList:
+			cfgKey = pkFormat % tuple([rowValuesList[pkCol] for pkCol in pkColList])
+			if cfgKey in cfgKeyList:
+				printRed("%s Key重复:%s, 第%s行。" % (filePath, cfgKey, row + 1))
+				return
+			cfgKeyList.append(cfgKey)
+			
+	return gServerCfg, mServerCfg, serverCfg, clientCfg
+
+def __RepalceClientCfgFormula(formula):
+	# 替换导出到客户端用的公式, 只做运算符替换即可
+	if type(formula) not in [str, unicode]:
+		return formula
+	if "(" not in formula and ")" not in formula:
+		return formula
+	if u"(" in formula or u")" in formula:
+		printRed("公式中请使用英文括号: %s" % formula)
+		return
+	#print "初始: len=%s, %s" % (len(formula), formula)
+	formula = formula.replace(" ", "")
+	formula = formula.replace("random.random()", "(0;1)")
+	start = 0
+	doCnt = 0
+	while doCnt < 1000:
+		doCnt += 1
+		#print "    %s, %s" % (start, formula)
+		right = formula.find(")", start)
+		if right == -1:
+			if "min(" in formula or "max(" in formula or "math.ceil(" in formula or "int(" in formula \
+				or "math.sqrt(" in formula or "pow(" in formula or "random.randint(" in formula:
+				start = 0 # 从头开始
+				continue
+			else:
+				#print "没有可替换的运算符了"
+				break
+			
+		f = None
+		if f == None:
+			f = __DoReplacePyFunc(formula, right, "min(", 2, "{<[%s!%s]>}")
+		if f == None:
+			f = __DoReplacePyFunc(formula, right, "max(", 2, "{<[%s@%s]>}")
+		if f == None:
+			f = __DoReplacePyFunc(formula, right, "random.randint(", 2, "{<[%s~%s]>}") # 需在int之前处理
+		if f == None:
+			f = __DoReplacePyFunc(formula, right, "int(", 1, "{<[%s#]>}")
+		if f == None:
+			f = __DoReplacePyFunc(formula, right, "math.ceil(", 1, "{<[%s$]>}")
+		if f == None:
+			f = __DoReplacePyFunc(formula, right, "math.sqrt(", 1, "{<[%s&]>}")
+		if f == None:
+			f = __DoReplacePyFunc(formula, right, "pow(", 2, "{<[%s^%s]>}")
+		
+		# 都找不到匹配的函数情况下,就是纯粹的()括起来加强运算优先级的,先替换为{<[]>},之后再统一换回去
+		if f == None:
+			f = __DoReplacePyFunc(formula, right, "(", 1, "{<[%s]>}")
+		
+		if f != None:
+			formula = f
+		start = right + 1
+	if doCnt >= 1000:
+		printRed("替换公式执行次数异常: %s" % formula)
+		return
+	
+	formula = formula.replace("{<[", "(")
+	formula = formula.replace("]>}", ")")
+	#print "替换结果: %s" % formula
+	return formula
+
+def __DoReplacePyFunc(formula, right, funcStr, funcParamCnt, replaceStr):
+	## 替换py运算函数为客户端可用格式
+	left = formula.rfind(funcStr, 0, right) # 从后往前找出第一个匹配的函数
+	if left == -1:
+		return
+	pyFuncStr = formula[left:right + 1]
+	paramStr = pyFuncStr[len(funcStr):-1]
+	if "(" in paramStr or ")" in paramStr:
+		#print "    函数参数内容里有多余括号不处理: %s, %s" % (pyFuncStr, paramStr)
+		return
+	
+	# 没有参数的py函数在开始直接精准替换,如 random.random()
+	if funcParamCnt == 2:
+		commaIndex = paramStr.find(",") # 逗号索引
+		return formula.replace(pyFuncStr, replaceStr % (paramStr[:commaIndex], paramStr[commaIndex + 1:]))
+	elif funcParamCnt == 1:
+		return formula.replace(pyFuncStr, replaceStr % paramStr)
+	
+	return
+
+def Main():
+	print 'Number of arguments:', len(sys.argv), 'arguments.'
+	# 元素0为自身模块名,不处理,从元素1开始处理
+	reload(sys)
+	sys.setdefaultencoding(Encoding)
+	
+	exportDict = {}
+	for filePath in sys.argv[1:]:
+		
+		fileBaseName = os.path.basename(filePath) # 文件名,含扩展名
+		fileExtension = os.path.splitext(filePath)[-1] # 扩展名
+		fileName = fileBaseName.replace(fileExtension, "") # 不含扩展名
+		
+		# 只处理excel文件
+		if "xls" not in fileExtension:
+			printRed("不处理该文件,暂时只导excel文件!%s" % filePath)
+			continue
+		exportDict[fileName] = filePath
+		
+	clientFileNameList = []
+	serverFileNameList = []
+	exportInfoDict = {}
+	exportMapFile = open("TableExportMap.txt", 'r')
+	for line in exportMapFile.readlines():
+		#if not exportDict:
+		#    break
+		exportMapInfo = line.split('\t')
+		fileName = exportMapInfo[0]
+		clientFileName = exportMapInfo[2]
+		serverFileName = exportMapInfo[4]
+		
+		if clientFileName in clientFileNameList:
+			printRed("导出前端文件名重复!%s -> %s" % (fileName, clientFileName))
+			return
+		if clientFileName and clientFileName != "-":
+			clientFileNameList.append(clientFileName)
+			
+		if serverFileName in serverFileNameList:
+			printRed("导出服务端文件名重复!%s -> %s" % (fileName, serverFileName))
+			return
+		if serverFileName and serverFileName != "-":
+			serverFileNameList.append(serverFileName)
+			
+		if fileName not in exportDict:
+			continue
+		filePath = exportDict.pop(fileName)
+		exportInfoDict[fileName] = [filePath] + exportMapInfo[1:]
+	exportMapFile.close()
+	
+	if exportDict:
+		for filePath in exportDict.values():
+			printRed("请配置配置表导出路径!%s" % filePath)
+		return
+	
+	exportCount = 0
+	for fileName, exportInfo in exportInfoDict.items():
+		if not DoExportCfgFile(fileName, exportInfo):
+			printRed("导表失败! %s" % filePath)
+			break
+		exportCount += 1
+		
+	print "----------------------------"
+	print "成功导表数: %s" % exportCount
+	print "----------------------------"
+	return
+
+if __name__ == "__main__":
+	Main()
+	
\ No newline at end of file
diff --git "a/Tool/\351\205\215\347\275\256\345\257\274\350\241\250\345\267\245\345\205\267/readme.txt" "b/Tool/\351\205\215\347\275\256\345\257\274\350\241\250\345\267\245\345\205\267/readme.txt"
new file mode 100644
index 0000000..155c24d
--- /dev/null
+++ "b/Tool/\351\205\215\347\275\256\345\257\274\350\241\250\345\267\245\345\205\267/readme.txt"
@@ -0,0 +1,34 @@
+------------------------------------------------------------------
+本工具使用python开发,所以如果没有安装python的请先安装python
+已安装python的请安装下python解析excel所需要的工具
+详细安装说明及安装所需要的文件请参考文件夹【excel解析安装】
+------------------------------------------------------------------
+
+【配置导表工具使用说明】
+
+1. 修改 config.ini 中的导出到目标项目根路径配置
+
+2. 新增/修改配置导出表对应客户端服务端路径 TableExportMap.txt
+   新增导出配置时,只要在此文件增加一行记录即可
+   目前导出的文件名客户端服务端相同
+   主键字段组合: 
+		如果需要判断key是否重复,可通过配置主键字段组合,多个字段组成唯一主键的通过“|”号隔开
+		如果不需要判断key是否重复的,则直接配置“-”即可,不含双引号
+   
+3. 拖动母表到 “拖动配表到此导出.bat” 等待导出配置完成即可
+
+4. 建议批处理文件在桌面创建个快捷方式,方便拖动批量导表
+
+注:
+·导出的数据内容只能放在excel第一个数据表中
+·行列均支持配置导出的“g” 或 “s” 或 “m” 或 “c”,如果行列均需要配置sc,则表格的第一个单元格需放空,
+	g或G	-	该行或列导出到GameServer
+	s或S	-	该行或列导出到MapServer
+	m或M	-	该行或列导出到MapServer,原SysDB下的表可配置导出M导出到PySysDB下使用python读表
+	c或C	-	该行或列导出到Client
+	不导出该行列则配置放空
+·代表导出到客户端或者服务端的行列中如果为空,则不会导出该行或列
+	即策划表可添加一些策划自己用的行或列数据,如一些说明之类的内容
+
+【详细配置可参考 “示例表行.xlsx” 等示例配置】
+------------------------------------------------------------------
\ No newline at end of file
diff --git "a/Tool/\351\205\215\347\275\256\345\257\274\350\241\250\345\267\245\345\205\267/\346\213\226\345\212\250\351\205\215\350\241\250\345\210\260\346\255\244\345\257\274\345\207\272.bat" "b/Tool/\351\205\215\347\275\256\345\257\274\350\241\250\345\267\245\345\205\267/\346\213\226\345\212\250\351\205\215\350\241\250\345\210\260\346\255\244\345\257\274\345\207\272.bat"
new file mode 100644
index 0000000..2cc89ba
--- /dev/null
+++ "b/Tool/\351\205\215\347\275\256\345\257\274\350\241\250\345\267\245\345\205\267/\346\213\226\345\212\250\351\205\215\350\241\250\345\210\260\346\255\244\345\257\274\345\207\272.bat"
@@ -0,0 +1,10 @@
+cd %~dp0
+@echo off
+setlocal enabledelayedexpansion
+set str=
+for %%i in (%*) do (set str=!str! %%i)
+::echo !str!
+
+python gamecfg_export.py !str!
+
+pause
\ No newline at end of file
diff --git "a/Tool/\351\205\215\347\275\256\345\257\274\350\241\250\345\267\245\345\205\267/\347\244\272\344\276\213\350\241\250\345\210\227.xlsx" "b/Tool/\351\205\215\347\275\256\345\257\274\350\241\250\345\267\245\345\205\267/\347\244\272\344\276\213\350\241\250\345\210\227.xlsx"
new file mode 100644
index 0000000..5ae1fcc
--- /dev/null
+++ "b/Tool/\351\205\215\347\275\256\345\257\274\350\241\250\345\267\245\345\205\267/\347\244\272\344\276\213\350\241\250\345\210\227.xlsx"
Binary files differ
diff --git "a/Tool/\351\205\215\347\275\256\345\257\274\350\241\250\345\267\245\345\205\267/\347\244\272\344\276\213\350\241\250\350\241\214.xlsx" "b/Tool/\351\205\215\347\275\256\345\257\274\350\241\250\345\267\245\345\205\267/\347\244\272\344\276\213\350\241\250\350\241\214.xlsx"
new file mode 100644
index 0000000..1fe9c36
--- /dev/null
+++ "b/Tool/\351\205\215\347\275\256\345\257\274\350\241\250\345\267\245\345\205\267/\347\244\272\344\276\213\350\241\250\350\241\214.xlsx"
Binary files differ
diff --git "a/Tool/\351\205\215\347\275\256\345\257\274\350\241\250\345\267\245\345\205\267/\347\244\272\344\276\213\350\241\250\350\241\214\345\210\227.xlsx" "b/Tool/\351\205\215\347\275\256\345\257\274\350\241\250\345\267\245\345\205\267/\347\244\272\344\276\213\350\241\250\350\241\214\345\210\227.xlsx"
new file mode 100644
index 0000000..5cb1e19
--- /dev/null
+++ "b/Tool/\351\205\215\347\275\256\345\257\274\350\241\250\345\267\245\345\205\267/\347\244\272\344\276\213\350\241\250\350\241\214\345\210\227.xlsx"
Binary files differ

--
Gitblit v1.8.0