From c1c791372b63ff14d0ddd0ef85386e374603d1ff Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 15 七月 2024 19:47:37 +0800
Subject: [PATCH] 10202 【越南】【香港】【主干】【砍树】聚魂(寻宝修改:寻宝设定单独开表;去除免费寻宝x次必出逻辑,免费次数也算常规次数;免费次数去除时间恢复,改为过天重置;每x次必出改为每种类型独立配置;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py           |   72 ++++-----
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py             |   63 ++++++-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py     |  165 +++++++++----------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetXunbao.py     |   48 ++---
 PySysDB/PySysDBPY.h                                                                              |   25 ++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py |    4 
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py                                |   72 ++++-----
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                  |    9 
 8 files changed, 245 insertions(+), 213 deletions(-)

diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 49d68ff..768a184 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -1612,6 +1612,28 @@
 	list		Money;	//金钱
 };
 
+//寻宝设定表
+
+struct tagTreasureSet
+{
+	BYTE		_TreasureType;	//寻宝类型
+	BYTE		PackType;	//放入背包
+	BYTE		DailyFreeCount;	//每日免费次数
+	list		TreasureCountList;	//抽奖次数列表
+	DWORD		CostItemID;	//消耗道具ID
+	list		CostItemCountList;	//消耗个数列表
+	BYTE		CostMoneyType;	//消耗货币类型
+	list		CostMoneyList;	//消耗货币列表
+	WORD		EnsureCount;	//每x次必出
+	BYTE		OnceLucky;	//单次幸运值
+	WORD		FullLucky;	//满幸运值
+	char		LuckyRateFormat;	//幸运格子概率公式
+	BYTE		LuckyGridNum;	//幸运格子编号
+	list		NotifyGridNumList;	//需要额外广播的格子
+	BYTE		AwardMoneyType;	//额外奖励货币类型
+	WORD		AwardMoneyValue;	//单次奖励货币数
+};
+
 //寻宝产出库表
 
 struct tagTreasureHouse
@@ -1622,12 +1644,9 @@
 	dict		GridLibInfo;	//格子编号对应库ID {"编号":物品库ID, ...}
 	list		JobItemList;	//职业物品组列表 [[职业1物品, 职业2物品, ...], ...]
 	list		GridItemRateListFree;	//免费产出格子编号饼图 [[概率, 格子编号], ...]
-	list		FreeGridItemRateList2;	//免费每满x次保底产出格子编号饼图 [[概率, 格子编号], ...]
-	dict		FreeGridItemRateList3;	//免费第x次必出产出格子编号饼图 {次数:[[概率, 格子编号], ...], ...}
 	list		GridItemRateList1;	//常规产出格子编号饼图 [[概率, 格子编号], ...]
 	list		GridItemRateList2;	//每满x次保底产出格子编号饼图 [[概率, 格子编号], ...]
 	dict		GridItemRateList3;	//第x次必出产出格子编号饼图 {次数:[[概率, 格子编号], ...], ...}
-	BYTE		LuckyGridNum;	//幸运加成格子编号
 };
 
 //寻宝物品库
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 1e534a0..5a731a2 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -27153,63 +27153,48 @@
 # A3 51 寻宝功能信息 #tagMCTreasureInfo
 
 class  tagMCTreasureTypeInfo(Structure):
-    TreasureType = 0    #(BYTE TreasureType)//寻宝类型
-    LuckValue = 0    #(WORD LuckValue)//当前幸运值
-    IndexCount = 0    #(BYTE IndexCount)//索引个数
-    FreeCountTime = list()    #(vector<DWORD> FreeCountTime)// 模式对应开始计算免费次数时间time值
-    data = None
+    _pack_ = 1
+    _fields_ = [
+                  ("TreasureType", c_ubyte),    #寻宝类型
+                  ("LuckValue", c_ushort),    #当前幸运值
+                  ("TreasureCount", c_int),    #已寻宝总次数
+                  ("FreeCountToday", c_ushort),    #今日已免费寻宝次数
+                  ]
 
     def __init__(self):
         self.Clear()
         return
 
-    def ReadData(self, _lpData, _pos=0, _Len=0):
+    def ReadData(self, stringData, _pos=0, _len=0):
         self.Clear()
-        self.TreasureType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.LuckValue,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.IndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.IndexCount):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.FreeCountTime.append(value)
-        return _pos
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
 
     def Clear(self):
         self.TreasureType = 0
         self.LuckValue = 0
-        self.IndexCount = 0
-        self.FreeCountTime = list()
+        self.TreasureCount = 0
+        self.FreeCountToday = 0
         return
 
     def GetLength(self):
-        length = 0
-        length += 1
-        length += 2
-        length += 1
-        length += 4 * self.IndexCount
-
-        return length
+        return sizeof(tagMCTreasureTypeInfo)
 
     def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.TreasureType)
-        data = CommFunc.WriteWORD(data, self.LuckValue)
-        data = CommFunc.WriteBYTE(data, self.IndexCount)
-        for i in range(self.IndexCount):
-            data = CommFunc.WriteDWORD(data, self.FreeCountTime[i])
-        return data
+        return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''
+        DumpString = '''// A3 51 寻宝功能信息 //tagMCTreasureInfo:
                                 TreasureType:%d,
                                 LuckValue:%d,
-                                IndexCount:%d,
-                                FreeCountTime:%s
+                                TreasureCount:%d,
+                                FreeCountToday:%d
                                 '''\
                                 %(
                                 self.TreasureType,
                                 self.LuckValue,
-                                self.IndexCount,
-                                "..."
+                                self.TreasureCount,
+                                self.FreeCountToday
                                 )
         return DumpString
 
@@ -27285,7 +27270,8 @@
 
 class  tagMCTreasureResult(Structure):
     Head = tagHead()
-    AddTreasureScore = 0    #(WORD AddTreasureScore)// 本次寻宝增加的寻宝积分
+    AddMoneyType = 0    #(BYTE AddMoneyType)// 本次寻宝增加的积分货币类型,可能为0
+    AddMoneyValue = 0    #(WORD AddMoneyValue)// 本次寻宝增加的积分货币值,可能为0
     AddTreasureLuck = 0    #(WORD AddTreasureLuck)// 本次寻宝增加的幸运值
     TreasureResultLen = 0    #(WORD TreasureResultLen)
     TreasureResult = ""    #(String TreasureResult)//  获得物品结果[[格子编号, 物品ID,个数,是否绑定], ...]
@@ -27300,7 +27286,8 @@
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
         _pos = self.Head.ReadData(_lpData, _pos)
-        self.AddTreasureScore,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.AddMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.AddMoneyValue,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.AddTreasureLuck,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.TreasureResultLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.TreasureResult,_pos = CommFunc.ReadString(_lpData, _pos,self.TreasureResultLen)
@@ -27311,7 +27298,8 @@
         self.Head.Clear()
         self.Head.Cmd = 0xA3
         self.Head.SubCmd = 0x50
-        self.AddTreasureScore = 0
+        self.AddMoneyType = 0
+        self.AddMoneyValue = 0
         self.AddTreasureLuck = 0
         self.TreasureResultLen = 0
         self.TreasureResult = ""
@@ -27320,6 +27308,7 @@
     def GetLength(self):
         length = 0
         length += self.Head.GetLength()
+        length += 1
         length += 2
         length += 2
         length += 2
@@ -27330,7 +27319,8 @@
     def GetBuffer(self):
         data = ''
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteWORD(data, self.AddTreasureScore)
+        data = CommFunc.WriteBYTE(data, self.AddMoneyType)
+        data = CommFunc.WriteWORD(data, self.AddMoneyValue)
         data = CommFunc.WriteWORD(data, self.AddTreasureLuck)
         data = CommFunc.WriteWORD(data, self.TreasureResultLen)
         data = CommFunc.WriteString(data, self.TreasureResultLen, self.TreasureResult)
@@ -27339,14 +27329,16 @@
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
-                                AddTreasureScore:%d,
+                                AddMoneyType:%d,
+                                AddMoneyValue:%d,
                                 AddTreasureLuck:%d,
                                 TreasureResultLen:%d,
                                 TreasureResult:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
-                                self.AddTreasureScore,
+                                self.AddMoneyType,
+                                self.AddMoneyValue,
                                 self.AddTreasureLuck,
                                 self.TreasureResultLen,
                                 self.TreasureResult
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 1c4247d..3b5608b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3632,13 +3632,8 @@
 Def_Player_Dict_RefineGiftCnt = "RefineGiftCnt_%s"   #当日已炼制次数, 参数为炼制类型
 Def_Player_Dict_RefineStartTime = "RefineStartTime_%s"   #炼制活动开始时间, 参数为炼制类型
 
-Def_PDict_TreasureState = "TreasureState_%s"  # 寻宝相关状态,按二进制位存储, 参数(寻宝编号)
-Def_PDict_TreasureFreeCnt = "TreasureFreeCnt_%s"  # 寻宝 - 当前可用免费次数, 参数(寻宝编号)
-Def_PDict_TreasureTodayTotalFreeCnt = "TreasureTTFreeCnt_%s"  # 寻宝 - 今日已累计免费次数, 参数(寻宝编号)
-Def_PDict_TreasureStartCalcFreeCntTime = "TreasureFreeCntTime_%s"  # 寻宝 - 开始计算免费次数CD时间, 参数(寻宝编号)
-
-Def_PDict_TreasureFreeTime = "TreasureFreeTime_%s_%s"  # 寻宝开始免费计时time值, 参数(寻宝类型, 寻宝索引)
-Def_PDict_TreasureCount = "TreasureCount_%s_%s"  # 寻宝次数, 参数(寻宝类型,是否免费)
+Def_PDict_TreasureFreeCount = "TreasureFreeCount_%s"  # 寻宝今日已使用免费次数, 参数(寻宝类型)
+Def_PDict_TreasureCount = "TreasureCount_%s"  # 寻宝次数, 参数(寻宝类型)
 Def_PDict_TreasureLuck = "TreasureLuck_%s"  # 寻宝当前幸运值, 参数(寻宝类型)
 
 Def_Player_Dict_LastAutoOpenPackTick = "LastAutoOpenPackTick219_%s"   #上一次自动购买的tick<背包类型>
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 1e534a0..5a731a2 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -27153,63 +27153,48 @@
 # A3 51 寻宝功能信息 #tagMCTreasureInfo
 
 class  tagMCTreasureTypeInfo(Structure):
-    TreasureType = 0    #(BYTE TreasureType)//寻宝类型
-    LuckValue = 0    #(WORD LuckValue)//当前幸运值
-    IndexCount = 0    #(BYTE IndexCount)//索引个数
-    FreeCountTime = list()    #(vector<DWORD> FreeCountTime)// 模式对应开始计算免费次数时间time值
-    data = None
+    _pack_ = 1
+    _fields_ = [
+                  ("TreasureType", c_ubyte),    #寻宝类型
+                  ("LuckValue", c_ushort),    #当前幸运值
+                  ("TreasureCount", c_int),    #已寻宝总次数
+                  ("FreeCountToday", c_ushort),    #今日已免费寻宝次数
+                  ]
 
     def __init__(self):
         self.Clear()
         return
 
-    def ReadData(self, _lpData, _pos=0, _Len=0):
+    def ReadData(self, stringData, _pos=0, _len=0):
         self.Clear()
-        self.TreasureType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        self.LuckValue,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.IndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
-        for i in range(self.IndexCount):
-            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
-            self.FreeCountTime.append(value)
-        return _pos
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
 
     def Clear(self):
         self.TreasureType = 0
         self.LuckValue = 0
-        self.IndexCount = 0
-        self.FreeCountTime = list()
+        self.TreasureCount = 0
+        self.FreeCountToday = 0
         return
 
     def GetLength(self):
-        length = 0
-        length += 1
-        length += 2
-        length += 1
-        length += 4 * self.IndexCount
-
-        return length
+        return sizeof(tagMCTreasureTypeInfo)
 
     def GetBuffer(self):
-        data = ''
-        data = CommFunc.WriteBYTE(data, self.TreasureType)
-        data = CommFunc.WriteWORD(data, self.LuckValue)
-        data = CommFunc.WriteBYTE(data, self.IndexCount)
-        for i in range(self.IndexCount):
-            data = CommFunc.WriteDWORD(data, self.FreeCountTime[i])
-        return data
+        return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''
+        DumpString = '''// A3 51 寻宝功能信息 //tagMCTreasureInfo:
                                 TreasureType:%d,
                                 LuckValue:%d,
-                                IndexCount:%d,
-                                FreeCountTime:%s
+                                TreasureCount:%d,
+                                FreeCountToday:%d
                                 '''\
                                 %(
                                 self.TreasureType,
                                 self.LuckValue,
-                                self.IndexCount,
-                                "..."
+                                self.TreasureCount,
+                                self.FreeCountToday
                                 )
         return DumpString
 
@@ -27285,7 +27270,8 @@
 
 class  tagMCTreasureResult(Structure):
     Head = tagHead()
-    AddTreasureScore = 0    #(WORD AddTreasureScore)// 本次寻宝增加的寻宝积分
+    AddMoneyType = 0    #(BYTE AddMoneyType)// 本次寻宝增加的积分货币类型,可能为0
+    AddMoneyValue = 0    #(WORD AddMoneyValue)// 本次寻宝增加的积分货币值,可能为0
     AddTreasureLuck = 0    #(WORD AddTreasureLuck)// 本次寻宝增加的幸运值
     TreasureResultLen = 0    #(WORD TreasureResultLen)
     TreasureResult = ""    #(String TreasureResult)//  获得物品结果[[格子编号, 物品ID,个数,是否绑定], ...]
@@ -27300,7 +27286,8 @@
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
         _pos = self.Head.ReadData(_lpData, _pos)
-        self.AddTreasureScore,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.AddMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.AddMoneyValue,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.AddTreasureLuck,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.TreasureResultLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.TreasureResult,_pos = CommFunc.ReadString(_lpData, _pos,self.TreasureResultLen)
@@ -27311,7 +27298,8 @@
         self.Head.Clear()
         self.Head.Cmd = 0xA3
         self.Head.SubCmd = 0x50
-        self.AddTreasureScore = 0
+        self.AddMoneyType = 0
+        self.AddMoneyValue = 0
         self.AddTreasureLuck = 0
         self.TreasureResultLen = 0
         self.TreasureResult = ""
@@ -27320,6 +27308,7 @@
     def GetLength(self):
         length = 0
         length += self.Head.GetLength()
+        length += 1
         length += 2
         length += 2
         length += 2
@@ -27330,7 +27319,8 @@
     def GetBuffer(self):
         data = ''
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteWORD(data, self.AddTreasureScore)
+        data = CommFunc.WriteBYTE(data, self.AddMoneyType)
+        data = CommFunc.WriteWORD(data, self.AddMoneyValue)
         data = CommFunc.WriteWORD(data, self.AddTreasureLuck)
         data = CommFunc.WriteWORD(data, self.TreasureResultLen)
         data = CommFunc.WriteString(data, self.TreasureResultLen, self.TreasureResult)
@@ -27339,14 +27329,16 @@
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
-                                AddTreasureScore:%d,
+                                AddMoneyType:%d,
+                                AddMoneyValue:%d,
                                 AddTreasureLuck:%d,
                                 TreasureResultLen:%d,
                                 TreasureResult:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
-                                self.AddTreasureScore,
+                                self.AddMoneyType,
+                                self.AddMoneyValue,
                                 self.AddTreasureLuck,
                                 self.TreasureResultLen,
                                 self.TreasureResult
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetXunbao.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetXunbao.py
index 5b1bfe6..8d8cf68 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetXunbao.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetXunbao.py
@@ -19,11 +19,9 @@
 import ShareDefine
 import PlayerControl
 import PlayerTreasure
-import IpyGameDataPY
 import ClearPack
 import ChConfig
-
-import time
+import IpyGameDataPY
 
 ## GM命令执行入口
 #  @param curPlayer 当前玩家
@@ -32,37 +30,33 @@
 #  @remarks 函数详细说明.
 def OnExec(curPlayer, paramList):
     if not paramList:
-        GameWorld.DebugAnswer(curPlayer, "重置寻宝:SetXunbao 0 选填(是否免费 清空背包)")
-        GameWorld.DebugAnswer(curPlayer, "设置幸运:SetXunbao 寻宝类型 幸运值")
+        GameWorld.DebugAnswer(curPlayer, "重置寻宝:SetXunbao 0")
+        GameWorld.DebugAnswer(curPlayer, "设置幸运:SetXunbao 寻宝类型 幸运值 已寻宝次数")
         return
     
     if not paramList[0]:
-        isFree = paramList[1] if len(paramList) > 1 else 1
-        isClearPack = paramList[2] if len(paramList) > 2 else 1
+        ClearPack.OnExec(curPlayer, [ShareDefine.rptTreasure])
+        ClearPack.OnExec(curPlayer, [ShareDefine.rptRune])
         
-        if isClearPack:
-            ClearPack.OnExec(curPlayer, [ShareDefine.rptTreasure])
-            ClearPack.OnExec(curPlayer, [ShareDefine.rptRune])
-            
-        treasureTypeList = PlayerTreasure.GetTreasureTypeList()
-        for treasureType in treasureTypeList:
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureCount % (treasureType, 0), 0)
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureCount % (treasureType, 1), 0)
+        ipyDataMgr = IpyGameDataPY.IPY_Data()
+        for i in xrange(ipyDataMgr.GetTreasureSetCount()):
+            ipyData = ipyDataMgr.GetTreasureSetByIndex(i)
+            treasureType = ipyData.GetTreasureType()
+            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureCount % (treasureType), 0)
             PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureLuck % (treasureType), 0)
+            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureFreeCount % (treasureType), 0)
             
-            if not isFree:
-                continue
-            
-            freeTimeCDList = IpyGameDataPY.GetFuncEvalCfg("TreasureSet1%s" % treasureType, 4)
-            for i, minute in enumerate(freeTimeCDList):
-                if not minute:
-                    continue
-                PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureFreeTime % (treasureType, i), int(time.time()) - minute * 60)
         GameWorld.DebugAnswer(curPlayer, "重置寻宝OK!")
-    elif len(paramList) == 2:
-        treasureType, luck = paramList
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureLuck % (treasureType), luck)
-        GameWorld.DebugAnswer(curPlayer, "设置寻宝类型=%s,幸运=%s" % (treasureType, luck))
+    else:
+        treasureType = paramList[0]
+        luck = paramList[1] if len(paramList) > 1 else None
+        treasureCount = paramList[2] if len(paramList) > 2 else None
+        if luck != None:
+            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureLuck % (treasureType), luck)
+            GameWorld.DebugAnswer(curPlayer, "设置寻宝类型=%s,幸运=%s" % (treasureType, luck))
+        if treasureCount != None:
+            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureCount % (treasureType), treasureCount)
+            GameWorld.DebugAnswer(curPlayer, "设置寻宝类型=%s,次数=%s" % (treasureType, treasureCount))
     PlayerTreasure.Sync_TreasureInfo(curPlayer)
     return True
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 5fe1aa7..dcd9de4 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -1286,6 +1286,25 @@
                         ("list", "Money", 0),
                         ),
 
+                "TreasureSet":(
+                        ("BYTE", "TreasureType", 1),
+                        ("BYTE", "PackType", 0),
+                        ("BYTE", "DailyFreeCount", 0),
+                        ("list", "TreasureCountList", 0),
+                        ("DWORD", "CostItemID", 0),
+                        ("list", "CostItemCountList", 0),
+                        ("BYTE", "CostMoneyType", 0),
+                        ("list", "CostMoneyList", 0),
+                        ("WORD", "EnsureCount", 0),
+                        ("BYTE", "OnceLucky", 0),
+                        ("WORD", "FullLucky", 0),
+                        ("char", "LuckyRateFormat", 0),
+                        ("BYTE", "LuckyGridNum", 0),
+                        ("list", "NotifyGridNumList", 0),
+                        ("BYTE", "AwardMoneyType", 0),
+                        ("WORD", "AwardMoneyValue", 0),
+                        ),
+
                 "TreasureHouse":(
                         ("BYTE", "TreasureType", 1),
                         ("WORD", "MinLV", 0),
@@ -1293,12 +1312,9 @@
                         ("dict", "GridLibInfo", 0),
                         ("list", "JobItemList", 0),
                         ("list", "GridItemRateListFree", 0),
-                        ("list", "FreeGridItemRateList2", 0),
-                        ("dict", "FreeGridItemRateList3", 0),
                         ("list", "GridItemRateList1", 0),
                         ("list", "GridItemRateList2", 0),
                         ("dict", "GridItemRateList3", 0),
-                        ("BYTE", "LuckyGridNum", 0),
                         ),
 
                 "TreasureItemLib":(
@@ -4178,6 +4194,30 @@
     def GetAwardItem(self): return self.attrTuple[5] # 奖励物品列表 list
     def GetMoney(self): return self.attrTuple[6] # 金钱 list
 
+# 寻宝设定表
+class IPY_TreasureSet():
+    
+    def __init__(self):
+        self.attrTuple = None
+        return
+        
+    def GetTreasureType(self): return self.attrTuple[0] # 寻宝类型 BYTE
+    def GetPackType(self): return self.attrTuple[1] # 放入背包 BYTE
+    def GetDailyFreeCount(self): return self.attrTuple[2] # 每日免费次数 BYTE
+    def GetTreasureCountList(self): return self.attrTuple[3] # 抽奖次数列表 list
+    def GetCostItemID(self): return self.attrTuple[4] # 消耗道具ID DWORD
+    def GetCostItemCountList(self): return self.attrTuple[5] # 消耗个数列表 list
+    def GetCostMoneyType(self): return self.attrTuple[6] # 消耗货币类型 BYTE
+    def GetCostMoneyList(self): return self.attrTuple[7] # 消耗货币列表 list
+    def GetEnsureCount(self): return self.attrTuple[8] # 每x次必出 WORD
+    def GetOnceLucky(self): return self.attrTuple[9] # 单次幸运值 BYTE
+    def GetFullLucky(self): return self.attrTuple[10] # 满幸运值 WORD
+    def GetLuckyRateFormat(self): return self.attrTuple[11] # 幸运格子概率公式 char
+    def GetLuckyGridNum(self): return self.attrTuple[12] # 幸运格子编号 BYTE
+    def GetNotifyGridNumList(self): return self.attrTuple[13] # 需要额外广播的格子 list
+    def GetAwardMoneyType(self): return self.attrTuple[14] # 额外奖励货币类型 BYTE
+    def GetAwardMoneyValue(self): return self.attrTuple[15] # 单次奖励货币数 WORD
+
 # 寻宝产出库表
 class IPY_TreasureHouse():
     
@@ -4191,12 +4231,9 @@
     def GetGridLibInfo(self): return self.attrTuple[3] # 格子编号对应库ID {"编号":物品库ID, ...} dict
     def GetJobItemList(self): return self.attrTuple[4] # 职业物品组列表 [[职业1物品, 职业2物品, ...], ...] list
     def GetGridItemRateListFree(self): return self.attrTuple[5] # 免费产出格子编号饼图 [[概率, 格子编号], ...] list
-    def GetFreeGridItemRateList2(self): return self.attrTuple[6] # 免费每满x次保底产出格子编号饼图 [[概率, 格子编号], ...] list
-    def GetFreeGridItemRateList3(self): return self.attrTuple[7] # 免费第x次必出产出格子编号饼图 {次数:[[概率, 格子编号], ...], ...} dict
-    def GetGridItemRateList1(self): return self.attrTuple[8] # 常规产出格子编号饼图 [[概率, 格子编号], ...] list
-    def GetGridItemRateList2(self): return self.attrTuple[9] # 每满x次保底产出格子编号饼图 [[概率, 格子编号], ...] list
-    def GetGridItemRateList3(self): return self.attrTuple[10] # 第x次必出产出格子编号饼图 {次数:[[概率, 格子编号], ...], ...} dict
-    def GetLuckyGridNum(self): return self.attrTuple[11] # 幸运加成格子编号 BYTE
+    def GetGridItemRateList1(self): return self.attrTuple[6] # 常规产出格子编号饼图 [[概率, 格子编号], ...] list
+    def GetGridItemRateList2(self): return self.attrTuple[7] # 每满x次保底产出格子编号饼图 [[概率, 格子编号], ...] list
+    def GetGridItemRateList3(self): return self.attrTuple[8] # 第x次必出产出格子编号饼图 {次数:[[概率, 格子编号], ...], ...} dict
 
 # 寻宝物品库
 class IPY_TreasureItemLib():
@@ -6026,6 +6063,7 @@
         self.__LoadFileData("LVAward", onlyCheck)
         self.__LoadFileData("Invest", onlyCheck)
         self.__LoadFileData("XBXZ", onlyCheck)
+        self.__LoadFileData("TreasureSet", onlyCheck)
         self.__LoadFileData("TreasureHouse", onlyCheck)
         self.__LoadFileData("TreasureItemLib", onlyCheck)
         self.__LoadFileData("FreeGoods", onlyCheck)
@@ -7167,6 +7205,13 @@
         self.CheckLoadData("XBXZ")
         return self.ipyXBXZCache[index]
 
+    def GetTreasureSetCount(self):
+        self.CheckLoadData("TreasureSet")
+        return self.ipyTreasureSetLen
+    def GetTreasureSetByIndex(self, index):
+        self.CheckLoadData("TreasureSet")
+        return self.ipyTreasureSetCache[index]
+
     def GetTreasureHouseCount(self):
         self.CheckLoadData("TreasureHouse")
         return self.ipyTreasureHouseLen
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 68372d8..fb77fcb 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -119,6 +119,7 @@
 import PlayerWishingWell
 import PlayerFairyDomain
 import CrossPlayerData
+import PlayerTreasure
 import PlayerVip
 import PlayerLove
 import PlayerDiceEx
@@ -543,7 +544,8 @@
         
         #投资
         PlayerGoldInvest.OnDay(curPlayer)
-        
+        #寻宝
+        PlayerTreasure.OnDay(curPlayer)
         #法宝
         PlayerMagicWeapon.OnDay(curPlayer)
         PlayerGoldGift.OnDay(curPlayer)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py
index 2ba1cad..9f0472a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py
@@ -45,15 +45,6 @@
 
 def DoTreasureOpen(curPlayer):
     ## 寻宝开启
-    
-    # 设置免费寻宝
-    treasureTypeList = GetTreasureTypeList()
-    for treasureType in treasureTypeList:
-        freeTimeCDList = IpyGameDataPY.GetFuncEvalCfg("TreasureSet1%s" % treasureType, 4)
-        for i, minute in enumerate(freeTimeCDList):
-            if not minute:
-                continue
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureFreeTime % (treasureType, i), int(time.time()) - minute * 60)
     Sync_TreasureInfo(curPlayer)
     return
 
@@ -61,6 +52,20 @@
     if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Treasure):
         return
     Sync_TreasureInfo(curPlayer)
+    return
+
+def OnDay(curPlayer):
+    syncTypeList = []
+    ipyDataMgr = IpyGameDataPY.IPY_Data()
+    for i in xrange(ipyDataMgr.GetTreasureSetCount()):
+        ipyData = ipyDataMgr.GetTreasureSetByIndex(i)
+        treasureType = ipyData.GetTreasureType()
+        if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreasureFreeCount % (treasureType)):
+            continue
+        syncTypeList.append(treasureType)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureFreeCount % (treasureType), 0)
+    if syncTypeList:
+        Sync_TreasureInfo(curPlayer, syncTypeList)
     return
 
 #// A5 68 请求寻宝 #tagCMRequestTreasure
@@ -79,13 +84,14 @@
     treasureType = clientData.TreasureType
     treasureIndex = clientData.TreasureIndex
     costType = clientData.CostType
-    isFreeType = 1 if costType == 1 else 0
+    
     GameWorld.DebugLog("玩家寻宝: treasureType=%s,treasureIndex=%s,costType=%s,playerLV=%s" 
                        % (treasureType, treasureIndex, costType, playerLV), playerID)
     
-    TreasureSet1 = "TreasureSet1%s" % treasureType
-    TreasureSet2 = "TreasureSet2%s" % treasureType
-    treasureCountList = IpyGameDataPY.GetFuncEvalCfg(TreasureSet1, 1) # 寻宝获得个数列表
+    setIpyData = IpyGameDataPY.GetIpyGameData("TreasureSet", treasureType)
+    if not setIpyData:
+        return
+    treasureCountList = setIpyData.GetTreasureCountList() # 寻宝获得个数列表
     if not treasureCountList:
         GameWorld.DebugLog("没有寻宝次数列表配置!", playerID)
         return
@@ -97,37 +103,31 @@
         GameWorld.DebugLog("没有寻宝次数配置!", playerID)
         return
     
-    packType = ShareDefine.rptTreasure
-    #if treasureType == 2:
-    #    packType = ShareDefine.rptRune
-    if treasureType in [TreasureType_GatherTheSoul]:
-        packType = IPY_GameWorld.rptItem
-        
+    packType = setIpyData.GetPackType()
     if not ItemCommon.CheckPackHasSpace(curPlayer, packType, True):
         GameWorld.DebugLog("对应寻宝背包没有空格子!packType=%s" % packType, playerID)
         return
     
     # 免费次数
     if costType == 1:
-        freeCountCDList = IpyGameDataPY.GetFuncEvalCfg(TreasureSet1, 4) # 免费次数CD时间列表, 分
-        freeCountCD = freeCountCDList[treasureIndex] * 60
-        if not freeCountCD:
+        dailyFreeCount = setIpyData.GetDailyFreeCount()
+        if not dailyFreeCount:
             GameWorld.ErrLog("该寻宝类型索引不支持免费次数寻宝!treasureType=%s,treasureIndex=%s" % (treasureType, treasureIndex), playerID)
             return
-        curTime = int(time.time())
-        freeTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreasureFreeTime % (treasureType, treasureIndex))
-        if curTime - freeTime < freeCountCD:
-            GameWorld.DebugLog("免费寻宝CD时间未到,无法使用免费寻宝!curTime=%s,freeTime=%s, %s < freeCountCD(%s)" 
-                               % (curTime, freeTime, curTime - freeTime, freeCountCD), playerID)
+        freeCountToday = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreasureFreeCount % (treasureType))
+        updFreeCountToday = freeCountToday + treasureCount
+        if updFreeCountToday > dailyFreeCount:
+            GameWorld.DebugLog("今日免费次数不足,无法使用免费寻宝! freeCountToday=%s + %s > %s" % (freeCountToday, treasureCount, dailyFreeCount), playerID)
             return
         
     # 寻宝道具, 目前默认消耗1个
     elif costType == 2:
-        costItemList = IpyGameDataPY.GetFuncEvalCfg(TreasureSet1, 3) # 消耗道具物品ID列表
-        if not costItemList:
+        costItemID = setIpyData.GetCostItemID()
+        costItemList = setIpyData.GetCostItemCountList() # 消耗道具物品ID列表
+        if not costItemID or not costItemList or treasureIndex >= len(costItemList):
             GameWorld.ErrLog("该寻宝类型索引不支持消耗道具寻宝!treasureType=%s,treasureIndex=%s" % (treasureType, treasureIndex), playerID)
             return
-        costItemID, costItemNeedCount = costItemList[treasureIndex]
+        costItemNeedCount = costItemList[treasureIndex]
         if not costItemID or not costItemNeedCount:
             return
         costItemIndexList, bindCnt, unBindCnt = ItemCommon.GetPackItemBindStateIndexInfo(curPlayer, costItemID)
@@ -148,11 +148,13 @@
         
     # 仙玉寻宝
     else:
-        costGoldList = IpyGameDataPY.GetFuncEvalCfg(TreasureSet1, 2) # 消耗货币列表
-        costGoldType = IpyGameDataPY.GetFuncCfg(TreasureSet2, 4) # 消耗货币类型
+        costGoldList = setIpyData.GetCostMoneyList() # 消耗货币列表
+        costGoldType = setIpyData.GetCostMoneyType() # 消耗货币类型
+        if not costGoldType or not costGoldList or treasureIndex >= len(costGoldList):
+            GameWorld.ErrLog("该寻宝类型索引不支持消耗货币寻宝!treasureType=%s,treasureIndex=%s" % (treasureType, treasureIndex), playerID)
+            return
         costGold = costGoldList[treasureIndex]
         if not costGold:
-            GameWorld.ErrLog("该寻宝类型索引不支持消耗仙玉寻宝!treasureType=%s,treasureIndex=%s" % (treasureType, treasureIndex), playerID)
             return
         
         if not PlayerControl.HaveMoney(curPlayer, costGoldType, costGold):
@@ -163,39 +165,40 @@
         GameWorld.ErrLog("找不到该等级对应寻宝库配置!treasureType=%s,curLV=%s" % (treasureType, curPlayer.GetLV()), playerID)
         return
     
-    luckFormula = IpyGameDataPY.GetFuncCfg(TreasureSet2, 1) # 幸运物品概率公式
-    addLuck = IpyGameDataPY.GetFuncEvalCfg(TreasureSet2, 2)[treasureIndex] # 增加幸运值
-    maxLuck = IpyGameDataPY.GetFuncCfg(TreasureSet2, 3) # 满幸运值
+    luckyGridNum = setIpyData.GetLuckyGridNum() # 幸运物品概率公式
+    luckFormula = setIpyData.GetLuckyRateFormat() # 幸运物品概率公式
+    addLuck = setIpyData.GetOnceLucky() * treasureCount # 增加幸运值
+    maxLuck = setIpyData.GetFullLucky() # 满幸运值
     curLuck = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreasureLuck % (treasureType)) # 当前幸运值
     updLuck = curLuck + addLuck
     
-    commItemRateList = GetUpdLuckyItemRateList(ipyData, curLuck, luckFormula, costType) # 常规产出物品格子饼图,幸运物品概率已变更
+    commItemRateList = GetUpdLuckyItemRateList(ipyData, luckyGridNum, curLuck, luckFormula, costType) # 常规产出物品格子饼图,幸运物品概率已变更
     
-    curTreasureCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreasureCount % (treasureType, isFreeType)) # 当前已寻宝次数
+    curTreasureCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreasureCount % (treasureType)) # 当前已寻宝次数
     updTreasureCount = curTreasureCount + treasureCount
-    beSureCountDict = ipyData.GetFreeGridItemRateList3() if isFreeType else ipyData.GetGridItemRateList3() # 第x次必出产出格子编号饼图
     GameWorld.DebugLog("已经寻宝次数=%s,当前幸运=%s,commItemRateList=%s" % (curTreasureCount, curLuck, commItemRateList), playerID)
-    addScore = 0 if isFreeType else IpyGameDataPY.GetFuncEvalCfg(TreasureSet1, 5)[treasureIndex] # 增加积分
-    ensureCount = IpyGameDataPY.GetFuncEvalCfg("TreasureSet", 1, {})[isFreeType] # 每多少次触发保底产出库
-    ensureRateList = ipyData.GetFreeGridItemRateList2() if isFreeType else ipyData.GetGridItemRateList2()
-    goodGridNumList = [ipyData.GetLuckyGridNum()] # 好物品格子编号 (幸运物品 + 必出 + 保底)
+    
+    goodGridNumList = [luckyGridNum] # 好物品格子编号 (幸运物品 + 必出 + 保底)
+    beSureCountDict = ipyData.GetGridItemRateList3() # 第x次必出产出格子编号饼图
     for gridRateList in beSureCountDict.values():
         for gridRateInfo in gridRateList:
             goodGridNumList.append(gridRateInfo[1])
+    ensureCount = setIpyData.GetEnsureCount() # 每多少次触发保底产出库
+    ensureRateList = ipyData.GetGridItemRateList2()
     for gridRateInfo in ensureRateList:
         goodGridNumList.append(gridRateInfo[1])
-    notifyGridNumList = IpyGameDataPY.GetFuncEvalCfg(TreasureSet2, 5) # 额外需要广播的格子,幸运必出、次数必出可不配置
+    notifyGridNumList = setIpyData.GetNotifyGridNumList() # 额外需要广播的格子,幸运必出、次数必出可不配置
     goodGridNumList += notifyGridNumList
     GameWorld.DebugLog("goodGridNumList=%s" % goodGridNumList, playerID)
-        
+    
     # 单抽产出优先级: 幸运物品 > 必出 > 保底 > 普通
     # 连抽没有优先级限制,只要满足条件即可产出
     getGridResult = []
     
     # 1.满幸运必出
     if updLuck >= maxLuck:
-        getGridResult.append(ipyData.GetLuckyGridNum())
-        GameWorld.DebugLog("满幸运必出幸运物品: gridNum=%s" % ipyData.GetLuckyGridNum(), playerID)
+        getGridResult.append(luckyGridNum)
+        GameWorld.DebugLog("满幸运必出幸运物品: luckyGridNum=%s" % luckyGridNum, playerID)
         
     # 单抽
     if treasureCount == 1:
@@ -242,7 +245,7 @@
             doCount -= 1
             gridNum = GameWorld.GetResultByRandomList(commItemRateList)
             
-            if gridNum == ipyData.GetLuckyGridNum() and gridNum in getGridResult:
+            if gridNum == luckyGridNum and gridNum in getGridResult:
                 GameWorld.DebugLog("幸运物品已经出过,不再重复产出!")
                 continue
             
@@ -283,7 +286,7 @@
     isBind = 0 # 暂时默认不绑定
     job = curPlayer.GetJob()
     gridItemInfoDict = ipyData.GetGridItemInfo() # 格子对应物品信息 {"格子编号":[物品ID, 数量], ...}
-    gridLibInfoDict = ipyData.GetGridLibInfo() # 格子对应物品信息 {"格子编号":[物品ID, 数量], ...}
+    gridLibInfoDict = ipyData.GetGridLibInfo() # 格子编号对应库ID {"编号":物品库ID, ...}
     jobItemList = ipyData.GetJobItemList()
     treasureResult = []
     randItemIDDict = IpyGameDataPY.GetFuncEvalCfg("TreasureSet", 2)
@@ -338,8 +341,8 @@
         
     # 扣消耗
     if costType == 1:
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureFreeTime % (treasureType, treasureIndex), curTime)
-        GameWorld.DebugLog("消耗免费次数,更新免费CD计算时间: %s" % curTime, playerID)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureFreeCount % (treasureType), updFreeCountToday)
+        GameWorld.DebugLog("消耗免费次数,更新今日已使用免费次数: %s" % updFreeCountToday, playerID)
     elif costType == 2:
         ItemCommon.DelCostItemByBind(curPlayer, costItemIndexList, bindCnt, unBindCnt, delCostItemCount, ChConfig.ItemDel_Treasure)
         GameWorld.DebugLog("扣除寻宝道具,costItemID=%s,delCostItemCount=%s" % (costItemID, delCostItemCount), playerID)
@@ -352,12 +355,16 @@
         GameWorld.DebugLog("扣除货币,costGoldType=%s,costGold=%s" % (costGoldType, costGold), playerID)
         
     # 加数据
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureCount % (treasureType, isFreeType), updTreasureCount)
-    if ipyData.GetLuckyGridNum() in getGridResult:
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureCount % (treasureType), updTreasureCount)
+    if luckyGridNum in getGridResult:
         updLuck = 0
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureLuck % (treasureType), updLuck)
-    PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_TreasureScore, addScore)
     
+    addScoreType = setIpyData.GetAwardMoneyType() # 额外奖励货币类型
+    addScore = setIpyData.GetAwardMoneyValue() # 单次奖励货币数
+    if addScoreType and addScore:
+        PlayerControl.GiveMoney(curPlayer, addScoreType, addScore)
+        
     if treasureType == TreasureType_Rune:
         PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_RuneTreasure, treasureCount)
         PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_RuneTreasure, treasureCount)
@@ -390,28 +397,30 @@
     if mailItemList:
         PlayerControl.SendMailByKey("HappyXBUnEnough", [playerID], mailItemList)
         
-    GameWorld.DebugLog("寻宝成功: treasureType=%s,updTreasureCount=%s,updLuck=%s,addLuck=%s,addScore=%s" 
-                       % (treasureType, updTreasureCount, updLuck, addLuck, addScore), playerID)
+    GameWorld.DebugLog("寻宝成功: treasureType=%s,updTreasureCount=%s,updLuck=%s,addLuck=%s,addScoreType=%s,addScore=%s" 
+                       % (treasureType, updTreasureCount, updLuck, addLuck, addScoreType, addScore), playerID)
     GameWorld.DebugLog("    treasureResult=%s" % (treasureResult), playerID)
     GameWorld.DebugLog("    mailItemList=%s" % (mailItemList), playerID)
     
     # 通知前端
     sendPack = ChPyNetSendPack.tagMCTreasureResult()
     sendPack.Clear()
-    sendPack.AddTreasureScore = addScore
+    sendPack.AddMoneyType = addScoreType
+    sendPack.AddMoneyValue = addScore
     sendPack.AddTreasureLuck = addLuck
     sendPack.TreasureResult = str(treasureResult)
     sendPack.TreasureResultLen = len(sendPack.TreasureResult)
     NetPackCommon.SendFakePack(curPlayer, sendPack)
     
-    Sync_TreasureInfo(curPlayer, treasureType)
+    Sync_TreasureInfo(curPlayer, [treasureType])
     return
 
-def GetUpdLuckyItemRateList(ipyData, curLuck, luckFormula, costType):
+def GetUpdLuckyItemRateList(ipyData, luckyGridNum, curLuck, luckFormula, costType):
     # 获取幸运物品提升概率后的饼图
     srcPieList = ipyData.GetGridItemRateListFree() if costType == 1 else ipyData.GetGridItemRateList1()
-    luckyGridNum = ipyData.GetLuckyGridNum()
-    
+    if not srcPieList:
+        srcPieList = ipyData.GetGridItemRateList1()
+        
     updRateList = []
     for i, rateInfo in enumerate(srcPieList):
         rate, gridNum = rateInfo
@@ -440,42 +449,26 @@
             return jobItemIDList[job - 1]
     return itemID
 
-def GetTreasureTypeList():
-    ## 寻宝类型列表
-    TreasureTypeList = IpyGameDataPY.GetConfigEx("TreasureType")
-    if not TreasureTypeList:
-        TreasureTypeList = []
+def Sync_TreasureInfo(curPlayer, syncTypeList=None):
+    if syncTypeList == None:
+        syncTypeList = []
         ipyDataMgr = IpyGameDataPY.IPY_Data()
-        for i in xrange(ipyDataMgr.GetTreasureHouseCount()):
-            ipyData = ipyDataMgr.GetTreasureHouseByIndex(i)
-            treasureType = ipyData.GetTreasureType()
-            if treasureType not in TreasureTypeList:
-                TreasureTypeList.append(treasureType)
-        IpyGameDataPY.SetConfigEx("TreasureType", TreasureTypeList)
-    return TreasureTypeList
-
-def Sync_TreasureInfo(curPlayer, treasureType=None):
-    if treasureType == None:
-        syncTypeList = GetTreasureTypeList()
-    else:
-        syncTypeList = [treasureType]
-        
+        for i in xrange(ipyDataMgr.GetTreasureSetCount()):
+            ipyData = ipyDataMgr.GetTreasureSetByIndex(i)
+            syncTypeList.append(ipyData.GetTreasureType())
+            
     treasureInfoPack = ChPyNetSendPack.tagMCTreasureInfo()
     treasureInfoPack.Clear()
     treasureInfoPack.TreasuerInfoList = []
     for tType in syncTypeList:
-        treasureCountList = IpyGameDataPY.GetFuncEvalCfg("TreasureSet1%s" % tType, 1)
         tTypeInfo = ChPyNetSendPack.tagMCTreasureTypeInfo()
         tTypeInfo.Clear()
         tTypeInfo.TreasureType = tType
         tTypeInfo.LuckValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreasureLuck % (tType))
-        tTypeInfo.FreeCountTime = []
-        for i in xrange(len(treasureCountList)):
-            tTypeInfo.FreeCountTime.append(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreasureFreeTime % (tType, i)))
-        tTypeInfo.IndexCount = len(tTypeInfo.FreeCountTime)
+        tTypeInfo.TreasureCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreasureCount % (tType))
+        tTypeInfo.FreeCountToday = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreasureFreeCount % (tType))
         treasureInfoPack.TreasuerInfoList.append(tTypeInfo)
     treasureInfoPack.InfoCount = len(treasureInfoPack.TreasuerInfoList)
     NetPackCommon.SendFakePack(curPlayer, treasureInfoPack)
     return
-
 

--
Gitblit v1.8.0