From e5353bd8a09e4a134ad18f0a8855770669cf43bb Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 03 九月 2025 15:22:55 +0800
Subject: [PATCH] 198 【内政】淘金系统-服务端

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/CTG.py                            |    4 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/Collections/CollectionDefine.py     |    3 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py                                |   15 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py                                |  278 +----
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py                            |  869 +++---------------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/LogicProcess/UserCtrlDB.py          |   21 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/Collections/DataServerPlayerData.py |  521 -----------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py                         |   28 
 /dev/null                                                                                                         |   47 -
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini                                        |   22 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/GoldRush.py                       |  112 ++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py                              |   83 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldRush.py                      |  631 +++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py                            |   10 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py                          |    4 
 PySysDB/PySysDBPY.h                                                                                               |   32 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py                        |   13 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py                  |    3 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                                   |   23 
 19 files changed, 1,127 insertions(+), 1,592 deletions(-)

diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index ca11eb2..72c2c88 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -3421,3 +3421,35 @@
 	DWORD		LVUPNeedTime;	//升级下一级所需所需秒
 	list		EquipColorRateList;	//产出装备品质概率列表,[0品质万分率, 1品质万分率, ...]
 };
+
+//淘金营地表
+
+struct GoldRushCamp
+{
+	BYTE		_CampID;
+	WORD		PanningUnlock;	//淘金次数解锁
+	list		MoneyUnlock;	//货币解锁,货币类型|货币值
+};
+
+//淘金监工表
+
+struct GoldRushWorker
+{
+	BYTE		_WorkerID;
+	WORD		PlayerLVUnlock;	//主公等级解锁
+	list		MoneyUnlock;	//货币解锁,货币类型|货币值
+};
+
+//淘金物品表
+
+struct GoldRushItem
+{
+	BYTE		_GoldID;	//淘金ID
+	DWORD		ItemID;		//物品ID
+	BYTE		ItemLV;		//物品等级
+	DWORD		ItemCount;	//物品个数
+	DWORD		RefreshWeight;	//常规刷新权重
+	BYTE		WorkerMax;	//监工上限
+	BYTE		NeedSeconds;	//耗时秒
+};
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
index 65c8a1e..47673ca 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -1592,29 +1592,29 @@
 PacketSubCMD_2=0x24
 PacketCallFunc_2=OnUseTreeLVUPTimeItem
 
-;福地
-[PlayerMineArea]
-ScriptName = Player\PlayerMineArea.py
+;淘金
+[PlayerGoldRush]
+ScriptName = Player\PlayerGoldRush.py
 Writer = hxp
 Releaser = hxp
 RegType = 0
 RegisterPackCount = 4
 
 PacketCMD_1=0xB0
-PacketSubCMD_1=0x30
-PacketCallFunc_1=OnMineItemPull
+PacketSubCMD_1=0x36
+PacketCallFunc_1=OnGoldRushOP
 
 PacketCMD_2=0xB0
-PacketSubCMD_2=0x31
-PacketCallFunc_2=OnMineItemRefresh
+PacketSubCMD_2=0x37
+PacketCallFunc_2=OnGoldRushUnlock
 
 PacketCMD_3=0xB0
-PacketSubCMD_3=0x32
-PacketCallFunc_3=OnMineWorkerEmploy
+PacketSubCMD_3=0x38
+PacketCallFunc_3=OnGoldRushWarehouseAward
 
 PacketCMD_4=0xB0
-PacketSubCMD_4=0x35
-PacketCallFunc_4=OnMineHouseKeeperFreeUse
+PacketSubCMD_4=0x39
+PacketCallFunc_4=OnGoldRushAutoFreeUse
 
 ;仙盟攻城战
 [PlayerActFamilyGCZ]
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 12deb63..d3866f5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -2008,11 +2008,6 @@
 #镜像切磋
 Def_FBMapID_MirrorBattle = 100
 
-#回合战斗自定义地图ID
-TurnFightMapIDList = (
-Def_TFMapID_MineArea, # 福地 1
-) = range(1, 1 + 1)
-
 #前端自定义场景地图
 ClientCustomSceneList = [Def_FBMapID_PersonalBoss, Def_FBMapID_ArenaBattle, Def_FBMapID_MirrorBattle]
 
@@ -4179,15 +4174,15 @@
 Def_PDict_TaskValue = "TaskValue_%s" # 当前进行中的任务进度,参数(任务组)
 Def_PDict_TaskState = "TaskState_%s" # 当前进行中的任务状态 0-无;1-进行中;2-已完成,参数(任务组)
 
-#福地
-Def_PDict_MineWorkerCount = "MineWorkerCount" # 已雇佣工人数
-Def_PDict_MineWorkerEnergyUsed = "MineWorkerEnergyUsed" # 今日已消耗体力
-Def_PDict_MineHousekeeperEndTime = "MineHousekeeperEndTime" # 自动管家到期时间戳
-Def_PDict_MineHelpAwardCount = "MineHelpAwardCount" # 今日已帮助别人奖励次数
-Def_PDict_MineRefreshCount = "MineRefreshCount_%s" # 今日已刷新次数,参数(刷新类型)
-Def_PDict_MineTreasureState = "MineTreasureState" # 聚宝盆激活状态,按类型位运算记录是否已激活
-Def_PDict_MineTreasureAward = "MineTreasureAward" # 聚宝盆奖励状态,按类型位运算记录是否已领取
-Def_PDict_MineTreasureProgess = "MineTreasureProgess_%s" # 聚宝盆进度值,参数(聚宝盆类型)
+#淘金
+Def_PDict_GoldRushCampState = "GoldRushCampState" # 已解锁营地状态,按营地ID二进制位运算判断是否已解锁
+Def_PDict_GoldRushWorkerState = "GoldRushWorkerState" # 已雇佣工人数状态,按监工ID二进制位运算判断是否已解锁
+Def_PDict_GoldRushCnt = "GoldRushCnt" # 已淘金次数
+Def_PDict_GoldRushCampInfo = "GoldRushCampInfo_%s" # 营地当前淘金信息: 已刷新次数*1000+淘金ID*10+派遣工人数,0时代表当前营地为空,参数(营地ID)
+Def_PDict_GoldRushCampEndTime = "GoldRushCampEndTime_%s" # 营地淘金结束时间戳,为0时代表未开始淘金,参数(营地ID)
+Def_PDict_GoldRushWarehouse = "GoldRushWarehouse_%s" # 仓库完成淘金ID,参数(仓库位置索引)
+Def_PDict_GoldRushRecoverTime = "GoldRushRecoverTime" # 上次恢复淘金令时间戳
+Def_PDict_GoldRushAutoEndTime = "GoldRushAutoEndTime" # 自动淘金到期时间戳
 
 #仙宫
 Def_PDict_XiangongLikeState = "XiangongLikeState_%s" # 指定仙宫今日是否已点赞,参数(仙宫ID),仙宫ID为0时代表每日的仙宫功能点赞
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index 82a2cc6..75cb095 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -13353,62 +13353,6 @@
 
 
 #------------------------------------------------------
-# B0 50 钓鱼收杆 #tagCMDoFish
-
-class  tagCMDoFish(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("FishNum", c_ubyte),    # 钓鱼编号1~N
-                  ("PosIndex", c_ubyte),    # 停留位置1~N
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB0
-        self.SubCmd = 0x50
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xB0
-        self.SubCmd = 0x50
-        self.FishNum = 0
-        self.PosIndex = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMDoFish)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B0 50 钓鱼收杆 //tagCMDoFish:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                FishNum:%d,
-                                PosIndex:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.FishNum,
-                                self.PosIndex
-                                )
-        return DumpString
-
-
-m_NAtagCMDoFish=tagCMDoFish()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMDoFish.Cmd,m_NAtagCMDoFish.SubCmd))] = m_NAtagCMDoFish
-
-
-#------------------------------------------------------
 # B0 15 接收协助感谢礼物 #tagCGGetAssistThanksGift
 
 class  tagCGGetAssistThanksGift(Structure):
@@ -13461,9 +13405,9 @@
 
 
 #------------------------------------------------------
-# B0 34 福地请求结算奖励 #tagCGMineAreaAwardGet
+# B0 39 自动淘金免费使用 #tagCSGoldRushAutoFreeUse
 
-class  tagCGMineAreaAwardGet(Structure):
+class  tagCSGoldRushAutoFreeUse(Structure):
     _pack_ = 1
     _fields_ = [
                   ("Cmd", c_ubyte),
@@ -13473,7 +13417,7 @@
     def __init__(self):
         self.Clear()
         self.Cmd = 0xB0
-        self.SubCmd = 0x34
+        self.SubCmd = 0x39
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -13483,17 +13427,17 @@
 
     def Clear(self):
         self.Cmd = 0xB0
-        self.SubCmd = 0x34
+        self.SubCmd = 0x39
         return
 
     def GetLength(self):
-        return sizeof(tagCGMineAreaAwardGet)
+        return sizeof(tagCSGoldRushAutoFreeUse)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''// B0 34 福地请求结算奖励 //tagCGMineAreaAwardGet:
+        DumpString = '''// B0 39 自动淘金免费使用 //tagCSGoldRushAutoFreeUse:
                                 Cmd:%s,
                                 SubCmd:%s
                                 '''\
@@ -13504,26 +13448,27 @@
         return DumpString
 
 
-m_NAtagCGMineAreaAwardGet=tagCGMineAreaAwardGet()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGMineAreaAwardGet.Cmd,m_NAtagCGMineAreaAwardGet.SubCmd))] = m_NAtagCGMineAreaAwardGet
+m_NAtagCSGoldRushAutoFreeUse=tagCSGoldRushAutoFreeUse()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCSGoldRushAutoFreeUse.Cmd,m_NAtagCSGoldRushAutoFreeUse.SubCmd))] = m_NAtagCSGoldRushAutoFreeUse
 
 
 #------------------------------------------------------
-# B0 33 福地查看 #tagCGMineAreaView
+# B0 36 淘金操作 #tagCSGoldRushOP
 
-class  tagCGMineAreaView(Structure):
+class  tagCSGoldRushOP(Structure):
     _pack_ = 1
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("QueryType", c_ubyte),    # 查询同步类型:0-后端主动同步;1-查看指定福地;2-查看道友福地列表;3-查看周围随机福地列表;4-退出他人福地;5-查看记录
-                  ("QueryValue", c_int),    # 查询值,类型1时-发送目标玩家ID;3时-发送是否重新随机
+                  ("OPType", c_ubyte),    # 0-接受淘金;1-刷新淘金;2-开始淘金或调整监工数;3-取消淘金
+                  ("CampID", c_ubyte),    # 营地ID
+                  ("WorkerCnt", c_ubyte),    # 派遣监工数,仅类型2有效
                   ]
 
     def __init__(self):
         self.Clear()
         self.Cmd = 0xB0
-        self.SubCmd = 0x33
+        self.SubCmd = 0x36
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -13533,51 +13478,56 @@
 
     def Clear(self):
         self.Cmd = 0xB0
-        self.SubCmd = 0x33
-        self.QueryType = 0
-        self.QueryValue = 0
+        self.SubCmd = 0x36
+        self.OPType = 0
+        self.CampID = 0
+        self.WorkerCnt = 0
         return
 
     def GetLength(self):
-        return sizeof(tagCGMineAreaView)
+        return sizeof(tagCSGoldRushOP)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''// B0 33 福地查看 //tagCGMineAreaView:
+        DumpString = '''// B0 36 淘金操作 //tagCSGoldRushOP:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                QueryType:%d,
-                                QueryValue:%d
+                                OPType:%d,
+                                CampID:%d,
+                                WorkerCnt:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.QueryType,
-                                self.QueryValue
+                                self.OPType,
+                                self.CampID,
+                                self.WorkerCnt
                                 )
         return DumpString
 
 
-m_NAtagCGMineAreaView=tagCGMineAreaView()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGMineAreaView.Cmd,m_NAtagCGMineAreaView.SubCmd))] = m_NAtagCGMineAreaView
+m_NAtagCSGoldRushOP=tagCSGoldRushOP()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCSGoldRushOP.Cmd,m_NAtagCSGoldRushOP.SubCmd))] = m_NAtagCSGoldRushOP
 
 
 #------------------------------------------------------
-# B0 35 福地管家免费试用 #tagCMMineHouseKeeperFreeUse
+# B0 37 淘金解锁 #tagCSGoldRushUnlock
 
-class  tagCMMineHouseKeeperFreeUse(Structure):
+class  tagCSGoldRushUnlock(Structure):
     _pack_ = 1
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
+                  ("UnlockType", c_ubyte),    # 0-营地;1-监工
+                  ("UnlockID", c_ubyte),    # 解锁类型对应的ID
                   ]
 
     def __init__(self):
         self.Clear()
         self.Cmd = 0xB0
-        self.SubCmd = 0x35
+        self.SubCmd = 0x37
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -13587,110 +13537,53 @@
 
     def Clear(self):
         self.Cmd = 0xB0
-        self.SubCmd = 0x35
+        self.SubCmd = 0x37
+        self.UnlockType = 0
+        self.UnlockID = 0
         return
 
     def GetLength(self):
-        return sizeof(tagCMMineHouseKeeperFreeUse)
+        return sizeof(tagCSGoldRushUnlock)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''// B0 35 福地管家免费试用 //tagCMMineHouseKeeperFreeUse:
-                                Cmd:%s,
-                                SubCmd:%s
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd
-                                )
-        return DumpString
-
-
-m_NAtagCMMineHouseKeeperFreeUse=tagCMMineHouseKeeperFreeUse()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMineHouseKeeperFreeUse.Cmd,m_NAtagCMMineHouseKeeperFreeUse.SubCmd))] = m_NAtagCMMineHouseKeeperFreeUse
-
-
-#------------------------------------------------------
-# B0 30 福地物品拉 #tagCMMineItemPull
-
-class  tagCMMineItemPull(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("PlayerID", c_int),    # 福地所属玩家ID,0默认自己
-                  ("ItemIndex", c_ubyte),    # 物品所在位置索引0~n
-                  ("WorkerCount", c_ubyte),    # 上工人人数
-                  ("IsPreview", c_ubyte),    # 是否预览;0-直接拉,1-预览大概时间
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB0
-        self.SubCmd = 0x30
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xB0
-        self.SubCmd = 0x30
-        self.PlayerID = 0
-        self.ItemIndex = 0
-        self.WorkerCount = 0
-        self.IsPreview = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMMineItemPull)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B0 30 福地物品拉 //tagCMMineItemPull:
+        DumpString = '''// B0 37 淘金解锁 //tagCSGoldRushUnlock:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                PlayerID:%d,
-                                ItemIndex:%d,
-                                WorkerCount:%d,
-                                IsPreview:%d
+                                UnlockType:%d,
+                                UnlockID:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.PlayerID,
-                                self.ItemIndex,
-                                self.WorkerCount,
-                                self.IsPreview
+                                self.UnlockType,
+                                self.UnlockID
                                 )
         return DumpString
 
 
-m_NAtagCMMineItemPull=tagCMMineItemPull()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMineItemPull.Cmd,m_NAtagCMMineItemPull.SubCmd))] = m_NAtagCMMineItemPull
+m_NAtagCSGoldRushUnlock=tagCSGoldRushUnlock()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCSGoldRushUnlock.Cmd,m_NAtagCSGoldRushUnlock.SubCmd))] = m_NAtagCSGoldRushUnlock
 
 
 #------------------------------------------------------
-# B0 31 福地物品刷新 #tagCMMineItemRefresh
+# B0 38 淘金仓库领奖 #tagCSGoldRushWarehouseAward
 
-class  tagCMMineItemRefresh(Structure):
+class  tagCSGoldRushWarehouseAward(Structure):
     _pack_ = 1
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("RefreshType", c_ubyte),    # 刷新类型:0-自己物品普通刷新;1-自己物品超级刷新;2-周围福地玩家列表刷新
+                  ("AwardIndex", c_ubyte),    # 领奖位置索引,从0开始
+                  ("IsAll", c_ubyte),    # 是否领取所有
                   ]
 
     def __init__(self):
         self.Clear()
         self.Cmd = 0xB0
-        self.SubCmd = 0x31
+        self.SubCmd = 0x38
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -13700,80 +13593,35 @@
 
     def Clear(self):
         self.Cmd = 0xB0
-        self.SubCmd = 0x31
-        self.RefreshType = 0
+        self.SubCmd = 0x38
+        self.AwardIndex = 0
+        self.IsAll = 0
         return
 
     def GetLength(self):
-        return sizeof(tagCMMineItemRefresh)
+        return sizeof(tagCSGoldRushWarehouseAward)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''// B0 31 福地物品刷新 //tagCMMineItemRefresh:
+        DumpString = '''// B0 38 淘金仓库领奖 //tagCSGoldRushWarehouseAward:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                RefreshType:%d
+                                AwardIndex:%d,
+                                IsAll:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.RefreshType
+                                self.AwardIndex,
+                                self.IsAll
                                 )
         return DumpString
 
 
-m_NAtagCMMineItemRefresh=tagCMMineItemRefresh()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMineItemRefresh.Cmd,m_NAtagCMMineItemRefresh.SubCmd))] = m_NAtagCMMineItemRefresh
-
-
-#------------------------------------------------------
-# B0 32 福地工人雇佣 #tagCMMineWorkerEmploy
-
-class  tagCMMineWorkerEmploy(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB0
-        self.SubCmd = 0x32
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xB0
-        self.SubCmd = 0x32
-        return
-
-    def GetLength(self):
-        return sizeof(tagCMMineWorkerEmploy)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B0 32 福地工人雇佣 //tagCMMineWorkerEmploy:
-                                Cmd:%s,
-                                SubCmd:%s
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd
-                                )
-        return DumpString
-
-
-m_NAtagCMMineWorkerEmploy=tagCMMineWorkerEmploy()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMMineWorkerEmploy.Cmd,m_NAtagCMMineWorkerEmploy.SubCmd))] = m_NAtagCMMineWorkerEmploy
+m_NAtagCSGoldRushWarehouseAward=tagCSGoldRushWarehouseAward()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCSGoldRushWarehouseAward.Cmd,m_NAtagCSGoldRushWarehouseAward.SubCmd))] = m_NAtagCSGoldRushWarehouseAward
 
 
 #------------------------------------------------------
@@ -17310,7 +17158,7 @@
     _fields_ = [
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
-                  ("ReqType", c_ubyte),    # 0-停止战斗回城;1-设置消耗倍值;2-挑战关卡小怪;3-挑战关卡boss;4-继续战斗;
+                  ("ReqType", c_ubyte),    # 0-停止战斗回城;1-设置消耗倍值;2-挑战关卡小怪;4-继续战斗;
                   ("ReqValue", c_int),    # 请求值,ReqType为1时发送消耗倍值
                   ]
 
@@ -18391,10 +18239,10 @@
 
 class  tagCMTurnFight(Structure):
     Head = tagHead()
-    MapID = 0    #(DWORD MapID)// 自定义地图ID,可用于绑定战斗地图场景功能(如主线关卡、主线boss、爬塔、竞技场等)
+    MapID = 0    #(DWORD MapID)// 自定义地图ID,可用于绑定战斗地图场景功能(如主线boss、爬塔、竞技场等)
     FuncLineID = 0    #(DWORD FuncLineID)// MapID对应的扩展值,如具体某个关卡等
     TagType = 0    #(BYTE TagType)// 目标类型,0-NPC阵容,1-玩家
-    TagID = 0    #(DWORD TagID)// 目标类型对应的ID,如阵容ID或玩家ID
+    TagID = 0    #(DWORD TagID)// 目标类型对应的ID,如玩家ID
     ValueCount = 0    #(BYTE ValueCount)
     ValueList = list()    #(vector<DWORD> ValueList)// 附加值列表,可选,具体含义由MapID决定
     data = None
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index b2ec32a..36739b4 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -40077,54 +40077,6 @@
 
 
 #------------------------------------------------------
-# B0 50 收杆结果 #tagMCFishResult
-
-class  tagMCFishResult(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xB0
-        self.SubCmd = 0x50
-        return
-
-    def ReadData(self, stringData, _pos=0, _len=0):
-        self.Clear()
-        memmove(addressof(self), stringData[_pos:], self.GetLength())
-        return _pos + self.GetLength()
-
-    def Clear(self):
-        self.Cmd = 0xB0
-        self.SubCmd = 0x50
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCFishResult)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// B0 50 收杆结果 //tagMCFishResult:
-                                Cmd:%s,
-                                SubCmd:%s
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd
-                                )
-        return DumpString
-
-
-m_NAtagMCFishResult=tagMCFishResult()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFishResult.Cmd,m_NAtagMCFishResult.SubCmd))] = m_NAtagMCFishResult
-
-
-#------------------------------------------------------
 # B0 05 接收协助感谢礼物预览 #tagGCGetAssistThanksGiftPreview
 
 class  tagGCGetAssistThanksGiftPreview(Structure):
@@ -40280,568 +40232,20 @@
 
 
 #------------------------------------------------------
-# B0 34 福地结算奖励信息 #tagGCMineAreaAwardInfo
+# B0 37 淘金营地信息 #tagSCGoldRushCampInfo
 
-class  tagGCMineAreaAwardInfo(Structure):
-    Head = tagHead()
-    AwardType = 0    #(BYTE AwardType)// 0-通知有奖励,前端下次进入福地可请求进行结算;1-结算奖励结果通知
-    AwardLen = 0    #(BYTE AwardLen)
-    AwardInfo = ""    #(String AwardInfo)//奖励信息 [物品ID,个数,是否拍品], ...]
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB0
-        self.Head.SubCmd = 0x34
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.AwardType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.AwardLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.AwardInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.AwardLen)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB0
-        self.Head.SubCmd = 0x34
-        self.AwardType = 0
-        self.AwardLen = 0
-        self.AwardInfo = ""
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 1
-        length += len(self.AwardInfo)
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.AwardType)
-        data = CommFunc.WriteBYTE(data, self.AwardLen)
-        data = CommFunc.WriteString(data, self.AwardLen, self.AwardInfo)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                AwardType:%d,
-                                AwardLen:%d,
-                                AwardInfo:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.AwardType,
-                                self.AwardLen,
-                                self.AwardInfo
-                                )
-        return DumpString
-
-
-m_NAtagGCMineAreaAwardInfo=tagGCMineAreaAwardInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMineAreaAwardInfo.Head.Cmd,m_NAtagGCMineAreaAwardInfo.Head.SubCmd))] = m_NAtagGCMineAreaAwardInfo
-
-
-#------------------------------------------------------
-# B0 33 福地详细信息 #tagGCMineAreaInfo
-
-class  tagGCMineItem(Structure):
-    Index = 0    #(BYTE Index)// 矿物所在福地位置索引,0~n
-    MineID = 0    #(WORD MineID)// 矿物ID,对应福地采集表中ID,0代表该索引位置没有矿物
-    MineType = 0    #(BYTE MineType)// 矿物类型:0-常规;1-超级
-    UpdTime = 0    #(DWORD UpdTime)// 最后一次更新时间戳
-    PosLen = 0    #(BYTE PosLen)
-    Position = ""    #(String Position)// 最后一次更新时所在位置百分比,0~100,支持小数,下0上100,可认为分为100格,速度为 x格/秒
-    SpeedLen = 0    #(BYTE SpeedLen)
-    MoveSpeed = ""    #(String MoveSpeed)// 移动速度,x格/秒,支持小数
-    EndTime = 0    #(DWORD EndTime)// 拉取结束时间戳
-    WorkerCount = 0    #(BYTE WorkerCount)// 工人个数,为0时代表福地玩家没有使用工人拉回
-    RobPlayerID = 0    #(DWORD RobPlayerID)// 抢夺玩家ID,为0时代表没人抢夺
-    RobWorkerCount = 0    #(BYTE RobWorkerCount)// 抢夺工人个数
-    RobPlayerName = ""    #(char RobPlayerName[33])
-    RobJob = 0    #(BYTE RobJob)
-    RobFace = 0    #(DWORD RobFace)
-    RobFacePic = 0    #(DWORD RobFacePic)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.Index,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.MineID,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.MineType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.UpdTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.PosLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Position,_pos = CommFunc.ReadString(_lpData, _pos,self.PosLen)
-        self.SpeedLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.MoveSpeed,_pos = CommFunc.ReadString(_lpData, _pos,self.SpeedLen)
-        self.EndTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.WorkerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.RobPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.RobWorkerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.RobPlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
-        self.RobJob,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.RobFace,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.RobFacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.Index = 0
-        self.MineID = 0
-        self.MineType = 0
-        self.UpdTime = 0
-        self.PosLen = 0
-        self.Position = ""
-        self.SpeedLen = 0
-        self.MoveSpeed = ""
-        self.EndTime = 0
-        self.WorkerCount = 0
-        self.RobPlayerID = 0
-        self.RobWorkerCount = 0
-        self.RobPlayerName = ""
-        self.RobJob = 0
-        self.RobFace = 0
-        self.RobFacePic = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 1
-        length += 2
-        length += 1
-        length += 4
-        length += 1
-        length += len(self.Position)
-        length += 1
-        length += len(self.MoveSpeed)
-        length += 4
-        length += 1
-        length += 4
-        length += 1
-        length += 33
-        length += 1
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.Index)
-        data = CommFunc.WriteWORD(data, self.MineID)
-        data = CommFunc.WriteBYTE(data, self.MineType)
-        data = CommFunc.WriteDWORD(data, self.UpdTime)
-        data = CommFunc.WriteBYTE(data, self.PosLen)
-        data = CommFunc.WriteString(data, self.PosLen, self.Position)
-        data = CommFunc.WriteBYTE(data, self.SpeedLen)
-        data = CommFunc.WriteString(data, self.SpeedLen, self.MoveSpeed)
-        data = CommFunc.WriteDWORD(data, self.EndTime)
-        data = CommFunc.WriteBYTE(data, self.WorkerCount)
-        data = CommFunc.WriteDWORD(data, self.RobPlayerID)
-        data = CommFunc.WriteBYTE(data, self.RobWorkerCount)
-        data = CommFunc.WriteString(data, 33, self.RobPlayerName)
-        data = CommFunc.WriteBYTE(data, self.RobJob)
-        data = CommFunc.WriteDWORD(data, self.RobFace)
-        data = CommFunc.WriteDWORD(data, self.RobFacePic)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Index:%d,
-                                MineID:%d,
-                                MineType:%d,
-                                UpdTime:%d,
-                                PosLen:%d,
-                                Position:%s,
-                                SpeedLen:%d,
-                                MoveSpeed:%s,
-                                EndTime:%d,
-                                WorkerCount:%d,
-                                RobPlayerID:%d,
-                                RobWorkerCount:%d,
-                                RobPlayerName:%s,
-                                RobJob:%d,
-                                RobFace:%d,
-                                RobFacePic:%d
-                                '''\
-                                %(
-                                self.Index,
-                                self.MineID,
-                                self.MineType,
-                                self.UpdTime,
-                                self.PosLen,
-                                self.Position,
-                                self.SpeedLen,
-                                self.MoveSpeed,
-                                self.EndTime,
-                                self.WorkerCount,
-                                self.RobPlayerID,
-                                self.RobWorkerCount,
-                                self.RobPlayerName,
-                                self.RobJob,
-                                self.RobFace,
-                                self.RobFacePic
-                                )
-        return DumpString
-
-
-class  tagGCMineArea(Structure):
-    PlayerID = 0    #(DWORD PlayerID)// 福地所属玩家ID,可能是自己或其他玩家ID,当ID小于10000时为假人
-    PlayerName = ""    #(char PlayerName[33])// 可能为空,如自己或假人
-    Job = 0    #(BYTE Job)
-    Face = 0    #(DWORD Face)
-    FacePic = 0    #(DWORD FacePic)
-    RobValue = 0    #(DWORD RobValue)// 抢劫敌对值
-    MineCount = 0    #(BYTE MineCount)
-    MineItemList = list()    #(vector<tagGCMineItem> MineItemList)// 矿物列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
-        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.RobValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.MineCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.MineCount):
-            temMineItemList = tagGCMineItem()
-            _pos = temMineItemList.ReadData(_lpData, _pos)
-            self.MineItemList.append(temMineItemList)
-        return _pos
-
-    def Clear(self):
-        self.PlayerID = 0
-        self.PlayerName = ""
-        self.Job = 0
-        self.Face = 0
-        self.FacePic = 0
-        self.RobValue = 0
-        self.MineCount = 0
-        self.MineItemList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 4
-        length += 33
-        length += 1
-        length += 4
-        length += 4
-        length += 4
-        length += 1
-        for i in range(self.MineCount):
-            length += self.MineItemList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteDWORD(data, self.PlayerID)
-        data = CommFunc.WriteString(data, 33, self.PlayerName)
-        data = CommFunc.WriteBYTE(data, self.Job)
-        data = CommFunc.WriteDWORD(data, self.Face)
-        data = CommFunc.WriteDWORD(data, self.FacePic)
-        data = CommFunc.WriteDWORD(data, self.RobValue)
-        data = CommFunc.WriteBYTE(data, self.MineCount)
-        for i in range(self.MineCount):
-            data = CommFunc.WriteString(data, self.MineItemList[i].GetLength(), self.MineItemList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                PlayerID:%d,
-                                PlayerName:%s,
-                                Job:%d,
-                                Face:%d,
-                                FacePic:%d,
-                                RobValue:%d,
-                                MineCount:%d,
-                                MineItemList:%s
-                                '''\
-                                %(
-                                self.PlayerID,
-                                self.PlayerName,
-                                self.Job,
-                                self.Face,
-                                self.FacePic,
-                                self.RobValue,
-                                self.MineCount,
-                                "..."
-                                )
-        return DumpString
-
-
-class  tagGCMineAreaInfo(Structure):
-    Head = tagHead()
-    QueryType = 0    #(BYTE QueryType)// 查询同步类型:0-后端主动同步;1-查看指定福地;2-查看道友福地列表;3-查看周围随机福地列表
-    QueryValue = 0    #(DWORD QueryValue)// 查询值,类型1时-发送目标玩家ID;3时-发送是否重新随机
-    AreaCount = 0    #(BYTE AreaCount)
-    AreaList = list()    #(vector<tagGCMineArea> AreaList)// 福地列表
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB0
-        self.Head.SubCmd = 0x33
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.QueryType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.QueryValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.AreaCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.AreaCount):
-            temAreaList = tagGCMineArea()
-            _pos = temAreaList.ReadData(_lpData, _pos)
-            self.AreaList.append(temAreaList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB0
-        self.Head.SubCmd = 0x33
-        self.QueryType = 0
-        self.QueryValue = 0
-        self.AreaCount = 0
-        self.AreaList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        length += 4
-        length += 1
-        for i in range(self.AreaCount):
-            length += self.AreaList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.QueryType)
-        data = CommFunc.WriteDWORD(data, self.QueryValue)
-        data = CommFunc.WriteBYTE(data, self.AreaCount)
-        for i in range(self.AreaCount):
-            data = CommFunc.WriteString(data, self.AreaList[i].GetLength(), self.AreaList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                QueryType:%d,
-                                QueryValue:%d,
-                                AreaCount:%d,
-                                AreaList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.QueryType,
-                                self.QueryValue,
-                                self.AreaCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCMineAreaInfo=tagGCMineAreaInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMineAreaInfo.Head.Cmd,m_NAtagGCMineAreaInfo.Head.SubCmd))] = m_NAtagGCMineAreaInfo
-
-
-#------------------------------------------------------
-# B0 35 福地记录信息 #tagGCMineAreaRecordInfo
-
-class  tagGCMineAreaRecord(Structure):
-    RecordType = 0    #(BYTE RecordType)// 记录类型;1-自己拉物品;2-物品被人抢
-    TagPlayerID = 0    #(DWORD TagPlayerID)// 目标玩家ID,等于自己玩家ID时代表拉自己的,反之为抢别人的
-    RecordTime = 0    #(DWORD RecordTime)// 记录时间戳
-    MineID = 0    #(WORD MineID)// 矿物ID,对应福地采集表中ID
-    TagPlayerName = ""    #(char TagPlayerName[33])
-    TagJob = 0    #(BYTE TagJob)
-    TagFace = 0    #(DWORD TagFace)
-    TagFacePic = 0    #(DWORD TagFacePic)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        self.RecordType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.TagPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.RecordTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.MineID,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.TagPlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
-        self.TagJob,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.TagFace,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.TagFacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        return _pos
-
-    def Clear(self):
-        self.RecordType = 0
-        self.TagPlayerID = 0
-        self.RecordTime = 0
-        self.MineID = 0
-        self.TagPlayerName = ""
-        self.TagJob = 0
-        self.TagFace = 0
-        self.TagFacePic = 0
-        return
-
-    def GetLength(self):
-        length = 0
-        length += 1
-        length += 4
-        length += 4
-        length += 2
-        length += 33
-        length += 1
-        length += 4
-        length += 4
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.RecordType)
-        data = CommFunc.WriteDWORD(data, self.TagPlayerID)
-        data = CommFunc.WriteDWORD(data, self.RecordTime)
-        data = CommFunc.WriteWORD(data, self.MineID)
-        data = CommFunc.WriteString(data, 33, self.TagPlayerName)
-        data = CommFunc.WriteBYTE(data, self.TagJob)
-        data = CommFunc.WriteDWORD(data, self.TagFace)
-        data = CommFunc.WriteDWORD(data, self.TagFacePic)
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                RecordType:%d,
-                                TagPlayerID:%d,
-                                RecordTime:%d,
-                                MineID:%d,
-                                TagPlayerName:%s,
-                                TagJob:%d,
-                                TagFace:%d,
-                                TagFacePic:%d
-                                '''\
-                                %(
-                                self.RecordType,
-                                self.TagPlayerID,
-                                self.RecordTime,
-                                self.MineID,
-                                self.TagPlayerName,
-                                self.TagJob,
-                                self.TagFace,
-                                self.TagFacePic
-                                )
-        return DumpString
-
-
-class  tagGCMineAreaRecordInfo(Structure):
-    Head = tagHead()
-    RecordCount = 0    #(BYTE RecordCount)
-    AreaRecordList = list()    #(vector<tagGCMineAreaRecord> AreaRecordList)
-    data = None
-
-    def __init__(self):
-        self.Clear()
-        self.Head.Cmd = 0xB0
-        self.Head.SubCmd = 0x35
-        return
-
-    def ReadData(self, _lpData, _pos=0, _Len=0):
-        self.Clear()
-        _pos = self.Head.ReadData(_lpData, _pos)
-        self.RecordCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.RecordCount):
-            temAreaRecordList = tagGCMineAreaRecord()
-            _pos = temAreaRecordList.ReadData(_lpData, _pos)
-            self.AreaRecordList.append(temAreaRecordList)
-        return _pos
-
-    def Clear(self):
-        self.Head = tagHead()
-        self.Head.Clear()
-        self.Head.Cmd = 0xB0
-        self.Head.SubCmd = 0x35
-        self.RecordCount = 0
-        self.AreaRecordList = list()
-        return
-
-    def GetLength(self):
-        length = 0
-        length += self.Head.GetLength()
-        length += 1
-        for i in range(self.RecordCount):
-            length += self.AreaRecordList[i].GetLength()
-
-        return length
-
-    def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.RecordCount)
-        for i in range(self.RecordCount):
-            data = CommFunc.WriteString(data, self.AreaRecordList[i].GetLength(), self.AreaRecordList[i].GetBuffer())
-        return data
-
-    def OutputString(self):
-        DumpString = '''
-                                Head:%s,
-                                RecordCount:%d,
-                                AreaRecordList:%s
-                                '''\
-                                %(
-                                self.Head.OutputString(),
-                                self.RecordCount,
-                                "..."
-                                )
-        return DumpString
-
-
-m_NAtagGCMineAreaRecordInfo=tagGCMineAreaRecordInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMineAreaRecordInfo.Head.Cmd,m_NAtagGCMineAreaRecordInfo.Head.SubCmd))] = m_NAtagGCMineAreaRecordInfo
-
-
-#------------------------------------------------------
-# B0 32 福地物品拉预览结果 #tagGCMineItemPullPreviewRet
-
-class  tagGCMineItemPullPreviewRet(Structure):
+class  tagSCGoldRushCamp(Structure):
     _pack_ = 1
     _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("PlayerID", c_int),    # 福地所属玩家ID,0默认自己
-                  ("ItemIndex", c_ubyte),    # 物品所在位置索引0~n
-                  ("WorkerCount", c_ubyte),    # 上工人人数
-                  ("NeedSeconds", c_int),    # 预计需要时间,秒
+                  ("CampID", c_ubyte),    # 营地ID,从1开始
+                  ("GoldID", c_ubyte),    # 淘金ID,为0时代表该营地为空
+                  ("RefreshCnt", c_ushort),    # 已刷新次数
+                  ("EndTime", c_int),    # 预计完成时的时间戳,为0时代表还未开始淘金,通过该时间进行倒计时,完成时需发送操作完成淘金
+                  ("WorkerCnt", c_ubyte),    # 使用监工数
                   ]
 
     def __init__(self):
         self.Clear()
-        self.Cmd = 0xB0
-        self.SubCmd = 0x32
         return
 
     def ReadData(self, stringData, _pos=0, _len=0):
@@ -40850,178 +40254,203 @@
         return _pos + self.GetLength()
 
     def Clear(self):
-        self.Cmd = 0xB0
-        self.SubCmd = 0x32
-        self.PlayerID = 0
-        self.ItemIndex = 0
-        self.WorkerCount = 0
-        self.NeedSeconds = 0
+        self.CampID = 0
+        self.GoldID = 0
+        self.RefreshCnt = 0
+        self.EndTime = 0
+        self.WorkerCnt = 0
         return
 
     def GetLength(self):
-        return sizeof(tagGCMineItemPullPreviewRet)
+        return sizeof(tagSCGoldRushCamp)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''// B0 32 福地物品拉预览结果 //tagGCMineItemPullPreviewRet:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                PlayerID:%d,
-                                ItemIndex:%d,
-                                WorkerCount:%d,
-                                NeedSeconds:%d
+        DumpString = '''// B0 37 淘金营地信息 //tagSCGoldRushCampInfo:
+                                CampID:%d,
+                                GoldID:%d,
+                                RefreshCnt:%d,
+                                EndTime:%d,
+                                WorkerCnt:%d
                                 '''\
                                 %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.PlayerID,
-                                self.ItemIndex,
-                                self.WorkerCount,
-                                self.NeedSeconds
+                                self.CampID,
+                                self.GoldID,
+                                self.RefreshCnt,
+                                self.EndTime,
+                                self.WorkerCnt
                                 )
         return DumpString
 
 
-m_NAtagGCMineItemPullPreviewRet=tagGCMineItemPullPreviewRet()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCMineItemPullPreviewRet.Cmd,m_NAtagGCMineItemPullPreviewRet.SubCmd))] = m_NAtagGCMineItemPullPreviewRet
-
-
-#------------------------------------------------------
-# B0 30 玩家福地相关信息 #tagMCPlayerMineAreaInfo
-
-class  tagMCPlayerMineAreaInfo(Structure):
+class  tagSCGoldRushCampInfo(Structure):
     Head = tagHead()
-    WorkerCount = 0    #(BYTE WorkerCount)// 已雇佣工人数
-    EnergyUsed = 0    #(WORD EnergyUsed)// 今日已消耗体力
-    RefreshCount = 0    #(DWORD RefreshCount)// 今日福地刷新物品次数 - 普通刷新
-    RefreshCountSuper = 0    #(BYTE RefreshCountSuper)// 今日福地刷新物品次数 - 超级刷新
-    RefreshCountRob = 0    #(WORD RefreshCountRob)// 今日福地刷新周围玩家次数
-    TreasureCount = 0    #(BYTE TreasureCount)// 聚宝盆类型个数,对应类型 0~n
-    TreasureState = list()    #(vector<BYTE> TreasureState)// 聚宝盆是否已激活列表,[类型0是否已激活, ...]
-    TreasureAward = list()    #(vector<BYTE> TreasureAward)// 聚宝盆奖励是否已领取列表,[类型0是否已领取, ...]
-    TreasureProgress = list()    #(vector<BYTE> TreasureProgress)// 聚宝盆进度值列表,[类型0进度值, ...],满进度100
-    HelpAwardCount = 0    #(BYTE HelpAwardCount)// 今日已帮助别人奖励次数
-    HousekeeperEndTime = 0    #(DWORD HousekeeperEndTime)// 自动管家到期时间戳,有值同时也代表免费试用已使用
+    CampCnt = 0    #(BYTE CampCnt)
+    CampList = list()    #(vector<tagSCGoldRushCamp> CampList)// 营地列表
     data = None
 
     def __init__(self):
         self.Clear()
         self.Head.Cmd = 0xB0
-        self.Head.SubCmd = 0x30
+        self.Head.SubCmd = 0x37
         return
 
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
         _pos = self.Head.ReadData(_lpData, _pos)
-        self.WorkerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.EnergyUsed,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.RefreshCount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
-        self.RefreshCountSuper,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.RefreshCountRob,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.TreasureCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.TreasureCount):
-            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
-            self.TreasureState.append(value)
-        for i in range(self.TreasureCount):
-            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
-            self.TreasureAward.append(value)
-        for i in range(self.TreasureCount):
-            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
-            self.TreasureProgress.append(value)
-        self.HelpAwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.HousekeeperEndTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.CampCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.CampCnt):
+            temCampList = tagSCGoldRushCamp()
+            _pos = temCampList.ReadData(_lpData, _pos)
+            self.CampList.append(temCampList)
         return _pos
 
     def Clear(self):
         self.Head = tagHead()
         self.Head.Clear()
         self.Head.Cmd = 0xB0
-        self.Head.SubCmd = 0x30
-        self.WorkerCount = 0
-        self.EnergyUsed = 0
-        self.RefreshCount = 0
-        self.RefreshCountSuper = 0
-        self.RefreshCountRob = 0
-        self.TreasureCount = 0
-        self.TreasureState = list()
-        self.TreasureAward = list()
-        self.TreasureProgress = list()
-        self.HelpAwardCount = 0
-        self.HousekeeperEndTime = 0
+        self.Head.SubCmd = 0x37
+        self.CampCnt = 0
+        self.CampList = list()
         return
 
     def GetLength(self):
         length = 0
         length += self.Head.GetLength()
         length += 1
-        length += 2
-        length += 4
-        length += 1
-        length += 2
-        length += 1
-        length += 1 * self.TreasureCount
-        length += 1 * self.TreasureCount
-        length += 1 * self.TreasureCount
-        length += 1
-        length += 4
+        for i in range(self.CampCnt):
+            length += self.CampList[i].GetLength()
 
         return length
 
     def GetBuffer(self):
         data = ''
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteBYTE(data, self.WorkerCount)
-        data = CommFunc.WriteWORD(data, self.EnergyUsed)
-        data = CommFunc.WriteDWORD(data, self.RefreshCount)
-        data = CommFunc.WriteBYTE(data, self.RefreshCountSuper)
-        data = CommFunc.WriteWORD(data, self.RefreshCountRob)
-        data = CommFunc.WriteBYTE(data, self.TreasureCount)
-        for i in range(self.TreasureCount):
-            data = CommFunc.WriteBYTE(data, self.TreasureState[i])
-        for i in range(self.TreasureCount):
-            data = CommFunc.WriteBYTE(data, self.TreasureAward[i])
-        for i in range(self.TreasureCount):
-            data = CommFunc.WriteBYTE(data, self.TreasureProgress[i])
-        data = CommFunc.WriteBYTE(data, self.HelpAwardCount)
-        data = CommFunc.WriteDWORD(data, self.HousekeeperEndTime)
+        data = CommFunc.WriteBYTE(data, self.CampCnt)
+        for i in range(self.CampCnt):
+            data = CommFunc.WriteString(data, self.CampList[i].GetLength(), self.CampList[i].GetBuffer())
         return data
 
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
-                                WorkerCount:%d,
-                                EnergyUsed:%d,
-                                RefreshCount:%d,
-                                RefreshCountSuper:%d,
-                                RefreshCountRob:%d,
-                                TreasureCount:%d,
-                                TreasureState:%s,
-                                TreasureAward:%s,
-                                TreasureProgress:%s,
-                                HelpAwardCount:%d,
-                                HousekeeperEndTime:%d
+                                CampCnt:%d,
+                                CampList:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
-                                self.WorkerCount,
-                                self.EnergyUsed,
-                                self.RefreshCount,
-                                self.RefreshCountSuper,
-                                self.RefreshCountRob,
-                                self.TreasureCount,
-                                "...",
-                                "...",
-                                "...",
-                                self.HelpAwardCount,
-                                self.HousekeeperEndTime
+                                self.CampCnt,
+                                "..."
                                 )
         return DumpString
 
 
-m_NAtagMCPlayerMineAreaInfo=tagMCPlayerMineAreaInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCPlayerMineAreaInfo.Head.Cmd,m_NAtagMCPlayerMineAreaInfo.Head.SubCmd))] = m_NAtagMCPlayerMineAreaInfo
+m_NAtagSCGoldRushCampInfo=tagSCGoldRushCampInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCGoldRushCampInfo.Head.Cmd,m_NAtagSCGoldRushCampInfo.Head.SubCmd))] = m_NAtagSCGoldRushCampInfo
+
+
+#------------------------------------------------------
+# B0 36 淘金相关信息 #tagSCGoldRushInfo
+
+class  tagSCGoldRushInfo(Structure):
+    Head = tagHead()
+    CampState = 0    #(DWORD CampState)// 已解锁营地状态,按营地ID二进制位运算判断是否已解锁
+    WorkerState = 0    #(DWORD WorkerState)// 已雇佣工人状态,按工人ID二进制位运算判断是否已解锁
+    PanningCnt = 0    #(DWORD PanningCnt)// 累计淘金次数
+    LastRecoverTime = 0    #(DWORD LastRecoverTime)// 上次免费恢复淘金令时间戳,为0时可不用倒计时
+    HousekeeperEndTime = 0    #(DWORD HousekeeperEndTime)// 自动管家到期时间戳,有值同时也代表免费试用已使用
+    WarehouseCnt = 0    #(BYTE WarehouseCnt)// 淘金仓库物品数
+    WarehouseIDList = list()    #(vector<BYTE> WarehouseIDList)// 淘金仓库已完成淘金ID列表 [索引0淘金ID, ...],淘金ID为0代表该索引位置为空
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x36
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.CampState,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.WorkerState,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.PanningCnt,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.LastRecoverTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.HousekeeperEndTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.WarehouseCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.WarehouseCnt):
+            value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
+            self.WarehouseIDList.append(value)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xB0
+        self.Head.SubCmd = 0x36
+        self.CampState = 0
+        self.WorkerState = 0
+        self.PanningCnt = 0
+        self.LastRecoverTime = 0
+        self.HousekeeperEndTime = 0
+        self.WarehouseCnt = 0
+        self.WarehouseIDList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 4
+        length += 1
+        length += 1 * self.WarehouseCnt
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteDWORD(data, self.CampState)
+        data = CommFunc.WriteDWORD(data, self.WorkerState)
+        data = CommFunc.WriteDWORD(data, self.PanningCnt)
+        data = CommFunc.WriteDWORD(data, self.LastRecoverTime)
+        data = CommFunc.WriteDWORD(data, self.HousekeeperEndTime)
+        data = CommFunc.WriteBYTE(data, self.WarehouseCnt)
+        for i in range(self.WarehouseCnt):
+            data = CommFunc.WriteBYTE(data, self.WarehouseIDList[i])
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                CampState:%d,
+                                WorkerState:%d,
+                                PanningCnt:%d,
+                                LastRecoverTime:%d,
+                                HousekeeperEndTime:%d,
+                                WarehouseCnt:%d,
+                                WarehouseIDList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.CampState,
+                                self.WorkerState,
+                                self.PanningCnt,
+                                self.LastRecoverTime,
+                                self.HousekeeperEndTime,
+                                self.WarehouseCnt,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagSCGoldRushInfo=tagSCGoldRushInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCGoldRushInfo.Head.Cmd,m_NAtagSCGoldRushInfo.Head.SubCmd))] = m_NAtagSCGoldRushInfo
 
 
 #------------------------------------------------------
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/CTG.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/CTG.py
index ac11d2e..310a380 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/CTG.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/CTG.py
@@ -36,8 +36,8 @@
 #  @remarks 函数详细说明.
 def OnExec(curPlayer, msgList):
     if not msgList:
-        GameWorld.DebugAnswer(curPlayer, "CTG 金额元 是否增加集市购买额度默认是")
-        GameWorld.DebugAnswer(curPlayer, "CTG 商品编号 appID 是否增加集市购买额度")
+        GameWorld.DebugAnswer(curPlayer, "CTG 金额元")
+        GameWorld.DebugAnswer(curPlayer, "CTG 商品编号 appID")
         return
     
     ctgValue = str(msgList[0])
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/GoldRush.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/GoldRush.py
new file mode 100644
index 0000000..224ea3a
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/GoldRush.py
@@ -0,0 +1,112 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package GM.Commands.GoldRush
+#
+# @todo:淘金
+# @author hxp
+# @date 2025-09-03
+# @version 1.0
+#
+# 详细描述: 淘金
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-09-03 15:30"""
+#-------------------------------------------------------------------------------
+
+import GameWorld
+import PlayerControl
+import PlayerGoldRush
+import IpyGameDataPY
+import ChConfig
+import time
+
+## GM命令执行入口
+#  @param curPlayer 当前玩家
+#  @param msgList 参数列表 [addSkillID]
+#  @return None
+#  @remarks 函数详细说明.
+def OnExec(curPlayer, msgList):
+    # @return: 是否发送到GameServer
+    
+    if not msgList:
+        GameWorld.DebugAnswer(curPlayer, "---------- 淘金命令 ----------")
+        GameWorld.DebugAnswer(curPlayer, "重置淘金: GoldRush 0")
+        GameWorld.DebugAnswer(curPlayer, "设置营地: GoldRush c ID 是否解锁")
+        GameWorld.DebugAnswer(curPlayer, "设置监工: GoldRush w ID 是否解锁")
+        GameWorld.DebugAnswer(curPlayer, "设置仓库: GoldRush a 随机未领取奖励数")
+        GameWorld.DebugAnswer(curPlayer, "设置次数: GoldRush r 已淘金次数")
+        GameWorld.DebugAnswer(curPlayer, "设置管家: GoldRush k 剩余时长分钟")
+        return True
+    
+    value1 = msgList[0]
+    if value1 == 0:
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldRushCampState, 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldRushWorkerState, 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldRushCnt, 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldRushRecoverTime, 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldRushAutoEndTime, 0)
+        ipyDataMgr = IpyGameDataPY.IPY_Data()
+        for index in range(ipyDataMgr.GetGoldRushCampCount()):
+            ipyData = ipyDataMgr.GetGoldRushCampByIndex(index)
+            campID = ipyData.GetCampID()
+            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldRushCampInfo % campID, 0)
+            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldRushCampEndTime % campID, 0)
+        for index in range(sum(IpyGameDataPY.GetFuncEvalCfg("GoldRush", 1))):
+            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldRushWarehouse % index, 0)
+        GameWorld.DebugAnswer(curPlayer, "重置淘金")
+        
+    elif value1 == "c":
+        campID = msgList[1] if len(msgList) > 1 else 0
+        unlock = msgList[2] if len(msgList) > 2 else 0
+        unlockState = 1 if unlock else 0
+        campState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldRushCampState)
+        campState = GameWorld.SetBitValue(campState, campID, unlockState)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldRushCampState, campState)
+        GameWorld.DebugAnswer(curPlayer, "营地(%s)是否解锁: %s" % (campID, unlockState))
+        
+    elif value1 == "w":
+        workerID = msgList[1] if len(msgList) > 1 else 0
+        unlock = msgList[2] if len(msgList) > 2 else 0
+        unlockState = 1 if unlock else 0
+        workerState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldRushWorkerState)
+        workerState = GameWorld.SetBitValue(workerState, workerID, unlockState)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldRushWorkerState, workerState)
+        GameWorld.DebugAnswer(curPlayer, "监工(%s)是否解锁: %s" % (workerID, unlockState))
+        
+    elif value1 == "a":
+        ungetCnt = msgList[1] if len(msgList) > 1 else 0
+        spaceList = IpyGameDataPY.GetFuncEvalCfg("GoldRush", 1)
+        maxSpace = sum(spaceList) if PlayerGoldRush.GoldRushAutoCanUse(curPlayer) else spaceList[0]
+        for index in range(maxSpace):
+            if ungetCnt <= 0:
+                break
+            if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldRushWarehouse % index):
+                continue
+            ipyData = PlayerGoldRush.GetRefreshGoldItemIpyData(curPlayer)
+            if not ipyData:
+                continue
+            goldID = ipyData.GetGoldID()
+            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldRushWarehouse % index, goldID)
+            GameWorld.DebugAnswer(curPlayer, "淘金仓库随机未领取:index:%s,ID:%s" % (index, goldID))
+            ungetCnt -= 1
+            
+    elif value1 == "r":
+        goldRushCnt = msgList[1] if len(msgList) > 1 else 0
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldRushCnt, goldRushCnt)
+        GameWorld.DebugAnswer(curPlayer, "已淘金次数: %s" % goldRushCnt)
+    elif value1 == "k":
+        remainMinutes = msgList[1] if len(msgList) > 1 else 0
+        if remainMinutes > 0:
+            endTime = int(time.time()) + remainMinutes * 60
+            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldRushAutoEndTime, endTime)
+            GameWorld.DebugAnswer(curPlayer, "设置管家到期时间: %s" % GameWorld.ChangeTimeNumToStr(endTime))
+        else:
+            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldRushAutoEndTime, 0)
+            GameWorld.DebugAnswer(curPlayer, "重置管家到期时间: 0")
+    else:
+        return
+    PlayerGoldRush.SyncGoldRushInfo(curPlayer)
+    PlayerGoldRush.SyncGoldCampInfo(curPlayer)
+    return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/MineArea.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/MineArea.py
deleted file mode 100644
index bc5fef6..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/MineArea.py
+++ /dev/null
@@ -1,100 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package GM.Commands.MineArea
-#
-# @todo:福地
-# @author hxp
-# @date 2024-03-07
-# @version 1.0
-#
-# 详细描述: 福地
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2024-03-07 19:30"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import PlayerControl
-import PlayerMineArea
-import ChConfig
-import time
-
-## GM命令执行入口
-#  @param curPlayer 当前玩家
-#  @param msgList 参数列表 [addSkillID]
-#  @return None
-#  @remarks 函数详细说明.
-def OnExec(curPlayer, msgList):
-    # @return: 是否发送到GameServer
-    
-    if not msgList:
-        GameWorld.DebugAnswer(curPlayer, "---------- 福地命令 ----------")
-        GameWorld.DebugAnswer(curPlayer, "重置福地玩家: MineArea 0")
-        GameWorld.DebugAnswer(curPlayer, "设置已用精力: MineArea e 精力")
-        GameWorld.DebugAnswer(curPlayer, "设置工人数量: MineArea w 数量")
-        GameWorld.DebugAnswer(curPlayer, "管家到期时间: MineArea k 剩余时长分钟")
-        GameWorld.DebugAnswer(curPlayer, "设置刷新次数: MineArea r 次数 刷新类型")
-        GameWorld.DebugAnswer(curPlayer, "设置聚宝进度: MineArea t 类型 进度值")
-        GameWorld.DebugAnswer(curPlayer, "设置帮助次数: MineArea h 次数")
-        GameWorld.DebugAnswer(curPlayer, "刷新类型:0-自己物品,1-自己超级,2-周围玩家")
-        return True
-    
-    value1 = msgList[0]
-    if value1 == 0:
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineWorkerCount, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineWorkerEnergyUsed, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineHousekeeperEndTime, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineHelpAwardCount, 0)
-        for refreshType in PlayerMineArea.RefreshTypeList:
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineRefreshCount % refreshType, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineTreasureState, 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineTreasureAward, 0)
-        for treasureType in range(10):
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineTreasureProgess % treasureType, 0)
-        GameWorld.DebugAnswer(curPlayer, "重置福地玩家")
-        
-    elif value1 == "e":
-        energyUsed = msgList[1] if len(msgList) > 1 else 0
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineWorkerEnergyUsed, energyUsed)
-        GameWorld.DebugAnswer(curPlayer, "设置已用精力: %s" % energyUsed)
-        
-    elif value1 == "w":
-        workerCount = msgList[1] if len(msgList) > 1 else 0
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineWorkerCount, workerCount)
-        GameWorld.DebugAnswer(curPlayer, "设置工人数量: %s" % workerCount)
-        
-    elif value1 == "k":
-        remainMinutes = msgList[1] if len(msgList) > 1 else 0
-        if remainMinutes > 0:
-            endTime = int(time.time()) + remainMinutes * 60
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineHousekeeperEndTime, endTime)
-            GameWorld.DebugAnswer(curPlayer, "设置管家到期时间: %s" % GameWorld.ChangeTimeNumToStr(endTime))
-        else:
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineHousekeeperEndTime, 0)
-            GameWorld.DebugAnswer(curPlayer, "重置管家到期时间: 0")
-            
-    elif value1 == "r":
-        refreshCount = msgList[1] if len(msgList) > 1 else 0
-        refreshType = msgList[2] if len(msgList) > 2 else 0
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineRefreshCount % refreshType, refreshCount)
-        GameWorld.DebugAnswer(curPlayer, "设置刷新次数: %s, Type:%s" % (refreshCount, refreshType))
-        
-    elif value1 == "t":
-        treasureType = msgList[1] if len(msgList) > 1 else 0
-        setProgress = msgList[2] if len(msgList) > 2 else 0
-        setProgress = min(setProgress, PlayerMineArea.MineTreasureProgressMax)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineTreasureProgess % treasureType, setProgress)
-        GameWorld.DebugAnswer(curPlayer, "设置聚宝进度: Type:%s,进度=%s" % (treasureType, setProgress))
-        
-    elif value1 == "h":
-        helpAwardCount = msgList[1] if len(msgList) > 1 else 0
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineHelpAwardCount, helpAwardCount)
-        GameWorld.DebugAnswer(curPlayer, "设置帮助次数: %s" % helpAwardCount)
-        
-    else:
-        return True
-    
-    PlayerMineArea.SyncPlayerMineAreaInfo(curPlayer)
-    return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MineArea.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MineArea.py
deleted file mode 100644
index 4df4b05..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MineArea.py
+++ /dev/null
@@ -1,89 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package GameWorldLogic.FBProcess.GameLogic_MineArea
-#
-# @todo:福地
-# @author hxp
-# @date 2024-04-10
-# @version 1.0
-#
-# 详细描述: 福地
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2024-04-10 14:00"""
-#-------------------------------------------------------------------------------
-
-import ChConfig
-import IpyGameDataPY
-import PlayerMineArea
-import PlayerControl
-import GameWorld
-
-def OnTurnFightRequest(curPlayer, mapID, funcLineID, tagType, tagID, valueList):
-    ## 回合战斗请求 - 地图验证
-    
-    if tagType != ChConfig.TurnBattle_TagType_Player:
-        GameWorld.DebugLog("请求回合战斗目标异常! mapID=%s,tagType=%s,tagID=%s" % (mapID, tagType, tagID), curPlayer.GetPlayerID())
-        return
-    
-    # 摇人帮助
-    if funcLineID == 0:
-        if not tagID:
-            return
-        awardCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineHelpAwardCount)
-        awardCountMax = IpyGameDataPY.GetFuncCfg("MineAreaHelp", 1)
-        if awardCountMax and awardCount >= awardCountMax:
-            GameWorld.DebugLog("已达到今日福地帮助奖励次数上限! awardCount=%s" % awardCount, curPlayer.GetPlayerID())
-            return
-    # 自己驱赶
-    elif funcLineID == 1:
-        pass
-    else:
-        # 通过lineID扩展同个功能系统下的不同战斗需求
-        pass
-    
-    return True
-
-def OnTurnFightOver(curPlayer, mapID, funcLineID, tagType, tagID, valueList, fightRet):
-    ## 回合战斗结束
-    # @return: 是否需要同步GameServer, 奖励列表, 同步结果信息
-    needSendGameServer = True
-    awardItemList = []
-    overInfoEx = {}
-    
-    # 摇人帮助
-    if funcLineID == 0:
-        # 无论胜负都要同步GameServer汇报结果
-        isWin = fightRet[0]
-        if not isWin:
-            return needSendGameServer, awardItemList, overInfoEx
-        
-        awardItemList = IpyGameDataPY.GetFuncEvalCfg("MineAreaHelp", 2)
-        return needSendGameServer, awardItemList, overInfoEx
-    
-    # 自己驱赶
-    elif funcLineID == 1:
-        return needSendGameServer, awardItemList, overInfoEx
-    
-    return
-
-def OnTurnFightOver_GameServerRet(curPlayer, mapID, funcLineID, tagType, tagID, valueList, fightRet, awardItemList, ret):
-    ## 回合战斗结束 - GameServer处理完毕返回
-    
-    # 摇人帮助
-    if funcLineID == 0:
-        isWin = fightRet[0]
-        if not isWin or not ret:
-            return
-        
-        # 增加奖励次数
-        awardCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineHelpAwardCount) + 1
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineHelpAwardCount, awardCount)
-        GameWorld.DebugLog("更新福地帮助他人奖励次数: awardCount=%s" % awardCount, curPlayer.GetPlayerID())
-        PlayerMineArea.SyncPlayerMineAreaInfo(curPlayer)
-        
-    return
-
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 7617b0e..8f9d297 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -2668,6 +2668,28 @@
                         ("DWORD", "LVUPNeedTime", 0),
                         ("list", "EquipColorRateList", 0),
                         ),
+
+                "GoldRushCamp":(
+                        ("BYTE", "CampID", 1),
+                        ("WORD", "PanningUnlock", 0),
+                        ("list", "MoneyUnlock", 0),
+                        ),
+
+                "GoldRushWorker":(
+                        ("BYTE", "WorkerID", 1),
+                        ("WORD", "PlayerLVUnlock", 0),
+                        ("list", "MoneyUnlock", 0),
+                        ),
+
+                "GoldRushItem":(
+                        ("BYTE", "GoldID", 1),
+                        ("DWORD", "ItemID", 0),
+                        ("BYTE", "ItemLV", 0),
+                        ("DWORD", "ItemCount", 0),
+                        ("DWORD", "RefreshWeight", 0),
+                        ("BYTE", "WorkerMax", 0),
+                        ("BYTE", "NeedSeconds", 0),
+                        ),
                 }
 
 
@@ -6639,6 +6661,43 @@
     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
+
+# 淘金营地表
+class IPY_GoldRushCamp():
+    
+    def __init__(self):
+        self.attrTuple = None
+        return
+        
+    def GetCampID(self): return self.attrTuple[0] # BYTE
+    def GetPanningUnlock(self): return self.attrTuple[1] # 淘金次数解锁 WORD
+    def GetMoneyUnlock(self): return self.attrTuple[2] # 货币解锁,货币类型|货币值 list
+
+# 淘金监工表
+class IPY_GoldRushWorker():
+    
+    def __init__(self):
+        self.attrTuple = None
+        return
+        
+    def GetWorkerID(self): return self.attrTuple[0] # BYTE
+    def GetPlayerLVUnlock(self): return self.attrTuple[1] # 主公等级解锁 WORD
+    def GetMoneyUnlock(self): return self.attrTuple[2] # 货币解锁,货币类型|货币值 list
+
+# 淘金物品表
+class IPY_GoldRushItem():
+    
+    def __init__(self):
+        self.attrTuple = None
+        return
+        
+    def GetGoldID(self): return self.attrTuple[0] # 淘金ID BYTE
+    def GetItemID(self): return self.attrTuple[1] # 物品ID DWORD
+    def GetItemLV(self): return self.attrTuple[2] # 物品等级 BYTE
+    def GetItemCount(self): return self.attrTuple[3] # 物品个数 DWORD
+    def GetRefreshWeight(self): return self.attrTuple[4] # 常规刷新权重 DWORD
+    def GetWorkerMax(self): return self.attrTuple[5] # 监工上限 BYTE
+    def GetNeedSeconds(self): return self.attrTuple[6] # 耗时秒 BYTE
 
 
 def Log(msg, playerID=0, par=0):
@@ -6962,6 +7021,9 @@
         self.__LoadFileData("Xiangong", onlyCheck)
         self.__LoadFileData("TiandaoTree", onlyCheck)
         self.__LoadFileData("TreeLV", onlyCheck)
+        self.__LoadFileData("GoldRushCamp", onlyCheck)
+        self.__LoadFileData("GoldRushWorker", onlyCheck)
+        self.__LoadFileData("GoldRushItem", onlyCheck)
         Log("IPY_DataMgr ReloadOK! onlyCheck=%s" % onlyCheck)
         return
     
@@ -9041,6 +9103,27 @@
     def GetTreeLVByIndex(self, index):
         self.CheckLoadData("TreeLV")
         return self.ipyTreeLVCache[index]
+
+    def GetGoldRushCampCount(self):
+        self.CheckLoadData("GoldRushCamp")
+        return self.ipyGoldRushCampLen
+    def GetGoldRushCampByIndex(self, index):
+        self.CheckLoadData("GoldRushCamp")
+        return self.ipyGoldRushCampCache[index]
+
+    def GetGoldRushWorkerCount(self):
+        self.CheckLoadData("GoldRushWorker")
+        return self.ipyGoldRushWorkerLen
+    def GetGoldRushWorkerByIndex(self, index):
+        self.CheckLoadData("GoldRushWorker")
+        return self.ipyGoldRushWorkerCache[index]
+
+    def GetGoldRushItemCount(self):
+        self.CheckLoadData("GoldRushItem")
+        return self.ipyGoldRushItemLen
+    def GetGoldRushItemByIndex(self, index):
+        self.CheckLoadData("GoldRushItem")
+        return self.ipyGoldRushItemCache[index]
 
 IPYData = IPY_DataMgr()
 def IPY_Data(): return IPYData
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 3e6b376..857fa73 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -131,7 +131,7 @@
 import PlayerFace
 import PlayerChatBox
 import PlayerXiangong
-import PlayerMineArea
+import PlayerGoldRush
 import PlayerActLoginNew
 import PlayerActBuyCountGift
 import PlayerActLunhuidian
@@ -787,7 +787,7 @@
         PlayerZhanling.OnPlayerLogin(curPlayer)
         PlayerTask.OnPlayerLogin(curPlayer)
         PlayerTree.OnPlayerLogin(curPlayer)
-        PlayerMineArea.OnPlayerLogin(curPlayer)
+        PlayerGoldRush.OnPlayerLogin(curPlayer)
         PlayerActFamilyGCZ.OnPlayerLogin(curPlayer)
         PlayerTalk.OnPlayerLogin(curPlayer)
         
@@ -851,6 +851,9 @@
         PlayerControl.SendMailByKey(mailTypeKey, [curPlayer.GetPlayerID()], mailItemList)
         
     PlayerHero.OnPlayerFirstLogin(curPlayer)
+    
+    #淘金初始化
+    PlayerGoldRush.InitGoldEnergy(curPlayer)
     
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FirstLogin, 1)
     return
@@ -3440,9 +3443,6 @@
     #战令奖励
     elif rewardType == ChConfig.Def_RewardType_Zhanling:
         PlayerZhanling.GetZhanlingReward(curPlayer, dataEx, dataExStr)
-    #福地聚宝盆奖励
-    elif rewardType == ChConfig.Def_RewardType_MineTreasure:
-        PlayerMineArea.GetMineTreasureAward(curPlayer, dataEx)
     #玩法前瞻奖励
     elif rewardType == ChConfig.Def_RewardType_GameNotice:
         OnGiveAwardByClient(curPlayer, rewardType, ChConfig.Def_PDict_GameNoticeAwardState, IpyGameDataPY.GetFuncEvalCfg("GameNoticeReward", 1))
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py
index a61fc98..52d3a74 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py
@@ -79,9 +79,6 @@
 #                     ShareDefine.GameFuncID_Pet:lambda curObj:PlayerPet.DoLVUPLogic_Pet(curObj),
 #                     }
 
-# 功能开启需要同步到GameServer的
-FuncOpenNotifyGameServer = [ShareDefine.GameFuncID_Championship, ShareDefine.GameFuncID_MineArea]
-
 def GetFuncOpenLVIpyData(funcID): return IpyGameDataPY.GetIpyGameData("FuncOpenLV", funcID)
 
 def DoFuncOpenLogic(curPlayer, finishMissionIDList=[]):
@@ -137,16 +134,6 @@
         
     if openFuncIDList:
         Sync_FuncOpenState(curPlayer, openFuncIDList)
-        notifyGameServerFuncIDList = []
-        for funcID in openFuncIDList:
-            if funcID not in FuncOpenNotifyGameServer:
-                continue
-            notifyGameServerFuncIDList.append(funcID)
-        if notifyGameServerFuncIDList:
-            GameWorld.DebugLog("notifyGameServerFuncIDList=%s" % notifyGameServerFuncIDList)
-            msgInfo = str(notifyGameServerFuncIDList)
-            GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "FuncOpen", msgInfo, len(msgInfo))
-            
         PlayerActTask.OnCheckRelateFuncAct(curPlayer, openFuncIDList)
         PlayerActLoginNew.OnCheckRelateFuncAct(curPlayer, openFuncIDList)
         PlayerActBuyCountGift.OnCheckRelateFuncAct(curPlayer, openFuncIDList)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
index e41b387..823bd2b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
@@ -62,7 +62,7 @@
 import PlayerActTurntable
 import PlayerTongTianLing
 import PlayerZhanling
-import PlayerMineArea
+import PlayerGoldRush
 import ItemCommon
 import PyGameData
 import CommFunc
@@ -796,7 +796,7 @@
         PlayerGoldInvest.InvestByCTG(curPlayer, ctgID)
         PlayerGoldGift.OnGiftByCTGID(curPlayer, ctgID)
         PlayerZhanling.OnActiviteByCTGID(curPlayer, ctgID)
-        PlayerMineArea.OnMineTreasureByCTGID(curPlayer, ctgID)
+        PlayerGoldRush.OnGoldRushByCTGID(curPlayer, ctgID)
         PlayerTongTianLing.OnActiviteTTTByCTGID(curPlayer, ctgID)
         
     serverDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
index 0a3c9f7..6733d51 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -98,7 +98,6 @@
 import PlayerArena
 import PyGameData
 import PlayerXiangong
-import PlayerMineArea
 import PlayerBillboard
 import PlayerViewCache
 import PlayerMail
@@ -332,8 +331,6 @@
         PlayerCrossChampionship.DoPlayerOnDay(curPlayer)
         #竞技场
         PlayerArena.OnDayEx(curPlayer)
-        #福地
-        PlayerMineArea.PlayerOnDay(curPlayer)
         #特殊时间点过天的,一般是游戏功能,此时立即同步一次跨服玩家数据
         CrossPlayerData.SendMergePlayerDataNow(curPlayer)
         
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldRush.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldRush.py
new file mode 100644
index 0000000..e345976
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldRush.py
@@ -0,0 +1,631 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Player.PlayerGoldRush
+#
+# @todo:淘金
+# @author hxp
+# @date 2025-09-03
+# @version 1.0
+#
+# 详细描述: 淘金
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-09-03 15:30"""
+#-------------------------------------------------------------------------------
+
+import ChConfig
+import GameWorld
+import NetPackCommon
+import IpyGameDataPY
+import ItemControler
+import ChPyNetSendPack
+import PlayerControl
+import GameFuncComm
+import ShareDefine
+import ObjPool
+
+import time
+import math
+
+def OnPlayerLogin(curPlayer):
+    __CheckGoldRushFreeUnlock(curPlayer)
+    SyncGoldRushInfo(curPlayer)
+    SyncGoldCampInfo(curPlayer)
+    return
+
+def __CheckGoldRushFreeUnlock(curPlayer):
+    ## 检查默认解锁,即没有解锁条件的,有条件的需要手动解锁
+    
+    playerID = curPlayer.GetPlayerID()
+    ipyDataMgr = IpyGameDataPY.IPY_Data()
+    campState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldRushCampState)
+    for index in range(ipyDataMgr.GetGoldRushCampCount()):
+        ipyData = ipyDataMgr.GetGoldRushCampByIndex(index)
+        campID = ipyData.GetCampID()
+        if campState & pow(2, campID):
+            continue
+        if ipyData.GetPanningUnlock() or ipyData.GetMoneyUnlock():
+            #有解锁条件的不判断
+            continue
+        campState |= pow(2, campID)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldRushCampState, campState)
+        GameWorld.DebugLog("默认解锁淘金营地: campID=%s,campState=%s" % (campID, campState), playerID)
+        
+    workerState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldRushWorkerState)
+    for index in range(ipyDataMgr.GetGoldRushWorkerCount()):
+        ipyData = ipyDataMgr.GetGoldRushWorkerByIndex(index)
+        workerID = ipyData.GetWorkerID()
+        if workerState & pow(2, workerID):
+            continue
+        if ipyData.GetPlayerLVUnlock() or ipyData.GetMoneyUnlock():
+            #有解锁条件的不判断
+            continue
+        workerState |= pow(2, workerID)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldRushWorkerState, workerState)
+        GameWorld.DebugLog("默认解锁淘金监工: workerID=%s,workerState=%s" % (workerID, workerState), playerID)
+        
+    return
+
+def OnProcess(curPlayer):
+    CheckGoldPushEnergyRecover(curPlayer)
+    CheckGoldRushCamp(curPlayer)
+    return
+
+def GetCampInfo(curPlayer, campID):
+    ## 营地信息
+    # 已刷新次数*1000+淘金ID*10+派遣工人数
+    # @return refreshCnt, goldID, workerCnt
+    campInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldRushCampInfo % campID)
+    refreshCnt = campInfo / 1000
+    goldID = campInfo % 1000 / 10
+    workerCnt = campInfo % 10
+    return refreshCnt, goldID, workerCnt
+
+def SetCampInfo(curPlayer, campID, refreshCnt, goldID, workerCnt, isNotify=True):
+    ## 设置保存营地信息
+    campInfo = refreshCnt * 1000 + min(goldID, 99) * 10 + workerCnt
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldRushCampInfo % campID, campInfo)
+    if isNotify:
+        SyncGoldCampInfo(curPlayer, [campID])
+    return campInfo
+
+def GoldRushAutoCanUse(curPlayer):
+    ## 自动淘金是否可用
+    endTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldRushAutoEndTime)
+    return int(time.time()) <= endTime
+
+#// B0 36 淘金操作 #tagCSGoldRushOP
+#
+#struct    tagCSGoldRushOP
+#{
+#    tagHead        Head;
+#    BYTE        OPType;        // 0-接受淘金;1-刷新淘金;2-开始淘金或调整监工数;3-取消淘金;
+#    BYTE        CampID;        // 营地ID
+#    BYTE        WorkerCnt;    // 派遣监工数,仅类型2有效
+#};
+def OnGoldRushOP(index, clientData, tick):
+    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+    OPType = clientData.OPType
+    campID = clientData.CampID
+    workerCnt = clientData.WorkerCnt
+    
+    campState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldRushCampState)
+    if not campState & pow(2, campID):
+        GameWorld.DebugLog("该营地未解锁! campID=%s,campState=%s" % (campID, campState))
+        return
+    
+    if OPType == 0: # 0-接受淘金
+        __onGoldRushAccept(curPlayer, campID)
+    elif OPType == 1: # 1-刷新淘金
+        __onGoldRushRefresh(curPlayer, campID)
+    elif OPType == 2: # 2-开始淘金或调整监工数
+        __onGoldRushStart(curPlayer, campID, workerCnt)
+    elif OPType == 3: # 3-取消淘金
+        __onGoldRushCancel(curPlayer, campID)
+        
+    return
+
+def __onGoldRushAccept(curPlayer, campID):
+    ## 接受
+    refreshCnt, goldID, workerCnt = GetCampInfo(curPlayer, campID)
+    if goldID:
+        GameWorld.DebugLog("该营地已经有刷新淘金了,不能接受! campID=%s,goldID=%s" % (campID, goldID))
+        return
+    ipyData = GetRefreshGoldItemIpyData(curPlayer)
+    if not ipyData:
+        return
+    # 接受淘金不受其他限制,有体力就行
+    needMoney = IpyGameDataPY.GetFuncCfg("GoldRushRefresh", 1) # 需要淘金令数量
+    if not PlayerControl.PayMoney(curPlayer, ShareDefine.TYPE_Price_GoldRushEnergy, needMoney):
+        return
+    goldID = ipyData.GetGoldID()
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldRushCampEndTime % campID, 0)
+    campInfo = SetCampInfo(curPlayer, campID, refreshCnt, goldID, workerCnt)
+    GameWorld.DebugLog("接受淘金: campID=%s,goldID=%s,campInfo=%s" % (campID, goldID, campInfo))
+    CheckGoldPushEnergyRecover(curPlayer, False)
+    SyncGoldRushInfo(curPlayer)
+    return
+
+def InitGoldEnergy(curPlayer):
+    energyList = IpyGameDataPY.GetFuncEvalCfg("GoldRush", 2)
+    maxEnergy = sum(energyList) if GoldRushAutoCanUse(curPlayer) else energyList[0]
+    curEnergy = PlayerControl.GetMoney(curPlayer, ShareDefine.TYPE_Price_GoldRushEnergy)
+    if curEnergy >= maxEnergy:
+        return
+    addEnergy = maxEnergy - curEnergy
+    PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_GoldRushEnergy, addEnergy)
+    GameWorld.DebugLog("淘金初始化: addEnergy=%s" % addEnergy)
+    return
+
+def CheckGoldPushEnergyRecover(curPlayer, isNotify=True):
+    ## 检查体力恢复
+    energyList = IpyGameDataPY.GetFuncEvalCfg("GoldRush", 2)
+    maxEnergy = sum(energyList) if GoldRushAutoCanUse(curPlayer) else energyList[0]
+    curEnergy = PlayerControl.GetMoney(curPlayer, ShareDefine.TYPE_Price_GoldRushEnergy)
+    lastRecoverTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldRushRecoverTime)
+    if curEnergy >= maxEnergy:
+        if lastRecoverTime:
+            GameWorld.DebugLog("淘金体力已满!")
+            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldRushRecoverTime, 0)
+            isNotify and SyncGoldRushInfo(curPlayer)
+        return
+    
+    curTime = int(time.time())
+    passSeconds = curTime - lastRecoverTime
+    if not lastRecoverTime or passSeconds < 0:
+        GameWorld.DebugLog("重设淘金体力恢复时间!")
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldRushRecoverTime, curTime)
+        isNotify and SyncGoldRushInfo(curPlayer)
+        return
+    
+    cdSeconds = IpyGameDataPY.GetFuncCfg("GoldRush", 3) * 60
+    if passSeconds < cdSeconds:
+        return
+    recoverCnt = passSeconds / cdSeconds
+    updRecoverTime = curTime - passSeconds % cdSeconds
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldRushRecoverTime, updRecoverTime)
+    GameWorld.DebugLog("恢复淘金令: %s,passSeconds=%s,上次恢复:%s" % (recoverCnt, passSeconds, GameWorld.ChangeTimeNumToStr(lastRecoverTime)))
+    PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_GoldRushEnergy, recoverCnt)
+    if PlayerControl.GetMoney(curPlayer, ShareDefine.TYPE_Price_GoldRushEnergy) >= maxEnergy:
+        GameWorld.DebugLog("体力已满!")
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldRushRecoverTime, 0)
+    isNotify and SyncGoldRushInfo(curPlayer)
+    return
+
+def GetRefreshGoldItemIpyData(curPlayer):
+    ## 获取随机刷新的淘金物品IpyData
+    funcLimitDict = IpyGameDataPY.GetFuncEvalCfg("GoldRushRefresh", 5, {})
+    weightList = []
+    ipyDataMgr = IpyGameDataPY.IPY_Data()
+    for index in range(ipyDataMgr.GetGoldRushItemCount()):
+        ipyData = ipyDataMgr.GetGoldRushItemByIndex(index)
+        #goldID = ipyData.GetGoldID()
+        itemID = ipyData.GetItemID()
+        weight = ipyData.GetRefreshWeight()
+        if not weight:
+            continue
+        if str(itemID) in funcLimitDict:
+            funcID = funcLimitDict[str(itemID)]
+            if not GameFuncComm.GetFuncCanUse(curPlayer, funcID):
+                continue
+        weightList.append([weight, ipyData])
+    return GameWorld.GetResultByWeightList(weightList)
+
+def __onGoldRushRefresh(curPlayer, campID):
+    ## 刷新
+    refreshCnt, goldID, workerCnt = GetCampInfo(curPlayer, campID)
+    if not goldID:
+        __onGoldRushAccept(curPlayer, campID)
+        return
+    if workerCnt:
+        GameWorld.DebugLog("淘金中,不能刷新! campID=%s,workerCnt=%s" % (campID, workerCnt))
+        return
+    moneyType = IpyGameDataPY.GetFuncCfg("GoldRushRefresh", 2)
+    needMoneyList = IpyGameDataPY.GetFuncEvalCfg("GoldRushRefresh", 3)
+    if not moneyType or not needMoneyList:
+        return
+    needMoney = needMoneyList[refreshCnt] if len(needMoneyList) > refreshCnt else needMoneyList[-1]
+    ipyData = GetRefreshGoldItemIpyData(curPlayer)
+    if not ipyData:
+        return
+    goldID = ipyData.GetGoldID()
+    if needMoney and not PlayerControl.PayMoney(curPlayer, moneyType, needMoney):
+        return
+    refreshCnt += 1
+    campInfo = SetCampInfo(curPlayer, campID, refreshCnt, goldID, workerCnt)
+    GameWorld.DebugLog("淘金营地手动刷新: campID=%s,goldID=%s,refreshCnt=%s,campInfo=%s,needMoney=%s" % (campID, goldID, refreshCnt, campInfo, needMoney))
+    return
+
+def __onGoldRushStart(curPlayer, campID, setWorkerCnt):
+    ## 开始/修改
+    refreshCnt, goldID, workerCnt = GetCampInfo(curPlayer, campID)
+    if not goldID:
+        GameWorld.DebugLog("营地为空,无法开始或修改! campID=%s" % (campID))
+        return
+    
+    if workerCnt == setWorkerCnt:
+        GameWorld.DebugLog("营地工人相同,无需修改! campID=%s" % (campID))
+        return
+    
+    goldIpyData = IpyGameDataPY.GetIpyGameData("GoldRushItem", goldID)
+    if not goldIpyData:
+        return
+    
+    # 进行中的
+    panningCnt = 0
+    atWorkCnt = 0 # 工作中的工人,不含本营地
+    ipyDataMgr = IpyGameDataPY.IPY_Data()
+    for index in range(ipyDataMgr.GetGoldRushCampCount()):
+        ipyData = ipyDataMgr.GetGoldRushCampByIndex(index)
+        cID = ipyData.GetCampID()
+        _, gID, wCnt = GetCampInfo(curPlayer, cID)
+        if gID and wCnt:
+            panningCnt += 1
+            if campID != cID:
+                atWorkCnt += wCnt
+            
+    workersTotal = 0 # 总工人数
+    workerState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldRushWorkerState)
+    for index in range(ipyDataMgr.GetGoldRushWorkerCount()):
+        ipyData = ipyDataMgr.GetGoldRushWorkerByIndex(index)
+        workerID = ipyData.GetWorkerID()
+        if workerState & pow(2, workerID):
+            workersTotal += 1
+    idleWorkers = workersTotal - atWorkCnt # 空闲工人数
+    if idleWorkers <= 0:
+        GameWorld.DebugLog("没有空闲工人,无法开始淘金! atWorkCnt=%s >= %s" % (atWorkCnt, workersTotal))
+        return
+    workerMax = goldIpyData.GetWorkerMax()
+    updWorkerCnt = min(idleWorkers, setWorkerCnt, workerMax)
+    if updWorkerCnt <= 0:
+        GameWorld.DebugLog("工人不足! setWorkerCnt=%s,idleWorkers=%s" % (setWorkerCnt, idleWorkers))
+        return
+    
+    GameWorld.DebugLog("开始/修改淘金: campID=%s,goldID=%s,setWorkerCnt=%s,workerMax=%s,idleWorkers=%s,updWorkerCnt=%s" 
+                       % (campID, goldID, setWorkerCnt, workerMax, idleWorkers, updWorkerCnt))
+    
+    curTime = int(time.time())
+    # 未开始的
+    if not workerCnt:
+        warehouseSpaceList = IpyGameDataPY.GetFuncEvalCfg("GoldRush", 1) # 淘金仓库上限|自动淘金开启增加上限
+        canUseSpaceMax = sum(warehouseSpaceList) if GoldRushAutoCanUse(curPlayer) else warehouseSpaceList[0]
+        
+        # 未领取的
+        unGetCnt = 0
+        for index in range(sum(warehouseSpaceList)):
+            if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldRushWarehouse % index):
+                unGetCnt += 1
+                
+        if (unGetCnt + panningCnt) >= canUseSpaceMax:
+            GameWorld.DebugLog("淘金仓库没有多余空间,无法淘金! (未领取(%s) + 淘金中(%s)) >= canUseSpaceMax(%s)" % (unGetCnt, panningCnt, canUseSpaceMax))
+            return
+        
+        needSeconds = goldIpyData.GetNeedSeconds() # 单个工人所需时间
+        GameWorld.DebugLog("    未开始的! 单工人耗时=%s" % (needSeconds))
+        
+    # 中途修改的
+    else:
+        endTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldRushCampEndTime % campID)
+        reaminSeconds = max(0, endTime - curTime) # 剩余时间
+        needSeconds = reaminSeconds * workerCnt # 单个工人耗时 = 剩余时间 * 原先的工人数
+        GameWorld.DebugLog("    修改工人数! 原剩余秒=%s,剩余单工人耗时=%s" % (reaminSeconds, needSeconds))
+        
+    realNeedSeconds = int(math.ceil(needSeconds / float(updWorkerCnt)))
+    endTime = curTime + realNeedSeconds
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldRushCampEndTime % campID, endTime)
+    campInfo = SetCampInfo(curPlayer, campID, refreshCnt, goldID, updWorkerCnt)
+    GameWorld.DebugLog("    updWorkerCnt=%s,realNeedSeconds=%s,endTime=%s,campInfo=%s" 
+                       % (updWorkerCnt, realNeedSeconds, GameWorld.ChangeTimeNumToStr(endTime), campInfo))
+    return
+
+def __onGoldRushCancel(curPlayer, campID):
+    ## 取消
+    refreshCnt, goldID, workerCnt = GetCampInfo(curPlayer, campID)
+    if not workerCnt:
+        GameWorld.DebugLog("非淘金中,不需要取消! campID=%s" % (campID))
+        return
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldRushCampEndTime % campID, 0)
+    campInfo = SetCampInfo(curPlayer, campID, refreshCnt, goldID, 0)
+    GameWorld.DebugLog("取消淘金: campID=%s,goldID=%s,workerCnt=%s,campInfo=%s" % (campID, goldID, workerCnt, campInfo))
+    return
+
+#// B0 37 淘金解锁 #tagCSGoldRushUnlock
+#
+#struct    tagCSGoldRushUnlock
+#{
+#    tagHead        Head;
+#    BYTE        UnlockType;    // 0-营地;1-监工
+#    BYTE        UnlockID;        // 解锁类型对应的ID
+#};
+def OnGoldRushUnlock(index, clientData, tick):
+    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+    UnlockType = clientData.UnlockType
+    UnlockID = clientData.UnlockID
+    if UnlockType == 1:
+        __onUnlockWorker(curPlayer, UnlockID)
+    else:
+        __onUnlockCamp(curPlayer, UnlockID)
+    return
+
+def __onUnlockCamp(curPlayer, campID):
+    campState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldRushCampState)
+    if campState & pow(2, campID):
+        GameWorld.DebugLog("该营地已解锁! campID=%s,campState=%s" % (campID, campState))
+        return
+    
+    ipyData = IpyGameDataPY.GetIpyGameData("GoldRushCamp", campID)
+    if not ipyData:
+        return
+    
+    needCnt = ipyData.GetPanningUnlock()
+    panningCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldRushCnt)
+    if needCnt and panningCnt < needCnt:
+        GameWorld.DebugLog("所需淘金次数不足,无法解锁营地! campID=%s,panningCnt=%s < %s" % (campID, panningCnt, needCnt))
+        return
+    
+    moneyUnlock = ipyData.GetMoneyUnlock()
+    moneyType, costMoney = moneyUnlock if (moneyUnlock and len(moneyUnlock) == 2) else (0, 0)
+    if moneyType and costMoney and not PlayerControl.PayMoney(curPlayer, moneyType, costMoney, "GoldRushUnlockCamp"):
+        return
+    
+    campState |= pow(2, campID)
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldRushCampState, campState)
+    GameWorld.DebugLog("解锁淘金营地: campID=%s,campState=%s" % (campID, campState))
+    SyncGoldRushInfo(curPlayer)
+    return
+
+def __onUnlockWorker(curPlayer, workerID):
+    workerState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldRushWorkerState)
+    if workerState & pow(2, workerID):
+        GameWorld.DebugLog("该监工已解锁! workerID=%s,workerState=%s" % (workerID, workerState))
+        return
+    
+    ipyData = IpyGameDataPY.GetIpyGameData("GoldRushWorker", workerID)
+    if not ipyData:
+        return
+    
+    curLV = curPlayer.GetLV()
+    needLV = ipyData.GetPlayerLVUnlock()
+    if needLV and curLV < needLV:
+        GameWorld.DebugLog("所需等级次数不足,无法解锁监工! workerID=%s,curLV=%s < %s" % (workerID, curLV, needLV))
+        return
+    
+    moneyUnlock = ipyData.GetMoneyUnlock()
+    moneyType, costMoney = moneyUnlock if (moneyUnlock and len(moneyUnlock) == 2) else (0, 0)
+    if moneyType and costMoney and not PlayerControl.PayMoney(curPlayer, moneyType, costMoney, "GoldRushUnlockWorker"):
+        return
+    
+    workerState |= pow(2, workerID)
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldRushWorkerState, workerState)
+    GameWorld.DebugLog("解锁淘金监工: workerID=%s,workerState=%s" % (workerID, workerState))
+    SyncGoldRushInfo(curPlayer)
+    return
+
+#// B0 38 淘金仓库领奖 #tagCSGoldRushWarehouseAward
+#
+#struct    tagCSGoldRushWarehouseAward
+#{
+#    tagHead        Head;
+#    BYTE        AwardIndex;    // 领奖位置索引,从0开始
+#    BYTE        IsAll;        // 是否领取所有
+#};
+def OnGoldRushWarehouseAward(index, clientData, tick):
+    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+    index = clientData.AwardIndex
+    isAll = clientData.IsAll
+    GameWorld.DebugLog("淘金仓库领奖: index=%s,isAll=%s" % (index, isAll))
+    
+    getList = []
+    if isAll:
+        spaceList = IpyGameDataPY.GetFuncEvalCfg("GoldRush", 1)
+        maxSpace = sum(spaceList) if GoldRushAutoCanUse(curPlayer) else spaceList[0]
+        for index in range(maxSpace):
+            goldID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldRushWarehouse % index)
+            if not goldID:
+                continue
+            getList.append([index, goldID])
+    else:
+        goldID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldRushWarehouse % index)
+        if not goldID:
+            GameWorld.DebugLog("该位置没有已完整的淘金奖励! index=%s" % index)
+            return
+        getList.append([index, goldID])
+        
+    if not getList:
+        return
+    
+    giveItemDict = {}
+    for index, goldID in getList:
+        goldIpyData = IpyGameDataPY.GetIpyGameData("GoldRushItem", goldID)
+        if not goldIpyData:
+            continue
+        itemID = goldIpyData.GetItemID()
+        itemCount = goldIpyData.GetItemCount()
+        giveItemDict[itemID] = giveItemDict.get(itemID, 0) + itemCount
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldRushWarehouse % index, 0)
+        GameWorld.DebugLog("    index=%s,goldID=%s,itemID=%s,itemCount=%s" % (index, goldID, itemID, itemCount))
+        
+    itemList = [[itemID, itemCount] for itemID, itemCount in giveItemDict.items()]        
+    GameWorld.DebugLog("    giveItemDict=%s,itemList=%s" % (giveItemDict, itemList))
+    
+    SyncGoldRushInfo(curPlayer)
+    ItemControler.GivePlayerItemOrMail(curPlayer, itemList, event=["GoldRush", False, {}])
+    return
+
+def CheckGoldRushCamp(curPlayer):
+    ## 检查营地淘金
+    curTime = int(time.time())
+    endCampList = []
+    emptyCampList = []
+    ipyDataMgr = IpyGameDataPY.IPY_Data()
+    for index in range(ipyDataMgr.GetGoldRushCampCount()):
+        ipyData = ipyDataMgr.GetGoldRushCampByIndex(index)
+        campID = ipyData.GetCampID()
+        _, goldID, _ = GetCampInfo(curPlayer, campID)
+        endTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldRushCampEndTime % campID)
+        if not goldID:
+            emptyCampList.append([campID, endTime])
+            continue
+        if not endTime:
+            continue
+        if curTime < endTime:
+            continue
+        endCampList.append([campID, goldID])
+        
+    if endCampList:
+        __doEndCamp(curPlayer, endCampList, curTime)
+        
+    if emptyCampList:
+        __doSysRefreshCampGold(curPlayer, emptyCampList, curTime)
+        
+    return
+
+def __doEndCamp(curPlayer, endCampList, curTime):
+    syncCampIDList = []
+    spaceList = IpyGameDataPY.GetFuncEvalCfg("GoldRush", 1)
+    maxSpace = sum(spaceList) if GoldRushAutoCanUse(curPlayer) else spaceList[0]
+    for index in range(maxSpace):
+        if not endCampList:
+            break
+        if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldRushWarehouse % index):
+            continue
+        campID, goldID = endCampList.pop(0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldRushWarehouse % index, goldID)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldRushCampEndTime % campID, curTime) # 再次更新endTime
+        panningCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldRushCnt) + 1
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldRushCnt, panningCnt)
+        SetCampInfo(curPlayer, campID, 0, 0, 0, False)
+        syncCampIDList.append(campID)
+        GameWorld.DebugLog("淘金结束: campID=%s,goldID=%s,放入淘金仓库index=%s,panningCnt=%s" % (campID, goldID, index, panningCnt))
+        
+    if not syncCampIDList:
+        return
+    
+    SyncGoldCampInfo(curPlayer, syncCampIDList)
+    SyncGoldRushInfo(curPlayer)
+    return
+
+def __doSysRefreshCampGold(curPlayer, emptyCampList, curTime):
+    ## 系统自动刷新营地金矿
+    sysRefreshCD = IpyGameDataPY.GetFuncCfg("GoldRushRefresh", 4) * 60
+    if not sysRefreshCD:
+        return
+    
+    syncCampIDList = []
+    refreshCnt, workerCnt = 0, 0
+    for campID, endTime in emptyCampList:
+        if endTime and (curTime - endTime) < sysRefreshCD:
+            #GameWorld.DebugLog("系统自动刷新淘金营地金矿CD未到: campID=%s,endTime=%s,sysRefreshCD=%s > %s" % (campID, endTime, sysRefreshCD, curTime - endTime))
+            continue
+        
+        ipyData = GetRefreshGoldItemIpyData(curPlayer)
+        if not ipyData:
+            continue
+        
+        goldID = ipyData.GetGoldID()
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldRushCampEndTime % campID, 0)
+        campInfo = SetCampInfo(curPlayer, campID, refreshCnt, goldID, workerCnt, False)
+        GameWorld.DebugLog("系统自动刷新淘金营地金矿: campID=%s,goldID=%s,campInfo=%s" % (campID, goldID, campInfo))
+        syncCampIDList.append(campID)
+        
+    if syncCampIDList:
+        SyncGoldCampInfo(curPlayer, syncCampIDList)
+        
+    return
+
+#// B0 39 自动淘金免费使用 #tagCSGoldRushAutoFreeUse
+#
+#struct    tagCSGoldRushAutoFreeUse
+#{
+#    tagHead        Head;
+#};
+def OnGoldRushAutoFreeUse(index, clientData, tick):
+    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+    OnActGoldRushAuto(curPlayer, 0)
+    return
+
+def OnGoldRushByCTGID(curPlayer, ctgID):
+    keeperCTGIDList = IpyGameDataPY.GetFuncEvalCfg("GoldRushAuto", 2)
+    for keeperIndex, ctgIDList in enumerate(keeperCTGIDList, 1):
+        if ctgID in ctgIDList:
+            OnActGoldRushAuto(curPlayer, keeperIndex)
+            break
+    return
+
+def OnActGoldRushAuto(curPlayer, keeperIndex):
+    ## 激活/增加自动管家时长
+    # @param keeperIndex: 管家档位索引,0-免费,>0-付费档
+    
+    playerID = curPlayer.GetPlayerID()
+    endTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldRushAutoEndTime)
+    if keeperIndex == 0:
+        if endTime:
+            GameWorld.DebugLog("淘金免费管家已领取过!", playerID)
+            return
+        
+    keeperDaysList = IpyGameDataPY.GetFuncEvalCfg("GoldRushAuto", 1)
+    if keeperIndex < 0 or keeperIndex >= len(keeperDaysList):
+        return
+    addDays = keeperDaysList[keeperIndex]
+    addSeconds = addDays * 24 * 3600
+    curTime = int(time.time())
+    
+    endTimeStr = GameWorld.ChangeTimeNumToStr(endTime) if endTime else ""
+    GameWorld.DebugLog("激活淘金管家: keeperIndex=%s,addDays=%s(%s)" % (keeperIndex, addDays, addSeconds), playerID)
+    GameWorld.DebugLog("    管家到期时间: endTime=%s, %s" % (endTime, endTimeStr), playerID)
+    if not endTime:
+        updEndTime = curTime + addSeconds
+        GameWorld.DebugLog("    激活管家", playerID)
+    elif curTime >= endTime:
+        updEndTime = curTime + addSeconds 
+        GameWorld.DebugLog("    已过期,重新激活管家", playerID)
+    else:
+        updEndTime = endTime + addSeconds
+        GameWorld.DebugLog("    续费管家时长", playerID)
+        
+    GameWorld.DebugLog("    更新管家到期时间: updEndTime=%s, %s" % (updEndTime, GameWorld.ChangeTimeNumToStr(updEndTime)), playerID)
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldRushAutoEndTime, updEndTime)
+    SyncGoldRushInfo(curPlayer)
+    return
+
+def SyncGoldRushInfo(curPlayer):
+    clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCGoldRushInfo)
+    clientPack.CampState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldRushCampState)
+    clientPack.WorkerState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldRushWorkerState)
+    clientPack.PanningCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldRushCnt)
+    clientPack.LastRecoverTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldRushRecoverTime)
+    clientPack.HousekeeperEndTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldRushAutoEndTime)
+    clientPack.WarehouseIDList = []
+    for index in range(sum(IpyGameDataPY.GetFuncEvalCfg("GoldRush", 1))):
+        goldID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldRushWarehouse % index)
+        clientPack.WarehouseIDList.append(goldID)
+    clientPack.WarehouseCnt = len(clientPack.WarehouseIDList)
+    NetPackCommon.SendFakePack(curPlayer, clientPack)
+    return
+
+def SyncGoldCampInfo(curPlayer, syncCampIDList=None):
+    poolMgr = ObjPool.GetPoolMgr()
+    campList = []
+    ipyDataMgr = IpyGameDataPY.IPY_Data()
+    for index in range(ipyDataMgr.GetGoldRushCampCount()):
+        ipyData = ipyDataMgr.GetGoldRushCampByIndex(index)
+        campID = ipyData.GetCampID()
+        if syncCampIDList and campID not in syncCampIDList:
+            continue
+        refreshCnt, goldID, workerCnt = GetCampInfo(curPlayer, campID)
+        camp = poolMgr.acquire(ChPyNetSendPack.tagSCGoldRushCamp)
+        camp.CampID = campID
+        camp.GoldID = goldID
+        camp.RefreshCnt = refreshCnt
+        camp.WorkerCnt = workerCnt
+        camp.EndTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldRushCampEndTime % campID)
+        campList.append(camp)
+    if not campList:
+        return
+    clientPack = poolMgr.acquire(ChPyNetSendPack.tagSCGoldRushCampInfo)
+    clientPack.CampList = campList
+    clientPack.CampCnt = len(clientPack.CampList)
+    NetPackCommon.SendFakePack(curPlayer, clientPack)
+    return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMineArea.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMineArea.py
deleted file mode 100644
index c16d685..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMineArea.py
+++ /dev/null
@@ -1,454 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.PlayerMineArea
-#
-# @todo:矿物福地
-# @author hxp
-# @date 2024-03-07
-# @version 1.0
-#
-# 详细描述: 矿物福地
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2024-03-07 19:30"""
-#-------------------------------------------------------------------------------
-
-import ChConfig
-import PlayerControl
-import IpyGameDataPY
-import IPY_GameWorld
-import ChPyNetSendPack
-import PlayerActTask
-import NetPackCommon
-import ItemControler
-import PlayerSuccess
-import ShareDefine
-import ItemCommon
-import GameWorld
-import time
-
-# 聚宝盆默认最大进度
-MineTreasureProgressMax = 100
-
-# 刷新类型列表
-RefreshTypeList = (
-RefreshType_Comm, # 自己物品普通刷新 0
-RefreshType_Super, # 自己物品超级刷新 1
-RefreshType_Rob, # 抢劫周围玩家刷新 2
-) = range(3)
-
-def OnPlayerLogin(curPlayer):
-    freeWorkerCount = 0
-    workerNeedItemList = IpyGameDataPY.GetFuncEvalCfg("MineAreaWorker", 3)
-    for needItemCount in workerNeedItemList:
-        if needItemCount:
-            break
-        freeWorkerCount += 1
-    if freeWorkerCount > curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineWorkerCount):
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineWorkerCount, freeWorkerCount)
-    SyncPlayerMineAreaInfo(curPlayer)
-    return
-
-def PlayerOnDay(curPlayer):
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineHelpAwardCount, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineWorkerEnergyUsed, 0)
-    for refreshType in RefreshTypeList:
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineRefreshCount % refreshType, 0)
-    SyncPlayerMineAreaInfo(curPlayer)
-    return
-
-def GetWorkerTotal(curPlayer):
-    ## 获取玩家工人总数
-    initCount = 0 # 起始默认工人数
-    employCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineWorkerCount)
-    return initCount + employCount
-
-def GetWorkerState(curPlayer):
-    ## 获取工人疲劳状态
-    workerStateEnergyList = IpyGameDataPY.GetFuncEvalCfg("MineAreaWorker", 1) # 工人疲劳状态体力列表 [充沛体力, 正常, 虚弱, 枯竭],总体力=所有体力相加
-    funcEnergy = 0 # 其他功能增加的体力
-    stateEnergy = 0
-    energyUsed = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineWorkerEnergyUsed)
-    for state, energy in enumerate(workerStateEnergyList):
-        if state == 0:
-            energy += funcEnergy
-        stateEnergy += energy
-        if energyUsed < stateEnergy:
-            return state
-    return -1
-
-#// B0 30 福地物品拉 #tagCMMineItemPull
-#
-#struct    tagCMMineItemPull
-#{
-#    tagHead        Head;
-#    DWORD        PlayerID;        // 福地所属玩家ID,0默认自己
-#    BYTE        ItemIndex;    // 物品所在位置索引0~n
-#    BYTE        WorkerCount;    // 上工人人数
-#    BYTE        IsPreview;    // 是否预览;0-直接拉,1-预览大概时间
-#};
-def OnMineItemPull(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    areaPlayerID = clientData.PlayerID
-    itemIndex = clientData.ItemIndex
-    workerCount = clientData.WorkerCount
-    isPreview = clientData.IsPreview
-    if not areaPlayerID:
-        areaPlayerID = curPlayer.GetPlayerID()
-        
-    workerTotal = GetWorkerTotal(curPlayer)
-    workerState = GetWorkerState(curPlayer)
-    if workerCount > 0 and workerState < 0:
-        energyUsed = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineWorkerEnergyUsed)
-        GameWorld.DebugLog("福地疲劳值已满,无法再拉物品! energyUsed=%s" % energyUsed)
-        return
-    
-    SendToGameServer_MineArea(curPlayer, "Pull", [areaPlayerID, itemIndex, workerCount, workerState, workerTotal, isPreview])
-    return
-
-#// B0 31 福地物品刷新 #tagCMMineItemRefresh
-#
-#struct    tagCMMineItemRefresh
-#
-#{
-#    tagHead        Head;
-#    BYTE        RefreshType;    // 刷新类型:0-自己物品普通刷新;1-自己物品超级刷新;2-周围福地玩家列表刷新
-#};
-def OnMineItemRefresh(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    playerID = curPlayer.GetPlayerID()
-    refreshType = clientData.RefreshType
-    
-    moneyType, moneyValue = 0, 0
-    moneyDict = IpyGameDataPY.GetFuncEvalCfg("MineAreaRefresh", 1, {})
-    if str(refreshType) in moneyDict:
-        moneyType, moneyValue = moneyDict[str(refreshType)]
-        if not PlayerControl.HaveMoney(curPlayer, moneyType, moneyValue):
-            return
-        
-    costItemID, costItemCount = 0, 0
-    refreshMaxDict = IpyGameDataPY.GetFuncEvalCfg("MineAreaRefresh", 2, {})
-    refreshCountMax = refreshMaxDict.get(str(refreshType), 0)
-    refreshCountNow = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineRefreshCount % refreshType)
-    if refreshCountMax and refreshCountNow >= refreshCountMax:
-        if refreshType == RefreshType_Super:
-            employCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineWorkerCount)
-            employMax = len(IpyGameDataPY.GetFuncEvalCfg("MineAreaWorker", 3))
-            if employCount < employMax:
-                GameWorld.DebugLog("福地雇佣工人数未达到上限,不能使用雇佣道具进行超级刷新! employCount=%s < %s" % (employCount, employMax), playerID)
-                return
-            costItemID = IpyGameDataPY.GetFuncCfg("MineAreaWorker", 2)
-            costItemCount = IpyGameDataPY.GetFuncCfg("MineAreaRefresh", 3)
-            costItemIndexList, bindCnt, unBindCnt = ItemCommon.GetPackItemBindStateIndexInfo(curPlayer, costItemID, costItemCount)
-            lackCnt = costItemCount - bindCnt - unBindCnt
-            if lackCnt > 0:
-                GameWorld.DebugLog("福地雇佣工人道具不足,无法超级刷新! costItemID=%s,costItemCount=%s,bindCnt=%s,unBindCnt=%s,lackCnt=%s" 
-                                   % (costItemID, costItemCount, bindCnt, unBindCnt, lackCnt))
-                return
-        else:
-            GameWorld.DebugLog("福地物品刷新次数已达今日上限! refreshType=%s,refreshCountNow=%s >= %s" % (refreshType, refreshCountNow, refreshCountMax), playerID)
-            return
-        
-    GameWorld.DebugLog("福地刷新: refreshType=%s,refreshCountNow=%s,moneyType=%s,moneyValue=%s,costItemID=%s,costItemCount=%s" 
-                       % (refreshType, refreshCountNow, moneyType, moneyValue, costItemID, costItemCount), playerID)
-    if moneyType and moneyValue:
-        PlayerControl.PayMoney(curPlayer, moneyType, moneyValue, "MineItemRefresh")
-        
-    if costItemID and costItemCount:
-        delCnt = costItemCount
-        ItemCommon.DelCostItemByBind(curPlayer, costItemIndexList, bindCnt, unBindCnt, delCnt, "MineItemRefresh")
-        
-    if refreshCountMax and refreshCountNow < refreshCountMax:
-        refreshCountUpd = refreshCountNow + 1
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineRefreshCount % refreshType, refreshCountUpd)
-        SyncPlayerMineAreaInfo(curPlayer)
-        
-    if refreshType == RefreshType_Rob:
-        SendToGameServer_MineArea(curPlayer, "MineRobRefresh", [])
-    else:
-        isSuper = 1 if refreshType == RefreshType_Super else 0
-        SendToGameServer_MineArea(curPlayer, "MineItemRefresh", [playerID, isSuper])
-    return
-
-#// B0 32 福地工人雇佣 #tagCMMineWorkerEmploy
-#
-#struct    tagCMMineWorkerEmploy
-#
-#{
-#    tagHead        Head;
-#};
-def OnMineWorkerEmploy(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    playerID = curPlayer.GetPlayerID()
-    employCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineWorkerCount)
-    
-    costItemCountList = IpyGameDataPY.GetFuncEvalCfg("MineAreaWorker", 3)
-    if employCount >= len(costItemCountList):
-        GameWorld.DebugLog("已达到福地雇佣工人数上限! employCount=%s" % employCount)
-        return
-    costItemCount = costItemCountList[employCount]
-    costItemID = IpyGameDataPY.GetFuncCfg("MineAreaWorker", 2)
-    if not costItemID:
-        return
-    
-    # 支持配0不消耗个数
-    if costItemCount > 0:
-        costItemIndexList, bindCnt, unBindCnt = ItemCommon.GetPackItemBindStateIndexInfo(curPlayer, costItemID, costItemCount)
-        lackCnt = costItemCount - bindCnt - unBindCnt
-        if lackCnt > 0:
-            GameWorld.DebugLog("福地雇佣工人道具不足! costItemID=%s,costItemCount=%s,bindCnt=%s,unBindCnt=%s,lackCnt=%s,已雇佣数=%s" 
-                               % (costItemID, costItemCount, bindCnt, unBindCnt, lackCnt, employCount))
-            return
-        delCnt = costItemCount
-        ItemCommon.DelCostItemByBind(curPlayer, costItemIndexList, bindCnt, unBindCnt, delCnt, "MineWorkerEmploy")
-        
-    updEmployCount = employCount + 1
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineWorkerCount, updEmployCount)
-    SyncPlayerMineAreaInfo(curPlayer)
-    GameWorld.DebugLog("福地雇佣工人! costItemID=%s,costItemCount=%s,updEmployCount=%s" % (costItemID, costItemCount, updEmployCount), playerID)
-    return
-
-def SendToGameServer_MineArea(curPlayer, msgType, dataMsg=""):
-    playerID = curPlayer.GetPlayerID()
-    msgList = str([msgType, dataMsg])
-    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(playerID, 0, 0, "MineArea", msgList, len(msgList))
-    GameWorld.Log("福地发送GameServer: %s, %s" % (msgType, dataMsg), playerID)
-    return
-
-def GameServer_MineArea_DoResult(curPlayer, msgData):
-    
-    msgType, dataMsg, _ = msgData
-    
-    ## 结算奖励
-    if msgType == "MineAreaAwardGet":
-        awardInfoList = dataMsg[0]
-        __DoGiveMineAreaAward(curPlayer, awardInfoList)
-          
-    ## 取消拉取 (包含主动 或 被动驱赶)
-    elif msgType == "MineAreaCancelPull":
-        areaPlayerID, reason =  dataMsg
-        __OnMineAreaPullEnd(curPlayer, areaPlayerID, reason)
-        
-    ## 拉取
-    elif msgType == "Pull":
-        areaPlayerID = dataMsg[0]
-        isRob = (areaPlayerID and curPlayer.GetPlayerID() != areaPlayerID)
-    return
-
-def __DoGiveMineAreaAward(curPlayer, awardInfoList):
-    
-    playerID = curPlayer.GetPlayerID()
-    energyUsed = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineWorkerEnergyUsed)
-    addEnergyUsed = 0
-    awardItemDict = {}
-    robCount = 0 # 抢劫数
-    selfCount = 0 # 自己数量
-    for awardInfo in awardInfoList:
-        awardTime, workerCount, areaPlayerID, mineID, itemLV, itemID, itemCount = awardInfo
-        isToday = GameWorld.CheckTimeIsSameServerDayEx(awardTime)
-        if isToday:
-            addEnergyUsed += workerCount
-        if playerID != areaPlayerID:
-            robCount += 1
-        else:
-            selfCount += 1
-        awardItemDict[itemID] = awardItemDict.get(itemID, 0) + itemCount
-        GameWorld.DebugLog("结算福地奖励! areaPlayerID=%s,mineID=%s,itemLV=%s,itemID=%s,itemCount=%s,awardTime=%s,isToday=%s,workerCount=%s" 
-                           % (areaPlayerID, mineID, itemLV, itemID, itemCount, GameWorld.ChangeTimeNumToStr(awardTime), isToday, workerCount), playerID)
-        __OnMineAreaPullEnd(curPlayer, areaPlayerID, "OK")
-        
-    if addEnergyUsed:
-        energyUsed += addEnergyUsed
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineWorkerEnergyUsed, energyUsed)
-        GameWorld.DebugLog("    增加福地工人已用精力! addEnergyUsed=%s,updEnergyUsed=%s" % (addEnergyUsed, energyUsed), playerID)
-        
-    PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_MineAreaCnt, selfCount + robCount)
-    if selfCount:
-        PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_MineAreaSelfCnt, selfCount)
-    if robCount:
-        PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_MineAreaRobCnt, robCount)
-        OnAddMineTreasureProgress(curPlayer, robCount, False)
-        
-    SyncPlayerMineAreaInfo(curPlayer)
-    
-    awardItemList = [[itemID, itemCount, 0] for itemID, itemCount in awardItemDict.items()]
-    ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, None, ["MineAreaAward", False, {}])
-    
-    SendToGameServer_MineArea(curPlayer, "MineAreaAwardGetOK", [None, awardItemList])
-    return
-
-def __OnMineAreaPullEnd(curPlayer, areaPlayerID, reason):
-    ## 拉取结束额外处理, 包含拉完、取消、被驱赶等
-    GameWorld.DebugLog("__OnMineAreaPullEnd: areaPlayerID=%s, reason=%s" % (areaPlayerID, reason))
-    if curPlayer.GetPlayerID() == areaPlayerID:
-        PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_MineAreaEndSelf)
-    else:
-        PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_MineAreaEndOther)
-    return
-
-#// B0 35 福地管家免费试用 #tagCMMineHouseKeeperFreeUse
-#
-#struct    tagCMMineHouseKeeperFreeUse
-#{
-#    tagHead        Head;
-#};
-def OnMineHouseKeeperFreeUse(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    OnActMineHousekeeper(curPlayer, 0)
-    return
-
-def OnMineTreasureByCTGID(curPlayer, ctgID):
-    ## 充值激活聚宝盆
-    treasureCTGIDList = IpyGameDataPY.GetFuncEvalCfg("MineAreaTreasure", 1)
-    for treasureType, ctgIDList in enumerate(treasureCTGIDList):
-        if not ctgIDList or ctgID not in ctgIDList: # 配空列表的默认激活
-            continue
-        state = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineTreasureState)
-        if state&pow(2, treasureType):
-            break
-        updState = state|pow(2, treasureType)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineTreasureState, updState)
-        SyncPlayerMineAreaInfo(curPlayer)
-        GameWorld.Log("激活福地聚宝盆: treasureType=%s,updState=%s" % (treasureType, updState), curPlayer.GetPlayerID())
-        break
-    
-    keeperCTGIDList = IpyGameDataPY.GetFuncEvalCfg("MineAreaHousekeeper", 3)
-    for keeperIndex, ctgIDList in enumerate(keeperCTGIDList, 1):
-        if ctgID in ctgIDList:
-            OnActMineHousekeeper(curPlayer, keeperIndex)
-            break
-        
-    return
-
-def OnAddMineTreasureProgress(curPlayer, robCount, isNotify=True):
-    ## 增加聚宝盆进度
-    # @param robCount: 抢夺物品数
-    if robCount <= 0:
-        return
-    
-    playerID = curPlayer.GetPlayerID()
-    treasureCTGIDList = IpyGameDataPY.GetFuncEvalCfg("MineAreaTreasure", 1)    
-    treasureAddProgressList = IpyGameDataPY.GetFuncEvalCfg("MineAreaTreasure", 2)
-    treasureState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineTreasureState)
-    for treasureType, addProgressSet in enumerate(treasureAddProgressList):
-        ctgIDList = treasureCTGIDList[treasureType]
-        isActivite = 1 if (not ctgIDList or treasureState&pow(2, treasureType)) else 0
-        if not isActivite:
-            continue
-        curProgress = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineTreasureProgess % treasureType)
-        if curProgress >= MineTreasureProgressMax:
-            continue
-        addProgress = addProgressSet * robCount
-        updProgress = min(curProgress + addProgress, MineTreasureProgressMax)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineTreasureProgess % treasureType, updProgress)
-        GameWorld.DebugLog("    增加福地聚宝盆进度: robCount=%s,treasureType=%s,curProgress=%s,addProgress=%s,updProgress=%s" 
-                           % (robCount, treasureType, curProgress, addProgress, updProgress), playerID)
-        
-    if isNotify:
-        SyncPlayerMineAreaInfo(curPlayer)
-    return
-
-def GetMineTreasureAward(curPlayer, treasureType):
-    ## 领取聚宝盆奖励
-    
-    playerID = curPlayer.GetPlayerID()
-    
-    treasureAward = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineTreasureAward)
-    if treasureAward&pow(2, treasureType):
-        GameWorld.DebugLog("福地聚宝盆奖励已领取过! treasureType=%s,treasureAward=%s" % (treasureType, treasureAward), playerID)
-        return
-    
-    curProgress = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineTreasureProgess % treasureType)
-    if curProgress < MineTreasureProgressMax:
-        GameWorld.DebugLog("福地聚宝盆进度未满,无法领奖! treasureType=%s,curProgress=%s" % (treasureType, curProgress), playerID)
-        return
-    
-    treasureAwardList = IpyGameDataPY.GetFuncEvalCfg("MineAreaTreasure", 3)
-    if treasureType >= len(treasureAwardList):
-        return
-    awardItemList = treasureAwardList[treasureType]
-    
-    if not ItemControler.CheckPackSpaceEnough(curPlayer, awardItemList):
-        return
-    
-    updAward = treasureAward|pow(2, treasureType)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineTreasureAward, updAward)
-    SyncPlayerMineAreaInfo(curPlayer)
-    
-    for itemID, itemCount, isAuctionItem in awardItemList:
-        ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem])
-        
-    GameWorld.DebugLog("福地聚宝盆领奖! treasureType=%s,updAward=%s,awardItemList=%s" % (treasureType, updAward, awardItemList), playerID)
-    return
-
-def OnActMineHousekeeper(curPlayer, keeperIndex):
-    ## 激活/增加自动管家时长
-    # @param keeperIndex: 管家档位索引,0-免费,>0-付费档
-    
-    playerID = curPlayer.GetPlayerID()
-    endTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineHousekeeperEndTime)
-    if keeperIndex == 0:
-        if endTime:
-            GameWorld.DebugLog("福地免费管家已领取过!", playerID)
-            return
-        
-    openServerDayLimit = IpyGameDataPY.GetFuncCfg("MineAreaHousekeeper", 1)
-    if openServerDayLimit:
-        openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
-        if openServerDay <= openServerDayLimit:
-            GameWorld.ErrLog("开服天未到,无法使用福地管家! keeperIndex=%s,openServerDay=%s <= %s" 
-                             % (keeperIndex, openServerDay, openServerDayLimit), playerID)
-            return
-        
-    keeperDaysList = IpyGameDataPY.GetFuncEvalCfg("MineAreaHousekeeper", 2)
-    if keeperIndex < 0 or keeperIndex >= len(keeperDaysList):
-        return
-    addDays = keeperDaysList[keeperIndex]
-    addSeconds = addDays * 24 * 3600
-    curTime = int(time.time())
-    
-    endTimeStr = GameWorld.ChangeTimeNumToStr(endTime) if endTime else ""
-    GameWorld.DebugLog("激活福地管家: keeperIndex=%s,addDays=%s(%s)" % (keeperIndex, addDays, addSeconds), playerID)
-    GameWorld.DebugLog("    管家到期时间: endTime=%s, %s" % (endTime, endTimeStr), playerID)
-    if not endTime:
-        updEndTime = curTime + addSeconds
-        GameWorld.DebugLog("    激活管家", playerID)
-    elif curTime >= endTime:
-        updEndTime = curTime + addSeconds 
-        GameWorld.DebugLog("    已过期,重新激活管家", playerID)
-    else:
-        updEndTime = endTime + addSeconds
-        GameWorld.DebugLog("    续费管家时长", playerID)
-        
-    GameWorld.DebugLog("    更新管家时长: updEndTime=%s, %s" % (updEndTime, GameWorld.ChangeTimeNumToStr(updEndTime)), playerID)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineHousekeeperEndTime, updEndTime)
-    SyncPlayerMineAreaInfo(curPlayer)
-    return
-
-def SyncPlayerMineAreaInfo(curPlayer):
-    clientPack = ChPyNetSendPack.tagMCPlayerMineAreaInfo()
-    clientPack.WorkerCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineWorkerCount)
-    clientPack.EnergyUsed = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineWorkerEnergyUsed)
-    clientPack.HousekeeperEndTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineHousekeeperEndTime)
-    clientPack.HelpAwardCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineHelpAwardCount)
-    clientPack.RefreshCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineRefreshCount % RefreshType_Comm)
-    clientPack.RefreshCountSuper = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineRefreshCount % RefreshType_Super)
-    clientPack.RefreshCountRob = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineRefreshCount % RefreshType_Rob)
-    
-    treasureState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineTreasureState)
-    treasureAward = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineTreasureAward)
-    treasureCTGIDList = IpyGameDataPY.GetFuncEvalCfg("MineAreaTreasure", 1)
-    clientPack.TreasureCount = len(treasureCTGIDList)
-    clientPack.TreasureState = [0] * clientPack.TreasureCount
-    clientPack.TreasureAward = [0] * clientPack.TreasureCount
-    clientPack.TreasureProgress = [0] * clientPack.TreasureCount
-    for treasureType, ctgIDList in enumerate(treasureCTGIDList):
-        isActivite = 1 if (not ctgIDList or treasureState&pow(2, treasureType)) else 0
-        clientPack.TreasureState[treasureType] = isActivite
-        clientPack.TreasureAward[treasureType] = 1 if treasureAward&pow(2, treasureType) else 0
-        clientPack.TreasureProgress[treasureType] = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineTreasureProgess % treasureType)
-        
-    NetPackCommon.SendFakePack(curPlayer, clientPack)
-    return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
index 2f28b04..caf58b5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
@@ -42,6 +42,7 @@
 import PlayerFace
 import PlayerBackup
 import PlayerOnline
+import PlayerGoldRush
 
 #---------------------------------------------------------------------
 #---------------------------------------------------------------------
@@ -1005,6 +1006,7 @@
     #放在刷buff前
     #ProcessPassiveSkill(curPlayer, tick)
     
+    ProcessPlayerSecond(curPlayer, tick)
     ProcessPlayerMinute(curPlayer, tick)
     
     PlayerOnline.GetOnlinePlayer(curPlayer).DoRefreshRoleAttr()
@@ -1035,14 +1037,7 @@
     
     #恶意攻击时间处理
     #AttackCommon.ProcessMaliciousAttackPlayer(curPlayer, tick)
-    #成就
-    PlayerSuccess.FinishDelayAddSuccessProgress(curPlayer, tick, False)
-    #限时抢购
-    PlayerFlashSale.ProcessFlashSaleMail(curPlayer, tick)
-    #地图经验
-    #ProcessAreaExp(curPlayer, tick)
-    #神秘商店刷新
-    FunctionNPCCommon.CheckMysticalShopRefresh(curPlayer, tick)
+
     #活跃放置
     #PlayerActivity.ProcessActivityPlace(curPlayer)
     #自定义场景
@@ -1055,6 +1050,23 @@
     #CrossPlayerData.ProcessCrossPlayer(curPlayer, tick)
     return
 
+def ProcessPlayerSecond(curPlayer, tick):
+    #玩家每秒处理,玩家Process可能每秒多次,所以增加一个每秒处理的,减少执行次数
+    lastTick = curPlayer.GetDictByKey("ProcessPlayerSecond")
+    if tick - lastTick < 1000:
+        return
+    curPlayer.SetDict("ProcessPlayerSecond", tick)
+    
+    #成就
+    PlayerSuccess.FinishDelayAddSuccessProgress(curPlayer, tick, False)
+    #限时抢购
+    PlayerFlashSale.ProcessFlashSaleMail(curPlayer, tick)
+    #神秘商店刷新
+    FunctionNPCCommon.CheckMysticalShopRefresh(curPlayer, tick)
+    #淘金
+    PlayerGoldRush.OnProcess(curPlayer)
+    return
+
 def ProcessPlayerMinute(curPlayer, tick):
     #玩家每分钟处理
     lastTick = curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_Minute)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_MineArea.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_MineArea.py
deleted file mode 100644
index d686788..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_MineArea.py
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package Player.RemoteQuery.GY_Query_MineArea
-#
-# @todo:福地
-# @author hxp
-# @date 2024-03-07
-# @version 1.0
-#
-# 详细描述: 福地
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2024-03-07 19:30"""
-#-------------------------------------------------------------------------------
-
-import GameWorld
-import PlayerMineArea
-
-#---------------------------------------------------------------------
-#逻辑实现
-## 请求逻辑
-#  @param query_Type 请求类型
-#  @param query_ID 请求的玩家ID
-#  @param packCMDList 发包命令 [ ]
-#  @param tick 当前时间
-#  @return "True" or "False" or ""
-#  @remarks 函数详细说明.
-def DoLogic(query_Type, query_ID, packCMDList, tick):
-    return ""
-
-#---------------------------------------------------------------------
-#执行结果
-## 执行结果
-#  @param curPlayer 发出请求的玩家
-#  @param callFunName 功能名称
-#  @param funResult 查询的结果
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def DoResult(curPlayer, callFunName, funResult, tick):
-    GameWorld.DebugLog("GY_Query_MineArea DoResult %s" % str(funResult), curPlayer.GetPlayerID())
-    if funResult != "":
-        PlayerMineArea.GameServer_MineArea_DoResult(curPlayer, eval(funResult))
-    return
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/Collections/CollectionDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/Collections/CollectionDefine.py
index 7ba59e3..d7294bb 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/Collections/CollectionDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/Collections/CollectionDefine.py
@@ -24,9 +24,6 @@
 UCN_DBPyFuncTeam="tagDBPyFuncTeam"
 UCN_DBPyFuncTeamMem="tagDBPyFuncTeamMem"
 UCN_DBPlayerRecData="tagDBPlayerRecData"
-UCN_DBPyMineAreaAward="tagDBPyMineAreaAward"
-UCN_DBPyMineAreaRecord="tagDBPyMineAreaRecord"
-UCN_DBPyMineAreaItem="tagDBPyMineAreaItem"
 UCN_DBPyCouple="tagDBPyCouple"
 UCN_DBPyUnNotifyLoveGiftRec="tagDBPyUnNotifyLoveGiftRec"
 UCN_DBPyCharmValueRec="tagDBPyCharmValueRec"
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/Collections/DataServerPlayerData.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/Collections/DataServerPlayerData.py
index 9b2dbc8..375b3b6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/Collections/DataServerPlayerData.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/Collections/DataServerPlayerData.py
@@ -24588,527 +24588,6 @@
             )
         return output
 
- 
-# 福地矿物表 #tagDBPyMineAreaItem
-class tagDBPyMineAreaItem(Structure):
-    _pack_ = 1
-    _fields_ = [
-        ('PlayerID', ctypes.c_ulong),
-        ('Index', ctypes.c_ubyte),
-        ('MineID', ctypes.c_ushort),
-        ('MineType', ctypes.c_ubyte),
-        ('UpdTime', ctypes.c_ulong),
-        ('PosLen', ctypes.c_ubyte),
-        ('Position', ctypes.c_char_p),
-        ('WorkerCount', ctypes.c_ubyte),
-        ('WorkerState', ctypes.c_ubyte),
-        ('RobPlayerID', ctypes.c_ulong),
-        ('RobWorkerCount', ctypes.c_ubyte),
-        ('RobWorkerState', ctypes.c_ubyte),
-        ('ADOResult', ctypes.c_ulong),
-    ]
-
-    def __init__(self):
-        Structure.__init__(self)
-        self.clear()
-
-    def clear(self):
-        self.PlayerID = 0
-        self.Index = 0
-        self.MineID = 0
-        self.MineType = 0
-        self.UpdTime = 0
-        self.PosLen = 0
-        self.Position = ''
-        self.WorkerCount = 0
-        self.WorkerState = 0
-        self.RobPlayerID = 0
-        self.RobWorkerCount = 0
-        self.RobWorkerState = 0
-
-    def readData(self, buf, pos = 0, length = 0):
-        if not pos <= length:
-            msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length))
-            mylog.error(msg)
-            return -1
-        if len(buf) < pos + self.getLength():
-            msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength()))
-            mylog.error(msg)
-        self.clear()
-        self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos)
-        self.Index, pos = CommFunc.ReadBYTE(buf, pos)
-        self.MineID, pos = CommFunc.ReadWORD(buf, pos)
-        self.MineType, pos = CommFunc.ReadBYTE(buf, pos)
-        self.UpdTime, pos = CommFunc.ReadDWORD(buf, pos)
-        self.PosLen, pos = CommFunc.ReadBYTE(buf, pos)
-        tmp, pos = CommFunc.ReadString(buf, pos, self.PosLen)
-        self.Position = ctypes.c_char_p(tmp)
-        self.WorkerCount, pos = CommFunc.ReadBYTE(buf, pos)
-        self.WorkerState, pos = CommFunc.ReadBYTE(buf, pos)
-        self.RobPlayerID, pos = CommFunc.ReadDWORD(buf, pos)
-        self.RobWorkerCount, pos = CommFunc.ReadBYTE(buf, pos)
-        self.RobWorkerState, pos = CommFunc.ReadBYTE(buf, pos)
-        return self.getLength()
-
-    def getBuffer(self):
-        buf = ''
-        buf = CommFunc.WriteDWORD(buf, self.PlayerID)
-        buf = CommFunc.WriteBYTE(buf, self.Index)
-        buf = CommFunc.WriteWORD(buf, self.MineID)
-        buf = CommFunc.WriteBYTE(buf, self.MineType)
-        buf = CommFunc.WriteDWORD(buf, self.UpdTime)
-        buf = CommFunc.WriteBYTE(buf, self.PosLen)
-        buf = CommFunc.WriteString(buf, self.PosLen, self.Position)
-        buf = CommFunc.WriteBYTE(buf, self.WorkerCount)
-        buf = CommFunc.WriteBYTE(buf, self.WorkerState)
-        buf = CommFunc.WriteDWORD(buf, self.RobPlayerID)
-        buf = CommFunc.WriteBYTE(buf, self.RobWorkerCount)
-        buf = CommFunc.WriteBYTE(buf, self.RobWorkerState)
-        return buf
-
-    def getLength(self):
-        length = 0
-        length += sizeof(ctypes.c_ulong)
-        length += sizeof(ctypes.c_ubyte)
-        length += sizeof(ctypes.c_ushort)
-        length += sizeof(ctypes.c_ubyte)
-        length += sizeof(ctypes.c_ulong)
-        length += sizeof(ctypes.c_ubyte)
-        length += self.PosLen
-        length += sizeof(ctypes.c_ubyte)
-        length += sizeof(ctypes.c_ubyte)
-        length += sizeof(ctypes.c_ulong)
-        length += sizeof(ctypes.c_ubyte)
-        length += sizeof(ctypes.c_ubyte)
-        return length
-
-    def getRecord(self):
-        '''组织存储记录'''
-        rec = {}
-        rec[u'PlayerID'] = self.PlayerID
-        rec[u'Index'] = self.Index
-        rec[u'MineID'] = self.MineID
-        rec[u'MineType'] = self.MineType
-        rec[u'UpdTime'] = self.UpdTime
-        rec[u'PosLen'] = self.PosLen
-        rec[u'Position'] = fix_incomingText(self.Position)
-        rec[u'WorkerCount'] = self.WorkerCount
-        rec[u'WorkerState'] = self.WorkerState
-        rec[u'RobPlayerID'] = self.RobPlayerID
-        rec[u'RobWorkerCount'] = self.RobWorkerCount
-        rec[u'RobWorkerState'] = self.RobWorkerState
-        return rec
-
-    def readRecord(self, rec):
-        '''由于MongoDB读出来是unicode,所有字符串需要进行转换'''
-        self.PlayerID = rec.get(u'PlayerID', 0)
-        self.Index = rec.get(u'Index', 0)
-        self.MineID = rec.get(u'MineID', 0)
-        self.MineType = rec.get(u'MineType', 0)
-        self.UpdTime = rec.get(u'UpdTime', 0)
-        self.PosLen = rec.get(u'PosLen', 0)
-        self.Position = fix_outgoingText(rec.get(u'Position', u''))
-        self.WorkerCount = rec.get(u'WorkerCount', 0)
-        self.WorkerState = rec.get(u'WorkerState', 0)
-        self.RobPlayerID = rec.get(u'RobPlayerID', 0)
-        self.RobWorkerCount = rec.get(u'RobWorkerCount', 0)
-        self.RobWorkerState = rec.get(u'RobWorkerState', 0)
-
-#Can not implement adoLoadStr method:No key defined!
-#Can not implement adoInsertStr method:No key defined!
-#Can not implement adoUpdateStr method:No key defined!
-#Can not implement adoUpdateStr method:No key defined!
-#Can not implement adoCheckUpdateStr method:No key defined!
-#Can not implement adoCheckUpdateExStr method:No key defined!
-
-    def getAdoRecords(self, resultCollection):
-        '''查询结果打包成二进制流'''
-        result = ''
-        result = CommFunc.WriteDWORD(result, resultCollection.count())
-        for rec in resultCollection:
-            self.readRecord(rec)
-            result += self.getBuffer()
-        return result
-
-#Can not implement adoQueryIndexStr method:No key defined!
-
-    def adoQueryCustom(self, collection, queryDict):
-        '''自定义查询'''
-        resultCollection = collection.find(queryDict)
-
-        return self.getAdoRecords(resultCollection)
-
-
-    def adoQueryAll(self, collection):
-        '''查询所有''' 
-        resultCollection = collection.find()
-         
-        return self.getAdoRecords(resultCollection)
-
-#Can not implement adoDeleteByIndexStr method:No key defined!
-    def outputString(self):
-        output = '''// 福地矿物表 #tagDBPyMineAreaItem:
-            PlayerID = %s,
-            Index = %s,
-            MineID = %s,
-            MineType = %s,
-            UpdTime = %s,
-            PosLen = %s,
-            Position = %s,
-            WorkerCount = %s,
-            WorkerState = %s,
-            RobPlayerID = %s,
-            RobWorkerCount = %s,
-            RobWorkerState = %s,
-            ADOResult = %s,
-            '''%(
-                self.PlayerID,
-                self.Index,
-                self.MineID,
-                self.MineType,
-                self.UpdTime,
-                self.PosLen,
-                self.Position,
-                self.WorkerCount,
-                self.WorkerState,
-                self.RobPlayerID,
-                self.RobWorkerCount,
-                self.RobWorkerState,
-                self.ADOResult,
-            )
-        return output
-
-    def dumpString(self):
-        output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%(
-                self.PlayerID,
-                self.Index,
-                self.MineID,
-                self.MineType,
-                self.UpdTime,
-                self.PosLen,
-                self.Position,
-                self.WorkerCount,
-                self.WorkerState,
-                self.RobPlayerID,
-                self.RobWorkerCount,
-                self.RobWorkerState,
-            )
-        return output
-
-
-# 福地记录表 #tagDBPyMineAreaRecord
-class tagDBPyMineAreaRecord(Structure):
-    _pack_ = 1
-    _fields_ = [
-        ('PlayerID', ctypes.c_ulong),
-        ('RecordType', ctypes.c_ulong),
-        ('TagPlayerID', ctypes.c_ulong),
-        ('RecordTime', ctypes.c_ulong),
-        ('MineID', ctypes.c_ushort),
-        ('DataLen', ctypes.c_ushort),
-        ('Data', ctypes.c_char_p),
-        ('ADOResult', ctypes.c_ulong),
-    ]
-
-    def __init__(self):
-        Structure.__init__(self)
-        self.clear()
-
-    def clear(self):
-        self.PlayerID = 0
-        self.RecordType = 0
-        self.TagPlayerID = 0
-        self.RecordTime = 0
-        self.MineID = 0
-        self.DataLen = 0
-        self.Data = ''
-
-    def readData(self, buf, pos = 0, length = 0):
-        if not pos <= length:
-            msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length))
-            mylog.error(msg)
-            return -1
-        if len(buf) < pos + self.getLength():
-            msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength()))
-            mylog.error(msg)
-        self.clear()
-        self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos)
-        self.RecordType, pos = CommFunc.ReadDWORD(buf, pos)
-        self.TagPlayerID, pos = CommFunc.ReadDWORD(buf, pos)
-        self.RecordTime, pos = CommFunc.ReadDWORD(buf, pos)
-        self.MineID, pos = CommFunc.ReadWORD(buf, pos)
-        self.DataLen, pos = CommFunc.ReadWORD(buf, pos)
-        tmp, pos = CommFunc.ReadString(buf, pos, self.DataLen)
-        self.Data = ctypes.c_char_p(tmp)
-        return self.getLength()
-
-    def getBuffer(self):
-        buf = ''
-        buf = CommFunc.WriteDWORD(buf, self.PlayerID)
-        buf = CommFunc.WriteDWORD(buf, self.RecordType)
-        buf = CommFunc.WriteDWORD(buf, self.TagPlayerID)
-        buf = CommFunc.WriteDWORD(buf, self.RecordTime)
-        buf = CommFunc.WriteWORD(buf, self.MineID)
-        buf = CommFunc.WriteWORD(buf, self.DataLen)
-        buf = CommFunc.WriteString(buf, self.DataLen, self.Data)
-        return buf
-
-    def getLength(self):
-        length = 0
-        length += sizeof(ctypes.c_ulong)
-        length += sizeof(ctypes.c_ulong)
-        length += sizeof(ctypes.c_ulong)
-        length += sizeof(ctypes.c_ulong)
-        length += sizeof(ctypes.c_ushort)
-        length += sizeof(ctypes.c_ushort)
-        length += self.DataLen
-        return length
-
-    def getRecord(self):
-        '''组织存储记录'''
-        rec = {}
-        rec[u'PlayerID'] = self.PlayerID
-        rec[u'RecordType'] = self.RecordType
-        rec[u'TagPlayerID'] = self.TagPlayerID
-        rec[u'RecordTime'] = self.RecordTime
-        rec[u'MineID'] = self.MineID
-        rec[u'DataLen'] = self.DataLen
-        rec[u'Data'] = fix_incomingText(self.Data)
-        return rec
-
-    def readRecord(self, rec):
-        '''由于MongoDB读出来是unicode,所有字符串需要进行转换'''
-        self.PlayerID = rec.get(u'PlayerID', 0)
-        self.RecordType = rec.get(u'RecordType', 0)
-        self.TagPlayerID = rec.get(u'TagPlayerID', 0)
-        self.RecordTime = rec.get(u'RecordTime', 0)
-        self.MineID = rec.get(u'MineID', 0)
-        self.DataLen = rec.get(u'DataLen', 0)
-        self.Data = fix_outgoingText(rec.get(u'Data', u''))
-
-#Can not implement adoLoadStr method:No key defined!
-#Can not implement adoInsertStr method:No key defined!
-#Can not implement adoUpdateStr method:No key defined!
-#Can not implement adoUpdateStr method:No key defined!
-#Can not implement adoCheckUpdateStr method:No key defined!
-#Can not implement adoCheckUpdateExStr method:No key defined!
-
-    def getAdoRecords(self, resultCollection):
-        '''查询结果打包成二进制流'''
-        result = ''
-        result = CommFunc.WriteDWORD(result, resultCollection.count())
-        for rec in resultCollection:
-            self.readRecord(rec)
-            result += self.getBuffer()
-        return result
-
-#Can not implement adoQueryIndexStr method:No key defined!
-
-    def adoQueryCustom(self, collection, queryDict):
-        '''自定义查询'''
-        resultCollection = collection.find(queryDict)
-
-        return self.getAdoRecords(resultCollection)
-
-
-    def adoQueryAll(self, collection):
-        '''查询所有''' 
-        resultCollection = collection.find()
-         
-        return self.getAdoRecords(resultCollection)
-
-#Can not implement adoDeleteByIndexStr method:No key defined!
-    def outputString(self):
-        output = '''// 福地记录表 #tagDBPyMineAreaRecord:
-            PlayerID = %s,
-            RecordType = %s,
-            TagPlayerID = %s,
-            RecordTime = %s,
-            MineID = %s,
-            DataLen = %s,
-            Data = %s,
-            ADOResult = %s,
-            '''%(
-                self.PlayerID,
-                self.RecordType,
-                self.TagPlayerID,
-                self.RecordTime,
-                self.MineID,
-                self.DataLen,
-                self.Data,
-                self.ADOResult,
-            )
-        return output
-
-    def dumpString(self):
-        output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%(
-                self.PlayerID,
-                self.RecordType,
-                self.TagPlayerID,
-                self.RecordTime,
-                self.MineID,
-                self.DataLen,
-                self.Data,
-            )
-        return output
-
-
-# 福地结算奖励表 #tagDBPyMineAreaAward
-class tagDBPyMineAreaAward(Structure):
-    _pack_ = 1
-    _fields_ = [
-        ('GUIDLen', ctypes.c_ubyte),
-        ('GUID', ctypes.c_char_p),
-        ('PlayerID', ctypes.c_ulong),
-        ('AwardTime', ctypes.c_ulong),
-        ('MineID', ctypes.c_ushort),
-        ('WorkerCount', ctypes.c_ubyte),
-        ('AreaPlayerID', ctypes.c_ulong),
-        ('ADOResult', ctypes.c_ulong),
-    ]
-
-    def __init__(self):
-        Structure.__init__(self)
-        self.clear()
-
-    def clear(self):
-        self.GUIDLen = 0
-        self.GUID = ''
-        self.PlayerID = 0
-        self.AwardTime = 0
-        self.MineID = 0
-        self.WorkerCount = 0
-        self.AreaPlayerID = 0
-
-    def readData(self, buf, pos = 0, length = 0):
-        if not pos <= length:
-            msg = error.formatMsg('error', error.ERROR_NO_148, '(pos = %s) > (length = %s)'%(pos, length))
-            mylog.error(msg)
-            return -1
-        if len(buf) < pos + self.getLength():
-            msg = error.formatMsg('error', error.ERROR_NO_149, 'len = %s while %s expected!'%(len(buf) - pos, self.getLength()))
-            mylog.error(msg)
-        self.clear()
-        self.GUIDLen, pos = CommFunc.ReadBYTE(buf, pos)
-        tmp, pos = CommFunc.ReadString(buf, pos, self.GUIDLen)
-        self.GUID = ctypes.c_char_p(tmp)
-        self.PlayerID, pos = CommFunc.ReadDWORD(buf, pos)
-        self.AwardTime, pos = CommFunc.ReadDWORD(buf, pos)
-        self.MineID, pos = CommFunc.ReadWORD(buf, pos)
-        self.WorkerCount, pos = CommFunc.ReadBYTE(buf, pos)
-        self.AreaPlayerID, pos = CommFunc.ReadDWORD(buf, pos)
-        return self.getLength()
-
-    def getBuffer(self):
-        buf = ''
-        buf = CommFunc.WriteBYTE(buf, self.GUIDLen)
-        buf = CommFunc.WriteString(buf, self.GUIDLen, self.GUID)
-        buf = CommFunc.WriteDWORD(buf, self.PlayerID)
-        buf = CommFunc.WriteDWORD(buf, self.AwardTime)
-        buf = CommFunc.WriteWORD(buf, self.MineID)
-        buf = CommFunc.WriteBYTE(buf, self.WorkerCount)
-        buf = CommFunc.WriteDWORD(buf, self.AreaPlayerID)
-        return buf
-
-    def getLength(self):
-        length = 0
-        length += sizeof(ctypes.c_ubyte)
-        length += self.GUIDLen
-        length += sizeof(ctypes.c_ulong)
-        length += sizeof(ctypes.c_ulong)
-        length += sizeof(ctypes.c_ushort)
-        length += sizeof(ctypes.c_ubyte)
-        length += sizeof(ctypes.c_ulong)
-        return length
-
-    def getRecord(self):
-        '''组织存储记录'''
-        rec = {}
-        rec[u'GUIDLen'] = self.GUIDLen
-        rec[u'GUID'] = fix_incomingText(self.GUID)
-        rec[u'PlayerID'] = self.PlayerID
-        rec[u'AwardTime'] = self.AwardTime
-        rec[u'MineID'] = self.MineID
-        rec[u'WorkerCount'] = self.WorkerCount
-        rec[u'AreaPlayerID'] = self.AreaPlayerID
-        return rec
-
-    def readRecord(self, rec):
-        '''由于MongoDB读出来是unicode,所有字符串需要进行转换'''
-        self.GUIDLen = rec.get(u'GUIDLen', 0)
-        self.GUID = fix_outgoingText(rec.get(u'GUID', u''))
-        self.PlayerID = rec.get(u'PlayerID', 0)
-        self.AwardTime = rec.get(u'AwardTime', 0)
-        self.MineID = rec.get(u'MineID', 0)
-        self.WorkerCount = rec.get(u'WorkerCount', 0)
-        self.AreaPlayerID = rec.get(u'AreaPlayerID', 0)
-
-#Can not implement adoLoadStr method:No key defined!
-#Can not implement adoInsertStr method:No key defined!
-#Can not implement adoUpdateStr method:No key defined!
-#Can not implement adoUpdateStr method:No key defined!
-#Can not implement adoCheckUpdateStr method:No key defined!
-#Can not implement adoCheckUpdateExStr method:No key defined!
-
-    def getAdoRecords(self, resultCollection):
-        '''查询结果打包成二进制流'''
-        result = ''
-        result = CommFunc.WriteDWORD(result, resultCollection.count())
-        for rec in resultCollection:
-            self.readRecord(rec)
-            result += self.getBuffer()
-        return result
-
-#Can not implement adoQueryIndexStr method:No key defined!
-
-    def adoQueryCustom(self, collection, queryDict):
-        '''自定义查询'''
-        resultCollection = collection.find(queryDict)
-
-        return self.getAdoRecords(resultCollection)
-
-
-    def adoQueryAll(self, collection):
-        '''查询所有''' 
-        resultCollection = collection.find()
-         
-        return self.getAdoRecords(resultCollection)
-
-#Can not implement adoDeleteByIndexStr method:No key defined!
-    def outputString(self):
-        output = '''// 福地结算奖励表 #tagDBPyMineAreaAward:
-            GUIDLen = %s,
-            GUID = %s,
-            PlayerID = %s,
-            AwardTime = %s,
-            MineID = %s,
-            WorkerCount = %s,
-            AreaPlayerID = %s,
-            ADOResult = %s,
-            '''%(
-                self.GUIDLen,
-                self.GUID,
-                self.PlayerID,
-                self.AwardTime,
-                self.MineID,
-                self.WorkerCount,
-                self.AreaPlayerID,
-                self.ADOResult,
-            )
-        return output
-
-    def dumpString(self):
-        output = '''%1s\t%1s\t%1s\t%1s\t%1s\t%1s\t%1s'''%(
-                self.GUIDLen,
-                self.GUID,
-                self.PlayerID,
-                self.AwardTime,
-                self.MineID,
-                self.WorkerCount,
-                self.AreaPlayerID,
-            )
-        return output
-
 
 # 玩家记录表 #tagDBPlayerRecData
 class tagDBPlayerRecData(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/LogicProcess/UserCtrlDB.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/LogicProcess/UserCtrlDB.py
index fdfb0ba..9c88912 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/LogicProcess/UserCtrlDB.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyMongoDB/LogicProcess/UserCtrlDB.py
@@ -3563,21 +3563,6 @@
         DBPlayerRecData = DataServerPlayerData.tagDBPlayerRecData()
         data += DBPlayerRecData.adoQueryAll(collection)
         mylog.debug("tagDBPlayerRecData ok")
-
-        collection = db[UCN_DBPyMineAreaAward]
-        DBPyMineAreaAward = DataServerPlayerData.tagDBPyMineAreaAward()
-        data += DBPyMineAreaAward.adoQueryAll(collection)
-        mylog.debug("tagDBPyMineAreaAward ok")
-        
-        collection = db[UCN_DBPyMineAreaRecord]
-        DBPyMineAreaRecord = DataServerPlayerData.tagDBPyMineAreaRecord()
-        data += DBPyMineAreaRecord.adoQueryAll(collection)
-        mylog.debug("tagDBPyMineAreaRecord ok")
-        
-        collection = db[UCN_DBPyMineAreaItem]
-        DBPyMineAreaItem = DataServerPlayerData.tagDBPyMineAreaItem()
-        data += DBPyMineAreaItem.adoQueryAll(collection)
-        mylog.debug("tagDBPyMineAreaItem ok")
         
         collection = db[UCN_DBPyCouple]
         DBPyCouple = DataServerPlayerData.tagDBPyCouple()
@@ -3980,9 +3965,6 @@
                         gameDataReadPos = self.savegameServerWorldData(decompressGameData, gameDataReadPos, UCN_DBPyFuncTeam, DataServerPlayerData.tagDBPyFuncTeam, db)
                         gameDataReadPos = self.savegameServerWorldData(decompressGameData, gameDataReadPos, UCN_DBPyFuncTeamMem, DataServerPlayerData.tagDBPyFuncTeamMem, db)
                         gameDataReadPos = self.savegameServerWorldData(decompressGameData, gameDataReadPos, UCN_DBPlayerRecData, DataServerPlayerData.tagDBPlayerRecData, db)
-                        gameDataReadPos = self.savegameServerWorldData(decompressGameData, gameDataReadPos, UCN_DBPyMineAreaAward, DataServerPlayerData.tagDBPyMineAreaAward, db)
-                        gameDataReadPos = self.savegameServerWorldData(decompressGameData, gameDataReadPos, UCN_DBPyMineAreaRecord, DataServerPlayerData.tagDBPyMineAreaRecord, db)
-                        gameDataReadPos = self.savegameServerWorldData(decompressGameData, gameDataReadPos, UCN_DBPyMineAreaItem, DataServerPlayerData.tagDBPyMineAreaItem, db)
                         gameDataReadPos = self.savegameServerWorldData(decompressGameData, gameDataReadPos, UCN_DBPyCouple, DataServerPlayerData.tagDBPyCouple, db)
                         gameDataReadPos = self.savegameServerWorldData(decompressGameData, gameDataReadPos, UCN_DBPyUnNotifyLoveGiftRec, DataServerPlayerData.tagDBPyUnNotifyLoveGiftRec, db)
                         gameDataReadPos = self.savegameServerWorldData(decompressGameData, gameDataReadPos, UCN_DBPyCharmValueRec, DataServerPlayerData.tagDBPyCharmValueRec, db)
@@ -4116,9 +4098,6 @@
                         gameDataReadPos = self.savegameServerWorldData(decompressGameData, gameDataReadPos, UCN_DBPyFuncTeam, DataServerPlayerData.tagDBPyFuncTeam, db)
                         gameDataReadPos = self.savegameServerWorldData(decompressGameData, gameDataReadPos, UCN_DBPyFuncTeamMem, DataServerPlayerData.tagDBPyFuncTeamMem, db)
                         gameDataReadPos = self.savegameServerWorldData(decompressGameData, gameDataReadPos, UCN_DBPlayerRecData, DataServerPlayerData.tagDBPlayerRecData, db)
-                        gameDataReadPos = self.savegameServerWorldData(decompressGameData, gameDataReadPos, UCN_DBPyMineAreaAward, DataServerPlayerData.tagDBPyMineAreaAward, db)
-                        gameDataReadPos = self.savegameServerWorldData(decompressGameData, gameDataReadPos, UCN_DBPyMineAreaRecord, DataServerPlayerData.tagDBPyMineAreaRecord, db)
-                        gameDataReadPos = self.savegameServerWorldData(decompressGameData, gameDataReadPos, UCN_DBPyMineAreaItem, DataServerPlayerData.tagDBPyMineAreaItem, db)
                         gameDataReadPos = self.savegameServerWorldData(decompressGameData, gameDataReadPos, UCN_DBPyCouple, DataServerPlayerData.tagDBPyCouple, db)
                         gameDataReadPos = self.savegameServerWorldData(decompressGameData, gameDataReadPos, UCN_DBPyUnNotifyLoveGiftRec, DataServerPlayerData.tagDBPyUnNotifyLoveGiftRec, db)
                         gameDataReadPos = self.savegameServerWorldData(decompressGameData, gameDataReadPos, UCN_DBPyCharmValueRec, DataServerPlayerData.tagDBPyCharmValueRec, db)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 04f875a..08ac90f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -811,7 +811,8 @@
 CDBPlayerRefresh_ShieldPerDef, # 弱化护盾 282
 CDBPlayerRefresh_DOTPer, # 持续增伤 283
 CDBPlayerRefresh_DOTPerDef, # 持续减伤 284
-) = range(146, 285)
+CDBPlayerRefresh_GoldRushEnergy, # 淘金令 285
+) = range(146, 286)
 
 TYPE_Price_Gold_Paper_Money = 5    # 金钱类型,(先用礼券,再用金子)
 TYPE_Price_Family_Contribution = 6 # 战盟贡献度(活跃度转换得来)
@@ -841,7 +842,7 @@
 TYPE_Price_SuccessSocre = 39    # 成就积分
 TYPE_Price_FamilyFlagWarPoint = 40    # 万界积分
 TYPE_Price_Xiantao = 41    # 仙桃/战锤
-TYPE_Price_Lingyu = 42    # 灵玉/结晶
+TYPE_Price_Lingyu = 42    # 灵玉/将星玉髓
 TYPE_Price_BossTrial = 43    # boss历练凭证积分
 TYPE_Price_GatherSoul = 44    # 聚魂精华
 TYPE_Price_HorsePetTrainScore = 45    # 骑宠养成积分
@@ -851,6 +852,7 @@
 TYPE_Price_XianyuanScore = 49    # 仙缘积分
 TYPE_Price_HuanjinggeScore = 50    # 幻境阁积分
 TYPE_Price_HeroScore = 51    # 招募积分
+TYPE_Price_GoldRushEnergy = 52    # 淘金令体力
 TYPE_Price_PayCoinDay = 98    # 代币时效,每日过天重置
 TYPE_Price_PayCoin = 99    # 代币
 
@@ -859,8 +861,8 @@
                  1:"仙玉", 2:"绑玉", 3:"铜钱", 6:"战盟贡献度", 10:"战盟仓库积分", 13:"境界修行点", 14:"符印融合石", 15:"仙盟活跃令", 
                  16:"助战积分", 18:"荣誉", 19:"Boss积分", 23:"符印精华", 24:"符印碎片", 25:"寻宝积分", 26:"集市额度", 27:"丹精", 28:"魂尘", 
                  29:"聚魂碎片", 30:"核心环", 31:"功能特权令", 32:"环保值", 33:"GM令", 34:"古神币", 35:"功德点", 
-                 39:"成就积分", 40:"万界积分", 41:"战锤", 42:"结晶", 43:"凭证积分", 44:"聚魂精华", 45:"骑宠养成积分", 46:"古宝养成积分", 47:"天道果", 
-                 49:"仙缘积分", 50:"幻境阁积分", 51:"招募积分",
+                 39:"成就积分", 40:"万界积分", 41:"战锤", 42:"将星玉髓", 43:"凭证积分", 44:"聚魂精华", 45:"骑宠养成积分", 46:"古宝养成积分", 47:"天道果", 
+                 49:"仙缘积分", 50:"幻境阁积分", 51:"招募积分", 52:"淘金令",
                  98:"代币时效", 99:"代币"
                  }
 
@@ -906,6 +908,7 @@
                            TYPE_Price_XianyuanScore:CDBPlayerRefresh_XianyuanScore,
                            TYPE_Price_HuanjinggeScore:CDBPlayerRefresh_HuanjinggeScore,
                            TYPE_Price_HeroScore:CDBPlayerRefresh_HeroScore,
+                           TYPE_Price_GoldRushEnergy:CDBPlayerRefresh_GoldRushEnergy,
                            TYPE_Price_PayCoinDay:CDBPlayerRefresh_PayCoinDay,
                            }
 
@@ -959,7 +962,6 @@
 GameFuncID_LianTi = 207         # 炼体
 GameFuncID_CrossBattlefield = 208   # 跨服古神战场
 GameFuncID_Championship = 210   # 排位
-GameFuncID_MineArea = 227       # 福地
 GameFuncID_Guaji = 228          # 挂机
 # 以下为暂时无用的
 GameFuncID_RunDaily = 34        # 日常跑环
@@ -1026,8 +1028,7 @@
                          Def_PlayerRecType_WorshipDaily, # 玩家每日膜拜记录 2
                          Def_PlayerRecType_PayCoin, # 代币记录 3
                          Def_PlayerRecType_OfflineUnprocessed, # 离线未处理的逻辑 4
-                         Def_PlayerRecType_MineAreaRecord, # 福地其他记录信息 5
-                         ) = range(1, 1 + 5)
+                         ) = range(1, 1 + 4)
 
 #通用信息记录类型 - 新 从 300 开始,原通用记录类型最大到255
 Def_GameRecTypeList = (

--
Gitblit v1.8.0