From 2a3e2e53da4ff2005fc84f702483fd3f29b9c569 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 17 十月 2025 20:28:44 +0800
Subject: [PATCH] 237 【福利内容】每日任务/每周任务/章节奖励-服务端(章节奖励英雄之路,成就系统)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamilyZhenfa.py           |    4 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py                    |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py                         |   56 -
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py                     |  207 +----
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGodWeapon.py              |    4 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py                         |    7 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_CleanGuilt.py        |    1 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDogz.py                   |    6 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py                       |   28 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py                     |    9 
 PySysDB/PySysDBPY.h                                                                                        |   16 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py                |    8 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWing.py                   |    3 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRune.py                   |    4 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py                  |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py                         |  227 ------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py                  |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossRealmPK.py           |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py            |    3 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py   |    1 
 /dev/null                                                                                                  |   51 -
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/MainLevel.py               |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini                                 |   13 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DataRecordPack.py                      |   10 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py                       |    5 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuccess.py                | 1103 ++++++--------------------------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_ItemCompound.py |    8 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py           |    5 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                            |   17 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Success.py                 |  129 +--
 30 files changed, 350 insertions(+), 1,585 deletions(-)

diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 27eddeb..34064ab 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -1303,21 +1303,13 @@
 
 //成就表
 
-struct tagSuccess
+struct Success
 {
-	DWORD		_ID;	//成就ID
-	WORD		Type;	//成就类型
+	DWORD		SuccID;	//成就ID
+	WORD		_SuccType;	//成就类型
 	DWORD		NeedCnt;	//需要数量
 	list		Condition;	//辅助条件
-	list		PreSuccess;	//需要达成前置成就
-	dict		AwardItem;	//奖励物品列表
-	dict		AwardItem2;	//通行证奖励物品列表
-	dict		Money;	//金钱
-	DWORD		Exp;	//经验
-	dict		AwardAttr;	//奖励属性
-	DWORD		RedPacketID;	//红包ID
-	DWORD		MagicWeaponID;	//法宝ID
-	DWORD		MagicWeaponExp;	//法宝升级经验
+	list		AwardItemList;	//奖励物品列表
 };
 
 //通天令等级表
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
index 3d786ba..581a07c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -755,19 +755,6 @@
 PacketSubCMD_1=0x12
 PacketCallFunc_1=OnCMViewPlayerInfo
 
-
-;成就系统
-[PlayerSuccess]
-ScriptName = Player\PlayerSuccess
-Writer = hxp
-Releaser = hxp
-RegType = 0
-RegisterPackCount = 1
-
-PacketCMD_1=0xA5
-PacketSubCMD_1=0x42
-PacketCallFunc_1=OnGetSuccessAward
-
 ;通天令
 [PlayerTongTianLing]
 ScriptName = Player\PlayerTongTianLing
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index fbfad28..36c80b4 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -474,12 +474,11 @@
 Def_ItemID_GongdePoint = 530               # 直接给功德点
 Def_ItemID_FamilyFlagWarPoint = 540       # 直接给万界积分
 Def_ItemID_TongTianPoint = 720               # 直接给通天令经验点
-Def_ItemID_SuccessScore = 590               # 直接给成就积分
 Def_TransformItemIDList = [Def_ItemID_FamilyContribution, Def_ItemID_SP, Def_ItemID_GoldPaper, 
                            Def_ItemID_RealmPoint, Def_ItemID_SilverMoney, Def_ItemID_BossReborn, Def_ItemID_Ysog,
                            Def_ItemID_SoulDust, Def_ItemID_SoulSplinters, Def_ItemID_SoulCore, Def_ItemID_Honor, Def_ItemID_GoldMoney,
                            Def_ItemID_FuncSysPrivilege, Def_ItemID_FCPartyPoint, Def_ItemID_BTGMPoint, Def_ItemID_GuShenMoney,
-                           Def_ItemID_GongdePoint, Def_ItemID_TongTianPoint, Def_ItemID_SuccessScore,
+                           Def_ItemID_GongdePoint, Def_ItemID_TongTianPoint,
                            Def_ItemID_FamilyFlagWarPoint]
 # 货币类型对应直接给货币物品ID
 MoneyItemIDDict = {IPY_GameWorld.TYPE_Price_Gold_Money:Def_ItemID_GoldMoney,
@@ -3800,13 +3799,8 @@
 Def_PDict_InvestKeyCount = 3 # key编号数
 
 # 成就 Def_PDictType_Success
-Def_PDict_Success_AwardRecord = "Succ_AwardRecord_%s" # 成就领奖记录,参数(key编号),按索引位存储0-未领,1-已领
-Def_PDict_Success_LastDay = "Succ_LastDay_%s" # 连续类型上一次更新进度时的开服天数,参数(成就编号)
-Def_PDict_Success_CntValue = "Su_%s_%s" # 当前次数值,参数(成就类型、条件)
-Def_PDict_Success_FinishTime = "Succ_FinishTime_%s" # 成就是否已完成,参数(索引)
-Def_PDict_Success_CheckVersion = "Succ_CheckVersion" #老玩家某些功能成就检查版本
-Def_PDict_Success_PassportAward = "Succ_PassportAward_%s" #成就通行证领奖状态,参数(key编号),按索引位存储0-未领,1-已领
-Def_PDict_Success_ScoreAward = "Succ_ScoreAward" # 成就积分奖励记录,按索引位存储0-未领,1-已领
+Def_PDict_SuccessValue = "Succ_%s_%s" # 当前次数值,参数(成就类型、条件)
+Def_PDict_SuccessAward = "Succ_Award_%s" # 成就领奖记录,按成就ID位存储0-未领,1-已领,参数(key编号)
 
 # 通天令
 Def_PDict_TTL_StartTime = "TTL_StartTime" # 本轮通天令开始时间戳
@@ -4987,7 +4981,7 @@
 Def_RewardType_SponsorDaily, #赞助星级每日奖励 56
 Def_RewardType_SponsorStar, #赞助星级礼包奖励 57
 Def_RewardType_GubaoItemEff, #古宝特殊效果物品奖励 58
-Def_RewardType_SuccessScore, #成就积分奖励 59
+Def_RewardType_Success, #成就奖励 59
 Def_RewardType_BuyOne, #买一送多活动免费奖励 60
 Def_RewardType_CustomAward, #自定义奖励 61
 Def_RewardType_RealmXXZL, #境界修仙之路奖励 62
@@ -5235,9 +5229,6 @@
     PowerDownType_ResetTalent:'ResetTalent',
     PowerDownType_GatherSoul:'GatherSoul',
     }
-
-# CTG ID 定义
-Def_CTGID_SuccessPassport = 117 # 成就通行证
 
 # 通天令任务类型定义
 TTLTaskTypeList = (
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index fb1039e..7b7a484 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -6574,62 +6574,6 @@
 
 
 #------------------------------------------------------
-# A5 42 领取成就奖励 #tagMCGetSuccessAward
-
-class  tagMCGetSuccessAward(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("SuccID", c_int),    #成就ID
-                  ("IsPassport", c_ubyte),    #是否通行证奖励
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA5
-        self.SubCmd = 0x42
-        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 = 0xA5
-        self.SubCmd = 0x42
-        self.SuccID = 0
-        self.IsPassport = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCGetSuccessAward)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A5 42 领取成就奖励 //tagMCGetSuccessAward:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                SuccID:%d,
-                                IsPassport:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.SuccID,
-                                self.IsPassport
-                                )
-        return DumpString
-
-
-m_NAtagMCGetSuccessAward=tagMCGetSuccessAward()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCGetSuccessAward.Cmd,m_NAtagMCGetSuccessAward.SubCmd))] = m_NAtagMCGetSuccessAward
-
-
-#------------------------------------------------------
 # A5 44 通天令领取等级奖励 #tagCMGetTongTianLVAward
 
 class  tagCMGetTongTianLVAward(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 09fa5f6..c4a4a30 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -8585,66 +8585,13 @@
 
 
 #------------------------------------------------------
-# A3 41  成就完成 #tagMCSuccessFinish
+# A3 42 成就领奖记录列表 #tagSCSuccessAwardRecordList
 
-class  tagMCSuccessFinish(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("SuccID", c_int),    #成就id
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x41
-        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 = 0xA3
-        self.SubCmd = 0x41
-        self.SuccID = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCSuccessFinish)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A3 41  成就完成 //tagMCSuccessFinish:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                SuccID:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.SuccID
-                                )
-        return DumpString
-
-
-m_NAtagMCSuccessFinish=tagMCSuccessFinish()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSuccessFinish.Cmd,m_NAtagMCSuccessFinish.SubCmd))] = m_NAtagMCSuccessFinish
-
-
-#------------------------------------------------------
-#A3 42  成就完成领奖记录列表 #tagMCSuccessFinishAwardRecordList
-
-class  tagMCSuccessFinishAwardRecord(Structure):
+class  tagSCSuccessAwardRecord(Structure):
     _pack_ = 1
     _fields_ = [
                   ("RecordIndex", c_ushort),    #第几个记录值 每个key存31个succid   0-30为0, 31-61为1..
-                  ("Record", c_int),    #对应是否领取值
-                  ("PassportRecord", c_int),    #通行证奖励是否领取值
+                  ("Record", c_int),    #根据成就ID位判断是否已领取
                   ]
 
     def __init__(self):
@@ -8659,33 +8606,30 @@
     def Clear(self):
         self.RecordIndex = 0
         self.Record = 0
-        self.PassportRecord = 0
         return
 
     def GetLength(self):
-        return sizeof(tagMCSuccessFinishAwardRecord)
+        return sizeof(tagSCSuccessAwardRecord)
 
     def GetBuffer(self):
         return string_at(addressof(self), self.GetLength())
 
     def OutputString(self):
-        DumpString = '''//A3 42  成就完成领奖记录列表 //tagMCSuccessFinishAwardRecordList:
+        DumpString = '''// A3 42 成就领奖记录列表 //tagSCSuccessAwardRecordList:
                                 RecordIndex:%d,
-                                Record:%d,
-                                PassportRecord:%d
+                                Record:%d
                                 '''\
                                 %(
                                 self.RecordIndex,
-                                self.Record,
-                                self.PassportRecord
+                                self.Record
                                 )
         return DumpString
 
 
-class  tagMCSuccessFinishAwardRecordList(Structure):
+class  tagSCSuccessAwardRecordList(Structure):
     Head = tagHead()
     RecordCnt = 0    #(WORD RecordCnt)//记录个数
-    RecordList = list()    #(vector<tagMCSuccessFinishAwardRecord> RecordList)//记录列表
+    RecordList = list()    #(vector<tagSCSuccessAwardRecord> RecordList)//记录列表
     data = None
 
     def __init__(self):
@@ -8699,7 +8643,7 @@
         _pos = self.Head.ReadData(_lpData, _pos)
         self.RecordCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
         for i in range(self.RecordCnt):
-            temRecordList = tagMCSuccessFinishAwardRecord()
+            temRecordList = tagSCSuccessAwardRecord()
             _pos = temRecordList.ReadData(_lpData, _pos)
             self.RecordList.append(temRecordList)
         return _pos
@@ -8744,18 +8688,18 @@
         return DumpString
 
 
-m_NAtagMCSuccessFinishAwardRecordList=tagMCSuccessFinishAwardRecordList()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSuccessFinishAwardRecordList.Head.Cmd,m_NAtagMCSuccessFinishAwardRecordList.Head.SubCmd))] = m_NAtagMCSuccessFinishAwardRecordList
+m_NAtagSCSuccessAwardRecordList=tagSCSuccessAwardRecordList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCSuccessAwardRecordList.Head.Cmd,m_NAtagSCSuccessAwardRecordList.Head.SubCmd))] = m_NAtagSCSuccessAwardRecordList
 
 
 #------------------------------------------------------
-# A3 40  成就信息列表 #tagMCSuccessInfoList
+# A3 40 成就信息列表 #tagSCSuccessInfoList
 
-class  tagMCSuccessInfo(Structure):
+class  tagSCSuccessInfo(Structure):
     SuccType = 0    #(WORD SuccType)//成就类型
-    Len = 0    #(WORD Len)//条件长度
-    Condition = ""    #(String Condition)//成就条件
-    CntValue = 0    #(DWORD CntValue)//当前完成进度值
+    CLen = 0    #(BYTE CLen)
+    Conds = list()    #(vector<DWORD> Conds)// 条件列表
+    CurValue = 0    #(DWORD CurValue)// 进度值,相同任务类型条件的进度值共享
     data = None
 
     def __init__(self):
@@ -8765,23 +8709,25 @@
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
         self.SuccType,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.Len,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        self.Condition,_pos = CommFunc.ReadString(_lpData, _pos,self.Len)
-        self.CntValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.CLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.CLen):
+            value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
+            self.Conds.append(value)
+        self.CurValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         return _pos
 
     def Clear(self):
         self.SuccType = 0
-        self.Len = 0
-        self.Condition = ""
-        self.CntValue = 0
+        self.CLen = 0
+        self.Conds = list()
+        self.CurValue = 0
         return
 
     def GetLength(self):
         length = 0
         length += 2
-        length += 2
-        length += len(self.Condition)
+        length += 1
+        length += 4 * self.CLen
         length += 4
 
         return length
@@ -8789,31 +8735,32 @@
     def GetBuffer(self):
         data = ''
         data = CommFunc.WriteWORD(data, self.SuccType)
-        data = CommFunc.WriteWORD(data, self.Len)
-        data = CommFunc.WriteString(data, self.Len, self.Condition)
-        data = CommFunc.WriteDWORD(data, self.CntValue)
+        data = CommFunc.WriteBYTE(data, self.CLen)
+        for i in range(self.CLen):
+            data = CommFunc.WriteDWORD(data, self.Conds[i])
+        data = CommFunc.WriteDWORD(data, self.CurValue)
         return data
 
     def OutputString(self):
         DumpString = '''
                                 SuccType:%d,
-                                Len:%d,
-                                Condition:%s,
-                                CntValue:%d
+                                CLen:%d,
+                                Conds:%s,
+                                CurValue:%d
                                 '''\
                                 %(
                                 self.SuccType,
-                                self.Len,
-                                self.Condition,
-                                self.CntValue
+                                self.CLen,
+                                "...",
+                                self.CurValue
                                 )
         return DumpString
 
 
-class  tagMCSuccessInfoList(Structure):
+class  tagSCSuccessInfoList(Structure):
     Head = tagHead()
-    count = 0    #(WORD count)//信息个数
-    SuccessInfoList = list()    #(vector<tagMCSuccessInfo> SuccessInfoList)
+    Count = 0    #(WORD Count)//信息个数
+    SuccessInfoList = list()    #(vector<tagSCSuccessInfo> SuccessInfoList)
     data = None
 
     def __init__(self):
@@ -8825,9 +8772,9 @@
     def ReadData(self, _lpData, _pos=0, _Len=0):
         self.Clear()
         _pos = self.Head.ReadData(_lpData, _pos)
-        self.count,_pos = CommFunc.ReadWORD(_lpData, _pos)
-        for i in range(self.count):
-            temSuccessInfoList = tagMCSuccessInfo()
+        self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        for i in range(self.Count):
+            temSuccessInfoList = tagSCSuccessInfo()
             _pos = temSuccessInfoList.ReadData(_lpData, _pos)
             self.SuccessInfoList.append(temSuccessInfoList)
         return _pos
@@ -8837,7 +8784,7 @@
         self.Head.Clear()
         self.Head.Cmd = 0xA3
         self.Head.SubCmd = 0x40
-        self.count = 0
+        self.Count = 0
         self.SuccessInfoList = list()
         return
 
@@ -8845,7 +8792,7 @@
         length = 0
         length += self.Head.GetLength()
         length += 2
-        for i in range(self.count):
+        for i in range(self.Count):
             length += self.SuccessInfoList[i].GetLength()
 
         return length
@@ -8853,79 +8800,27 @@
     def GetBuffer(self):
         data = ''
         data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
-        data = CommFunc.WriteWORD(data, self.count)
-        for i in range(self.count):
+        data = CommFunc.WriteWORD(data, self.Count)
+        for i in range(self.Count):
             data = CommFunc.WriteString(data, self.SuccessInfoList[i].GetLength(), self.SuccessInfoList[i].GetBuffer())
         return data
 
     def OutputString(self):
         DumpString = '''
                                 Head:%s,
-                                count:%d,
+                                Count:%d,
                                 SuccessInfoList:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
-                                self.count,
+                                self.Count,
                                 "..."
                                 )
         return DumpString
 
 
-m_NAtagMCSuccessInfoList=tagMCSuccessInfoList()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSuccessInfoList.Head.Cmd,m_NAtagMCSuccessInfoList.Head.SubCmd))] = m_NAtagMCSuccessInfoList
-
-
-#------------------------------------------------------
-# A3 43  成就积分信息 #tagMCSuccessScoreInfo
-
-class  tagMCSuccessScoreInfo(Structure):
-    _pack_ = 1
-    _fields_ = [
-                  ("Cmd", c_ubyte),
-                  ("SubCmd", c_ubyte),
-                  ("ScoreAwardState", c_int),    #成就积分领奖记录,按奖励索引位记录是否领取
-                  ]
-
-    def __init__(self):
-        self.Clear()
-        self.Cmd = 0xA3
-        self.SubCmd = 0x43
-        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 = 0xA3
-        self.SubCmd = 0x43
-        self.ScoreAwardState = 0
-        return
-
-    def GetLength(self):
-        return sizeof(tagMCSuccessScoreInfo)
-
-    def GetBuffer(self):
-        return string_at(addressof(self), self.GetLength())
-
-    def OutputString(self):
-        DumpString = '''// A3 43  成就积分信息 //tagMCSuccessScoreInfo:
-                                Cmd:%s,
-                                SubCmd:%s,
-                                ScoreAwardState:%d
-                                '''\
-                                %(
-                                self.Cmd,
-                                self.SubCmd,
-                                self.ScoreAwardState
-                                )
-        return DumpString
-
-
-m_NAtagMCSuccessScoreInfo=tagMCSuccessScoreInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCSuccessScoreInfo.Cmd,m_NAtagMCSuccessScoreInfo.SubCmd))] = m_NAtagMCSuccessScoreInfo
+m_NAtagSCSuccessInfoList=tagSCSuccessInfoList()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCSuccessInfoList.Head.Cmd,m_NAtagSCSuccessInfoList.Head.SubCmd))] = m_NAtagSCSuccessInfoList
 
 
 #------------------------------------------------------
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DataRecordPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DataRecordPack.py
index 3d303c4..f5bc798 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DataRecordPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DataRecordPack.py
@@ -1291,16 +1291,6 @@
     SendEventPack("GlobalDropRate", dataDict, curPlayer)
     return
 
-## 玩家上线成就检查
-#  @return
-def DR_CheckOldPlayerSuccess(curPlayer):
-    dataDict = {'PlayerID':curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(), 
-                'AccID':curPlayer.GetAccID()}
-    
-    #发送封包
-    SendEventPack("CheckOldPlayerSuccess", dataDict, curPlayer)
-    return
-
 ## 玩家境界升级
 #  @return
 def DR_RealmLVUp(curPlayer, realmlv):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_ItemCompound.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_ItemCompound.py
index b14d8bb..54125ab 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_ItemCompound.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_ItemCompound.py
@@ -23,7 +23,6 @@
 import ItemControler
 import IpyGameDataPY
 import ChConfig
-import PlayerSuccess
 import DataRecordPack
 
 import random
@@ -218,13 +217,6 @@
             
         # 通知合成成功
         ItemCommon.SyncMakeItemAnswer(curPlayer, ShareDefine.Def_mitItemCompound, ChConfig.Def_ComposeState_Sucess, makeItemID)
-        #成功合成1个物品成就
-        PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_CompoundItemEx, compoundCnt, [makeItemID])
-        #合成X阶X颜色X星级以上装备, 星级改为装备位了,暂时没有用,屏蔽
-        #classLV = ItemCommon.GetItemClassLV(makeItemData)
-        #itemColor = makeItemData.GetItemColor()
-        #itemQuality = makeItemData.GetItemQuality()
-        #PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_CompoundEquip, compoundCnt, [classLV, itemColor, itemQuality])
     # 合成失败
     else:
         GameWorld.DebugLog("合成失败!")
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/AddSuccess.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/AddSuccess.py
deleted file mode 100644
index b459065..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/AddSuccess.py
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-#-------------------------------------------------------------------------------
-#
-##@package GM.Commands.AddSuccess
-#
-# @todo:增加成就进度数据
-# @author hxp
-# @date 2014-11-13
-# @version 1.0
-#
-# 详细描述: 增加成就进度数据
-#
-#---------------------------------------------------------------------
-"""Version = 2014-11-13 20:30"""
-
-import PlayerSuccess
-import ShareDefine
-import GameWorld
-
-#逻辑实现
-## GM命令执行入口
-#  @param curPlayer 当前玩家
-#  @param msgList 参数列表 [npcID]
-#  @return None
-#  @remarks 函数详细说明.
-def OnExec(curPlayer, msgList):
-    
-    if len(msgList) < 2:
-        GameWorld.DebugAnswer(curPlayer, "参数错误: AddSuccess 成就类型 增加进度 附加条件(选填)")
-        return
-    
-    successType = msgList[0]
-    addCnt = msgList[1]
-    condition = []
-    
-    if successType not in ShareDefine.SuccessTypeList:
-        GameWorld.DebugAnswer(curPlayer, "该成就类型不存在!")
-        return
-    
-    if addCnt < 1:
-        return
-    
-    if len(msgList) > 2:
-        condition = msgList[2:]
-        
-    PlayerSuccess.DoAddSuccessProgress(curPlayer, successType, addCnt, condition)
-    return
-
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/MainLevel.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/MainLevel.py
index 70916dc..c4c09f4 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/MainLevel.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/MainLevel.py
@@ -91,6 +91,6 @@
         wave = waveMax
         
     nowValue = PlayerControl.SetMainLevelNowInfo(curPlayer, chapterID, levelNum, wave)
-    passValue = PlayerControl.SetMainLevelPassInfo(curPlayer, chapterID, levelNum, wave)
+    passValue = PlayerControl.SetMainLevelPassInfo(curPlayer, chapterID, levelNum, max(0, wave - 1))
     GameWorld.DebugAnswer(curPlayer, "设置主线:章关=%s-%s,波=%s,%s,%s" % (chapterID, levelNum, wave, nowValue, passValue))
     return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Success.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Success.py
index b2491a0..718f47b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Success.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Success.py
@@ -15,135 +15,96 @@
 #"""Version = 2020-03-31 18:00"""
 #-------------------------------------------------------------------------------
 
-import ChConfig
 import ShareDefine
 import PlayerSuccess
+import IpyGameDataPY
 import GameWorld
-import PlayerControl
 
-#逻辑实现
-## GM命令执行入口
-#  @param curPlayer 当前玩家
-#  @param msgList 参数列表 [npcID]
-#  @return None
-#  @remarks 函数详细说明.
 def OnExec(curPlayer, msgList):
     if not msgList:
-        GameWorld.DebugAnswer(curPlayer, "重置所有成就: Success 0")
-        GameWorld.DebugAnswer(curPlayer, "重置指定成就: Success 0 类型")
-        GameWorld.DebugAnswer(curPlayer, "重置成就领奖: Success w 类型")
-        GameWorld.DebugAnswer(curPlayer, "输出成就数据: Success p 类型")
-        #GameWorld.DebugAnswer(curPlayer, "增加成就进度: Success a 类型 进度 条件(选填)")
-        #GameWorld.DebugAnswer(curPlayer, "更新成就进度: Success u 类型 进度 条件(选填)")
+        GameWorld.DebugAnswer(curPlayer, "重置成就: Success 0 [类型 ...]")
+        GameWorld.DebugAnswer(curPlayer, "输出成就: Success p 类型")
+        GameWorld.DebugAnswer(curPlayer, "增加进度: Success a 类型 进度 [条件 ...]")
+        GameWorld.DebugAnswer(curPlayer, "更新进度: Success u 类型 进度 [条件 ...]")
         return
     
     cmdType = msgList[0]
     # 重置数据
     if cmdType == 0:
         __DoResetSuccess(curPlayer, msgList)
-    # 重置领奖
-    elif cmdType == "w":
-        __DoResetSuccessAward(curPlayer, msgList)
     # 输出数据
     elif cmdType == "p":
         __DoPrintSuccess(curPlayer, msgList)
     # 增加进度
     elif cmdType == "a":
-        pass
+        succType = msgList[1] if len(msgList) > 1 else 0
+        addValue = msgList[2] if len(msgList) > 2 else 1
+        conds = msgList[3:]
+        GameWorld.DebugAnswer(curPlayer, "增加成就进度: T:%s,V:%s,C:%s" % (succType, addValue, conds))
+        PlayerSuccess.DoAddSuccessProgress(curPlayer, succType, addValue, conds)
     # 更新进度
     elif cmdType == "u":
-        pass
-    
+        succType = msgList[1] if len(msgList) > 1 else 0
+        newCnt = msgList[2] if len(msgList) > 2 else 1
+        conds = msgList[3:]
+        GameWorld.DebugAnswer(curPlayer, "更新成就进度: T:%s,V:%s,C:%s" % (succType, addValue, conds))
+        PlayerSuccess.UptateSuccessProgress(curPlayer, succType, newCnt, conds)
     return
 
-def __DoResetSuccess(curPlayer, msgList):
+def __DoResetSuccess(curPlayer, msgList, resetValue=True):
     ## 重置成就数据
     if len(msgList) > 1:
-        typeList = [msgList[1]]
-    else:
-        typeList = ShareDefine.SuccessTypeList
-    resetTypeList = []
-    for succType in typeList:
-        succDataList = PlayerSuccess.GetSuccDataMng().GetSuccDataByType(succType)
-        if not succDataList:
-            continue
-        
-        for succDataObj in succDataList:
-            succID = succDataObj.succID
-            if succType not in resetTypeList:
-                resetTypeList.append(succType)
-            PlayerSuccess.SetSuccHasGot(curPlayer, succID, False)
-            PlayerSuccess.SetSuccPassportAwardHasGot(curPlayer, succID, False)
-            PlayerSuccess.SetSuccFinish(curPlayer, succID, False)
-            PlayerSuccess.SetPDictValue(curPlayer, ChConfig.Def_PDict_Success_LastDay % (succID), 0)
-            PlayerSuccess.SetSuccFinishValue(curPlayer, succType, succDataObj.condition, 0)
-            
-    # 老玩家上线检查情况
-    PlayerSuccess.SetPDictValue(curPlayer, ChConfig.Def_PDict_Success_CheckVersion, 0)
-    # 同步成就信息
-    PlayerSuccess.Sync_SuccessInfo(curPlayer, [], True)
-    # 同步成就领奖记录
-    PlayerSuccess.Sync_SuccTypeIndexAwardRecord(curPlayer, [], True)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Success_ScoreAward, 0)
-    PlayerSuccess.Sync_SuccessScoreAward(curPlayer)
-    GameWorld.DebugAnswer(curPlayer, "重置成就类型:%s" % resetTypeList)
-    return
-
-def __DoResetSuccessAward(curPlayer, msgList):
-    ## 重置成就领奖
-    if len(msgList) > 1:
-        typeList = [msgList[1]]
+        typeList = msgList[1:]
     else:
         typeList = ShareDefine.SuccessTypeList
         
-    resetIDList = []
+    succIDList = []
+    syncTypeCondList = []
     for succType in typeList:
-        succDataList = PlayerSuccess.GetSuccDataMng().GetSuccDataByType(succType)
-        if not succDataList:
+        ipyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("Success", succType)
+        if not ipyDataList:
             continue
-        
-        for succDataObj in succDataList:
-            succID = succDataObj.succID
-            if not PlayerSuccess.GetSuccHasGot(curPlayer, succID) and not PlayerSuccess.GetSuccPassportAwardHasGot(curPlayer, succID):
-                continue
-            PlayerSuccess.SetSuccHasGot(curPlayer, succID, False)
-            PlayerSuccess.SetSuccPassportAwardHasGot(curPlayer, succID, False)
-            PlayerSuccess.SetSuccFinish(curPlayer, succID) # 有重置领奖的ID需要重新设置为已完成
-            resetIDList.append(succID)
+        for ipyData in ipyDataList:
+            succID = ipyData.GetSuccID()
+            conds = ipyData.GetCondition()
             
-    # 同步成就领奖记录
-    PlayerSuccess.Sync_SuccTypeIndexAwardRecord(curPlayer, resetIDList, True)
-    GameWorld.DebugAnswer(curPlayer, "重置成就ID领奖:%s" % resetIDList)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Success_ScoreAward, 0)
-    PlayerSuccess.Sync_SuccessScoreAward(curPlayer)
+            if PlayerSuccess.GetSuccHasGot(curPlayer, succID):
+                succIDList.append(succID)
+                PlayerSuccess.SetSuccHasGot(curPlayer, succID, False)
+                
+            if [succType, conds] not in syncTypeCondList:
+                syncTypeCondList.append([succType, conds])
+                PlayerSuccess.SetSuccValue(curPlayer, succType, conds, 0)
+                
+    PlayerSuccess.SyncSuccessInfo(curPlayer, syncTypeCondList, True)
+    PlayerSuccess.SyncSuccessAwardRecord(curPlayer, succIDList, True)
+    GameWorld.DebugAnswer(curPlayer, "重置成就类型:%s" % typeList)
     return
 
 def __DoPrintSuccess(curPlayer, msgList):
     ## 输出成就数据
     if len(msgList) > 1:
-        typeList = [msgList[1]]
+        typeList = msgList[1:]
     else:
         typeList = ShareDefine.SuccessTypeList
     GameWorld.DebugAnswer(curPlayer, "--- 输出有进度的成就数据 ---")
     for succType in typeList:
-        succDataList = PlayerSuccess.GetSuccDataMng().GetSuccDataByType(succType)
-        if not succDataList:
+        ipyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("Success", succType)
+        if not ipyDataList:
             continue
         printType = False
-        for succDataObj in succDataList:
-            succID = succDataObj.succID
-            value = PlayerSuccess.GetSuccFinishValue(curPlayer, succType, succDataObj.condition)
+        for ipyData in ipyDataList:
+            succID = ipyData.GetSuccID()
+            conds = ipyData.GetCondition()
+            needCnt = ipyData.GetNeedCnt()
+            value = PlayerSuccess.GetSuccValue(curPlayer, succType, conds)
             if not value:
                 continue
             if not printType:
                 printType = True
-                GameWorld.DebugAnswer(curPlayer, "成就类型: %s" % succType)
-            isFinish = PlayerSuccess.GetSuccIsFinish(curPlayer, succID)
+                GameWorld.DebugAnswer(curPlayer, "----- 成就类型: %s" % succType)
             hasGot = PlayerSuccess.GetSuccHasGot(curPlayer, succID)
-            passportHasGot = PlayerSuccess.GetSuccPassportAwardHasGot(curPlayer, succID)
-            GameWorld.DebugAnswer(curPlayer, "    id=%s 条件:%s 进度:%s/%s 完成:%s 领奖:%s %s" 
-                                  % (succID, succDataObj.condition, value, succDataObj.needCnt, isFinish, hasGot, passportHasGot))
+            GameWorld.DebugAnswer(curPlayer, "ID:%s,C:%s,V:%s/%s,奖:%s" % (succID, conds, value, needCnt, hasGot))
             
     return
-
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py
index c101b19..4834940 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py
@@ -1549,7 +1549,6 @@
         addCount = updCnt-enterCnt
         PlayerControl.NomalDictSetProperty(curPlayer, enterCntKey, updCnt)
         
-        #PlayerSuccess.AddEnterFBSuccess(curPlayer, fbID, addCountEx)
         updValue = updCnt
     GameWorld.DebugLog("    AddEnterFBCount fbID=%s, addCount=%s, lineBit=%s, enterCnt=%s,updValue=%s" 
                        % (fbID, addCount, lineBit, enterCnt, updValue), curPlayer.GetPlayerID())
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 4c15083..c38bb47 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -1073,19 +1073,11 @@
                         ),
 
                 "Success":(
-                        ("DWORD", "ID", 1),
-                        ("WORD", "Type", 0),
+                        ("DWORD", "SuccID", 0),
+                        ("WORD", "SuccType", 1),
                         ("DWORD", "NeedCnt", 0),
                         ("list", "Condition", 0),
-                        ("list", "PreSuccess", 0),
-                        ("dict", "AwardItem", 0),
-                        ("dict", "AwardItem2", 0),
-                        ("dict", "Money", 0),
-                        ("DWORD", "Exp", 0),
-                        ("dict", "AwardAttr", 0),
-                        ("DWORD", "RedPacketID", 0),
-                        ("DWORD", "MagicWeaponID", 0),
-                        ("DWORD", "MagicWeaponExp", 0),
+                        ("list", "AwardItemList", 0),
                         ),
 
                 "TongTianLV":(
@@ -3962,19 +3954,11 @@
         self.attrTuple = None
         return
         
-    def GetID(self): return self.attrTuple[0] # 成就ID DWORD
-    def GetType(self): return self.attrTuple[1] # 成就类型 WORD
+    def GetSuccID(self): return self.attrTuple[0] # 成就ID DWORD
+    def GetSuccType(self): return self.attrTuple[1] # 成就类型 WORD
     def GetNeedCnt(self): return self.attrTuple[2] # 需要数量 DWORD
     def GetCondition(self): return self.attrTuple[3] # 辅助条件 list
-    def GetPreSuccess(self): return self.attrTuple[4] # 需要达成前置成就 list
-    def GetAwardItem(self): return self.attrTuple[5] # 奖励物品列表 dict
-    def GetAwardItem2(self): return self.attrTuple[6] # 通行证奖励物品列表 dict
-    def GetMoney(self): return self.attrTuple[7] # 金钱 dict
-    def GetExp(self): return self.attrTuple[8] # 经验 DWORD
-    def GetAwardAttr(self): return self.attrTuple[9] # 奖励属性 dict
-    def GetRedPacketID(self): return self.attrTuple[10] # 红包ID DWORD
-    def GetMagicWeaponID(self): return self.attrTuple[11] # 法宝ID DWORD
-    def GetMagicWeaponExp(self): return self.attrTuple[12] # 法宝升级经验 DWORD
+    def GetAwardItemList(self): return self.attrTuple[4] # 奖励物品列表 list
 
 # 通天令等级表
 class IPY_TongTianLV():
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
index 9c669d6..0347383 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
@@ -46,7 +46,6 @@
 import ChPyNetSendPack
 import NetPackCommon
 import IpyGameDataPY
-import PlayerSuccess
 import PyGameData
 import NPCCommon
 import FBCommon
@@ -270,9 +269,6 @@
         #    PickupItemSysNotify(curPlayer, isTeamNotify, itemMsgList, isEquip)
         #=======================================================================
         
-        #成就
-        PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_PickUpItem, curItemCount, [curItemID])
-    
     #物品已经被捡起, 把物品指针置为空
     mapItem.SetDropItem(None)
     #通知客户端, 人物捡起该物品, 以及回收物品的逻辑
@@ -396,9 +392,6 @@
                        % (curItemTypeID, useResult, isOK, successCnt))    
     if not isOK:
         return False
-    
-    #------------使用物品成功, 执行相关操作
-    PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_UseItem, successCnt, [curItemTypeID])
     
     curPlayer.Sync_UseItem(curItemTypeID, useItemIndex)
     curPlayer.SetItemCD(curItemCDType, tick)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
index 866a05c..452ef4b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
@@ -905,8 +905,6 @@
             PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_GongdePoint, itemCount)
         elif itemID == ChConfig.Def_ItemID_FamilyFlagWarPoint:
             PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_FamilyFlagWarPoint, itemCount)
-        elif itemID == ChConfig.Def_ItemID_SuccessScore:
-            PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_SuccessSocre, itemCount, moneyEventName, addDict)
         return True
     
     def __CrossServerPutInItem(self, packIndex, tagItem, event=["", False, {}]):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_CleanGuilt.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_CleanGuilt.py
index 15fa10f..4c61851 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_CleanGuilt.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_CleanGuilt.py
@@ -17,7 +17,6 @@
 #导入
 import BuffSkill
 import ItemCommon
-import PlayerSuccess
 import PlayerControl
 import ShareDefine
 import ChConfig
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
index 5329d24..197ee30 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
@@ -40,7 +40,6 @@
 import DataRecordPack
 import NetPackCommon
 import FBCommon
-import PlayerSuccess
 import PlayerPrestigeSys
 import GY_Query_BossFirstKill
 import FormulaControl
@@ -3158,10 +3157,6 @@
         #不是普通NPC    
         elif npcObjType != IPY_GameWorld.gnotNormal:
             return
-        npcID = curNPC.GetNPCID()
-        #GameWorld.DebugLog("__MissionOnKillNPC isFeel=%s" % (isFeel), curPlayer.GetPlayerID())
-        #击杀特定NPC成就
-        PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_KillSpecificNPC, 1, [npcID])
         return
         
     def __GetIsLog(self):
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 c89ca11..4d3cf94 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -3265,6 +3265,9 @@
     # 每日任务奖励
     elif rewardType == ChConfig.Def_RewardType_DailyTask:
         PlayerActivity.GetDailyTaskAward(curPlayer, dataEx)
+    # 成就奖励
+    elif rewardType == ChConfig.Def_RewardType_Success:
+        PlayerSuccess.GetSuccessAward(curPlayer, dataEx)
     # 仙树免费减时
     elif rewardType == ChConfig.Def_RewardType_TreeFreeTime:
         PlayerTree.FreeReduceTreeLVTime(curPlayer)
@@ -3349,12 +3352,6 @@
     # 跨服妖魔boss伤害奖励
     elif rewardType == ChConfig.Def_RewardType_CrossYaomoBossHurt:
         PlayerCrossYaomoBoss.GetCrossYaomoBossHurtAward(curPlayer, dataEx, tick)
-    # 古宝特殊效果物品奖励
-    #elif rewardType == ChConfig.Def_RewardType_GubaoItemEff:
-    #    PlayerGubao.GetGubaoItemEffAward(curPlayer, dataEx, dataExStr)
-    # 成就积分奖励
-    elif rewardType == ChConfig.Def_RewardType_SuccessScore:
-        PlayerSuccess.GetSuccessScoreAward(curPlayer, dataEx)
     # 买一送多活动免费奖励
     elif rewardType == ChConfig.Def_RewardType_BuyOne:
         PlayerActBuyOne.GetBuyOneFreeAward(curPlayer, dataEx, dataExStr)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
index 3d75dfe..daf3e6f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -33,7 +33,6 @@
 import PlayerBillboard
 import GameServerRefresh
 import IPY_GameWorld
-import IPY_PlayerDefine
 import ChPyNetSendPack
 import NetPackCommon
 import DataRecordPack
@@ -51,7 +50,6 @@
 import PlayerCostRebate
 import PlayerActLunhuidian
 import GY_Query_CrossRealmReg
-import PlayerTongTianLing
 import FunctionNPCCommon
 import PlayerGoldInvest
 import CrossRealmPlayer
@@ -3029,8 +3027,6 @@
             return
         updValue = min(ChConfig.Def_UpperLimit_DWord, curCurrency + value)
         SetPlayerCurrency(curPlayer, priceType, updValue)
-        if priceType == ShareDefine.TYPE_Price_RealmPoint:
-            PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_GetRealmPoint, value)
     else:
         GameWorld.ErrLog("金钱类型错误, priceType=%s,value=%s,giveType=%s" % (priceType, value, giveType), curPlayer.GetPlayerID())
         DataRecordPack.DR_GiveMoneyError(curPlayer, priceType, value, giveType, addDataDict)
@@ -3510,9 +3506,8 @@
             #aftFreePoint = curPlayer.GetFreePoint()
             if aftLV > befLV:
                 curPlayer.SetLV(aftLV, False) # 这里不再通知GameServer
-                PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_LVUp, aftLV - befLV)
+                #PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_LVUp, aftLV - befLV)
                 PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_LV)
-                PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_HeroLV, aftLV)
                 
             #if aftFreePoint > befFreePoint:
             #    curPlayer.SetFreePoint(aftFreePoint)
@@ -4363,6 +4358,7 @@
         lvID = chapterID * 100 + levelNum
         PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_MainLevel, lvID)
         PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_MainLevel)
+        PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_MainLevel, lvID)
     return value
 def GetMainLevelPassInfo(curPlayer):
     ## 获取主线关卡过关进度信息
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossRealmPK.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossRealmPK.py
index 9dbea3d..5ade292 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossRealmPK.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossRealmPK.py
@@ -27,7 +27,6 @@
 import PlayerWeekParty
 import IPY_GameWorld
 import ItemControler
-import PlayerSuccess
 import ItemCommon
 import GameWorld
 import ChConfig
@@ -356,7 +355,6 @@
             PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_TodayWinCount, todayWinCount)
             GameWorld.Log("    增加今日已获胜次数: todayWinCount=%s" % todayWinCount, playerID)
         PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_CrossPK, 1)
-        PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_CrossPK, 1)
         PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_CrossPK, 1)
     else:
         GameWorld.Log("    不同天的PK结算不增加今日PK次数! ", playerID)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDogz.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDogz.py
index b4f163d..345bf91 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDogz.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerDogz.py
@@ -28,7 +28,6 @@
 import PassiveBuffEffMng
 import SkillCommon
 import SkillShell
-import PlayerSuccess
 import DataRecordPack
 import PlayerWeekParty
 import ItemControler
@@ -292,7 +291,6 @@
             if curItem.IsEmpty():
                 GameWorld.DebugLog("神兽有装备未穿戴,无法助战!dogzID=%s,packIndex=%s" % (dogzID, i), playerID)
                 return
-        PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_DogzBattle, 1, [dogzID])
         PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Dogz, dogzID, False)
         
     isFight = True if batteState else False
@@ -608,10 +606,6 @@
     # 技能属性,从Def_CalcAttrFunc_Dogz获取
     skillAttrList = CalcDogzBattleSkillAttr(curPlayer)
     PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_DogzBattleSkill, skillAttrList)
-    #成就
-    if isUpdateSucc:
-        PlayerSuccess.ResetSuccessByType(curPlayer, ShareDefine.SuccType_DogzEquipPlus)
-        PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_DogzEquipPlus, totalPlusLv)
     return
 
 def GetFightDogzTotalPlusLv(curPlayer):
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 27a98e3..da8cf30 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -34,7 +34,6 @@
 import PlayerGoldGift
 import PlayerActivity
 import FBCommon
-import PlayerSuccess
 import PlayerFreeGoods
 import ChItem
 import GameLogic_Tianzi
@@ -263,8 +262,6 @@
         
         PlayerCoin.OnDay(curPlayer)
         PlayerTree.PlayerOnDay(curPlayer)
-        #成就
-        PlayerSuccess.SuccOnDay(curPlayer)
         #投资
         PlayerGoldInvest.OnDay(curPlayer)
         #战令
@@ -395,8 +392,6 @@
         
         #计算这一周的家族的活跃度
         CalcFamilyActiveValue(curPlayer)
-        #成就Onweek
-        PlayerSuccess.OnWeek(curPlayer)
         
         # 每周提示玩家提示vip等级加入贵宾俱乐部
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_HasVIPClubNote, 0)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamilyZhenfa.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamilyZhenfa.py
index aa72943..fe77e73 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamilyZhenfa.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamilyZhenfa.py
@@ -17,12 +17,10 @@
 
 import GameWorld
 import ItemCommon
-import ShareDefine
 import PlayerControl
 import NetPackCommon
 import ChPyNetSendPack
 import IpyGameDataPY
-import PlayerSuccess
 import IPY_GameWorld
 import PyGameData
 import ChConfig
@@ -146,8 +144,6 @@
     ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "FamilyZhenfaLVUP")
     
     addTotalExp = itemExp * useItemCount
-    PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FamilyZhenfaExp, addTotalExp)
-    
     SendGameServer_FamilyZhenfa(curPlayer, familyID, playerID, "AddExp", [zhenfaType, addTotalExp])
     return
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGodWeapon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGodWeapon.py
index 521b989..14b6e90 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGodWeapon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGodWeapon.py
@@ -24,7 +24,6 @@
 import IPY_GameWorld
 import ChPyNetSendPack
 import NetPackCommon
-import PlayerSuccess
 import ShareDefine
 import SkillShell
 import DataRecordPack
@@ -79,7 +78,6 @@
     # 默认激活1级的类型
     for i in IpyGameDataPY.GetFuncEvalCfg('GodWeaponActive'):
         SetGodWeaponLV(curPlayer, i, 1)
-        PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_GodWeapon, 1, [i])
     Sync_GodWeaponLVInfo(curPlayer)
     return True
 
@@ -295,8 +293,6 @@
         SetGodWeaponLV(curPlayer, weaponType, attrLV)
         GameWorld.DebugLog("神兵升级结果: attrLV=%s,curExp=%s" % (attrLV, curExp))
         RefreshGodWeaponAttr(curPlayer)
-        #x神器达到X级成就
-        PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_GodWeapon, attrLV, [weaponType])
         if beforeAttrLV == 0:
             # 解封通知
             sysMark = IpyGameDataPY.GetFuncEvalCfg('GodWeaponSys', 1, {}).get(weaponType, 'GetGodWeapon')
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
index 968c2b0..213b448 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHorse.py
@@ -31,7 +31,6 @@
 import GameFuncComm
 import IpyGameDataPY
 import CrossPlayerData
-import PlayerSuccess
 import PlayerActLunhuidian
 import PlayerActTask
 import PlayerPet
@@ -635,7 +634,6 @@
         DataRecordPack.DR_NewHorseByClassUp(curPlayer, updClassLV, 0)
         # 记录开服活动马匹阶级
         #OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_Horse, updClassLV)
-        PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_HorseAllLV, updClassLV)
         
     Sync_HorseClassData(curPlayer)
     # 刷属性,更新排行榜
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py
index 24bb5cd..229e746 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPet.py
@@ -25,7 +25,6 @@
 import SkillShell
 import ItemControler
 import PlayerControl
-import PlayerSuccess
 import GameFuncComm
 import ShareDefine
 import SkillCommon
@@ -756,7 +755,6 @@
         # 开服活动数据
         OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_PetLV, GetTotalPetLV(curPlayer))
         
-    PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_PetClassLV, 1, [petNPCID, updClassLV + 1])
     extraInfoDict = {"petItemIndex":PetItemIndex, "petNPCID":petNPCID}
     extraInfoDict.update(eval(petDataItem.GetUserData()))
     DataRecordPack.DR_ClassUpSystem(curPlayer, "PetClassUp", updClassLV, extraInfoDict)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py
index 1d30c2c..569cd20 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPrestigeSys.py
@@ -25,7 +25,6 @@
 import ShareDefine
 import GameWorld
 import ChConfig
-import PlayerSuccess
 import PlayerBillboard
 import PlayerTongTianLing
 import PlayerTask
@@ -263,8 +262,6 @@
     RefreshOfficialAttr(curPlayer)
     GameFuncComm.DoFuncOpenLogic(curPlayer)
     SyncRealmInfo(curPlayer, taskIDList=syncTaskIDList)
-    #境界提升成就
-    PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_RealmlvUp, nextRealmLv)
     PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_RealmUp, 1)
     PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_RealmLV)
     #更新排行榜
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRune.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRune.py
index c650333..5b836c1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRune.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerRune.py
@@ -25,7 +25,6 @@
 import ChPyNetSendPack
 import NetPackCommon
 import IpyGameDataPY
-import PlayerSuccess
 import IPY_GameWorld
 import OpenServerCampaign
 import DataRecordPack
@@ -356,7 +355,6 @@
 def DoRuneSuccessLogic(curPlayer):
     #符印成就处理
     #清掉#镶嵌X枚X品质符印的成就信息
-    PlayerSuccess.ResetSuccessByType(curPlayer, ShareDefine.SuccType_InlayRune)
     totalLV = 0
     runeHoleCnt = IpyGameDataPY.GetFuncCfg("RuneUnlock", 4)
     for holeNum in xrange(1, runeHoleCnt + 1):
@@ -370,9 +368,7 @@
         itemColor = itemData.GetItemColor()
         runeItemPlusLV = ItemControler.GetRuneItemPlusLV(runeData) + 1 #客户端1开始
         totalLV += runeItemPlusLV
-        PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_InlayRune, 1, [itemColor])
         PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Rune, itemColor, False)
-    PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_RuneLvUp, totalLV)
     # 开服活动数据
     #OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_RuneLV, totalLV)
     return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuccess.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuccess.py
index 9791202..f38164d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuccess.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuccess.py
@@ -2,536 +2,190 @@
 # -*- coding: GBK -*-
 #-------------------------------------------------------------------------------
 #
-#-------------------------------------------------------------------------------
-#
 ##@package Player.PlayerSuccess
 #
 # @todo:成就系统
-# @author xdh
-# @date 2018-04-23
+# @author hxp
+# @date 2025-10-17
 # @version 1.0
-#
 #
 # 详细描述: 成就系统
 #
-#---------------------------------------------------------------------
-#"""Version = 2018-04-23 11:00"""
-#---------------------------------------------------------------------
+#-------------------------------------------------------------------------------
+#"""Version = 2025-10-17 21:00"""
+#-------------------------------------------------------------------------------
 
-import ShareDefine
 import ChConfig
 import GameWorld
-import ChPyNetSendPack
+import ShareDefine
 import NetPackCommon
-import ItemCommon
-import IPY_GameWorld
 import PlayerControl
+import ChPyNetSendPack
 import ItemControler
 import IpyGameDataPY
 import PyGameData
+import ObjPool
 
-import datetime
-import time
-import math
-import DataRecordPack
-
-
-## 获取成就字典信息值
-#  @param curPlayer 玩家实例
-#  @return
-def GetPDictValue(curPlayer, key, defaultValue=0):
-    return curPlayer.NomalDictGetProperty(key, defaultValue, ChConfig.Def_PDictType_Success)
-
-
-## 设置成就字典信息值
-#  @param curPlayer 玩家实例
-#  @return
-def SetPDictValue(curPlayer, key, value):
-    PlayerControl.NomalDictSetProperty(curPlayer, key, value, ChConfig.Def_PDictType_Success)
-    return
-
-def GetSuccIsFinish(curPlayer, succID):
-    #获取成就是否已完成
-    return GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_Success_FinishTime, succID)
-
-def SetSuccFinish(curPlayer, succID, finish=True):
-    #设置成就是否完成
-    return GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_Success_FinishTime, succID, finish)
-
+#成就奖励是否已领取
 def GetSuccHasGot(curPlayer, succID):
-    #获取成就奖励是否已领取
-    return GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_Success_AwardRecord, succID)
-
+    return GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_SuccessAward, succID)
 def SetSuccHasGot(curPlayer, succID, hasGot=True):
-    #设置成就奖励领取状态
-    if GetSuccHasGot(curPlayer, succID) == hasGot:
-        return
-    GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_Success_AwardRecord, succID, hasGot)
-    
-    if hasGot:
-        #已领取的可设置是否已完成为0
-        SetSuccFinish(curPlayer, succID, 0)
-        
-        Sync_SuccTypeIndexAwardRecord(curPlayer, [succID], True) #设置成未领取的在外层同步
-        
+    GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_SuccessAward, succID, hasGot)
     return 
-
-def GetSuccPassportAwardHasGot(curPlayer, succID):
-    #获取成就通行证奖励是否已领取
-    return GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_Success_PassportAward, succID)
-def SetSuccPassportAwardHasGot(curPlayer, succID, hasGot=True):
-    #设置成就通行证奖励领取状态
-    GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_Success_PassportAward, succID, hasGot)
-    if hasGot:
-        Sync_SuccTypeIndexAwardRecord(curPlayer, [succID])
-    return
     
-def SetSuccFinishValue(curPlayer, succType, condition, value):
-    #设置成就完成度
-    key = ChConfig.Def_PDict_Success_CntValue % (succType, condition)
-    SetPDictValue(curPlayer, key, value)
+#成就完成进度
+def GetSuccValue(curPlayer, succType, conds):
+    condition = "" if not conds else str(conds).replace(" ", "")[1:-1]
+    return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SuccessValue % (succType, condition))
+def SetSuccValue(curPlayer, succType, conds, value):
+    condition = "" if not conds else str(conds).replace(" ", "")[1:-1]
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SuccessValue % (succType, condition), value)
     return
 
-def GetSuccFinishValue(curPlayer, succType, condition):
-    #获取完成度
-    key = ChConfig.Def_PDict_Success_CntValue % (succType, condition)
-    return GetPDictValue(curPlayer, key)
-
-
-
-## 成就配表数据类
-class SuccessData():
-    
-    def __init__(self):
-        self.succID = 0  #成就ID
-        self.succType = 0 # 成就类型
-        self.needCnt = 0 # 所以计数数量
-        self.preSuccIDList = [] # 前置成就ID
-        self.condition = [] # 辅助条件(根据类型自定义配置)
-        self.awardItemDict = {} # 完成成就可领取的奖励物品{itemid:itemcnt}
-        self.awardItemDict2 = {} # 完成成就可领取的奖励物品,通行证奖励{itemid:itemcnt}
-        self.moneyDict = {} # 完成成就获得的金钱 {moneyType:money}
-        self.exp = 0 # 完成成就获得的经验
-        self.attrDict = {} # 完成成就获得的属性 {attrid:attrvalue}
-        self.hasAward = True #是否有奖励
-        self.redPacketID = 0 # 红包ID
-        return
-
-
-## 成就数据管理类
-class SuccessDataMng():
-
-    ## 构造函数
-    #  @param None
-    #  @return
-    def __init__(self):
-        self.succTypeConditionDict = {} #{succType:[condition,..]}
-        self.successDataDict = {} # {succType:{index:SuccessData(),...}, ...}
-        return
-
-    ## 加载成就数据
-    #  @param succType: 成就类型
-    #  @return
-    def __LoadSuccessData(self, succType):
-        if succType in self.successDataDict:
-            return
-        successDataList = IpyGameDataPY.GetIpyGameDataByCondition('Success', {'Type':succType}, True, False)
-          
-        if not successDataList:
-            return
-        
-        successDataObjDict = {}
-        conditionDict = {}
-        for successIpyData in successDataList:
-            succData = SuccessData()
-            succData.succID = successIpyData.GetID()
-            succData.succType = succType
-            succData.needCnt = successIpyData.GetNeedCnt()
-            succData.preSuccIDList = list(successIpyData.GetPreSuccess())
-            succData.condition = list(successIpyData.GetCondition())
-            succData.awardItemDict = successIpyData.GetAwardItem()
-            succData.awardItemDict2 = successIpyData.GetAwardItem2()
-            succData.moneyDict = successIpyData.GetMoney()
-            succData.exp = successIpyData.GetExp()
-            succData.attrDict = successIpyData.GetAwardAttr()
-            succData.redPacketID = successIpyData.GetRedPacketID()
-            succData.hasAward = bool(succData.awardItemDict or succData.moneyDict or succData.exp or succData.attrDict or succData.redPacketID \
-                                     or succData.awardItemDict2)
-            successDataObjDict[succData.succID]=succData
-            if tuple(succData.condition) not in conditionDict:
-                conditionDict[tuple(succData.condition)] = [succData.succID]
-            else:
-                conditionDict[tuple(succData.condition)].append(succData.succID)
-            
-        self.successDataDict[succType] = successDataObjDict
-        #self.succTypeConditionDict[succType] = conditionDict
-        return
-    
-    ## 根据成就类型获取该类型所有成就
-    #  @param succType: 成就类型
-    #  @return: {index:SuccessData(), ...}
-    def GetSuccDataByType(self, succType):
-        if succType not in self.successDataDict:
-            self.__LoadSuccessData(succType)
-        return self.successDataDict.get(succType, {}).values()
-    
-    ## 根据成就类型获取该类型所有条件
-    #  @param succType: 成就类型
-    #  @return: {index:SuccessData(), ...}
-#    def GetConditionDictByType(self, succType):
-#        if succType not in self.succTypeConditionDict:
-#            self.__LoadSuccessData(succType)
-#        return self.succTypeConditionDict.get(succType, {})
-
-    ## 根据成就类型索引获取某个成就数据
-    #  @param succType: 成就类型
-    #  @param index: 成就索引
-    #  @return: SuccessData() or None
-    def GetSuccessData(self, succID):
-        succIpyData = IpyGameDataPY.GetIpyGameDataNotLog('Success', succID)
-        if not succIpyData:
-            return
-        succType = succIpyData.GetType()
-        if succType not in self.successDataDict:
-            self.__LoadSuccessData(succType)
-        return self.successDataDict.get(succType, {}).get(succID)
-       
-    
-    
-
-g_succDataMng = SuccessDataMng()
-
-
-## 获取成就数据管理器
-#  @param None
-#  @return
-def GetSuccDataMng():
-    return g_succDataMng
-
-## 成就OnLogin
-#  @param curPlayer
-#  @return
 def SuccOnLogin(curPlayer):
-    # 同步成就信息
-    Sync_SuccessInfo(curPlayer)
-    # 同步成就领奖记录
-    Sync_SuccTypeIndexAwardRecord(curPlayer)
-  
-    
-    # 检查老玩家
-    __CheckOldPlayerSuccess(curPlayer)
-    
-    # 检查达成与否(有些可能改过上限,然后玩家可以完成,上线统一做一次检查)
-    for succType in ShareDefine.SuccessTypeList:
-        succInfoList = GetSuccDataMng().GetSuccDataByType(succType)
-        if not succInfoList:
-            continue
-        __DoCheckSuccessFinish(curPlayer, succType, succInfoList)
-        
-    if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Success_ScoreAward):
-        Sync_SuccessScoreAward(curPlayer)
+    SyncSuccessInfo(curPlayer)
+    SyncSuccessAwardRecord(curPlayer)
     return
 
-## 检查老玩家成就激活情况
-#  @param None
-#  @return
-def __CheckOldPlayerSuccess(curPlayer):
-    ''' 成就版本更新老玩家检查  每次启动服务后 玩家第一次上线检查成就完成情况
-    '''
-    initGameWorldTime = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_InitGameWorldTime)
-    # 上线需要检查老玩家成就完成情况类型
-    NeedCheckSuccTypeList = [
-                             ]
-    
-    curCheckVersion = GetPDictValue(curPlayer, ChConfig.Def_PDict_Success_CheckVersion)
-    if curCheckVersion == initGameWorldTime:
-        GameWorld.DebugLog('    本次开启服务器处理过成就检查,不再处理 ', curPlayer.GetID())
+def ResetSuccessByType(curPlayer, succType, ignoreFinish=True):
+    #重置某类型成就进度,一般用于先重置次数再重新计数,或者活动类
+    ipyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("Success", succType)
+    if not ipyDataList:
         return
-    GameWorld.DebugLog("更新老玩家上线检查成就curCheckVersion=%s" % (curCheckVersion))
-    ipyDataMgr = IpyGameDataPY.IPY_Data()
-    for succType in NeedCheckSuccTypeList:
-        pass
-       
-    DataRecordPack.DR_CheckOldPlayerSuccess(curPlayer)
-    SetPDictValue(curPlayer, ChConfig.Def_PDict_Success_CheckVersion, initGameWorldTime)
-    GameWorld.DebugLog("更新老玩家上线检查成就updCheckVersions=%s" % (initGameWorldTime), curPlayer.GetID())
+    for ipyData in ipyDataList:
+        succID = ipyData.GetSuccID()
+        if ignoreFinish and GetSuccHasGot(curPlayer, succID):
+            continue
+        conds = ipyData.GetCondition()
+        SetSuccValue(curPlayer, succType, conds, 0)
     return
 
-## 成就OnWeek
-#  @param curPlayer
-#  @return
-def OnWeek(curPlayer):
-    resetList = []
-    weekResetSuccTypeList = IpyGameDataPY.GetFuncEvalCfg('WeekResetSuccType')
-    for succType in weekResetSuccTypeList:
-        succInfoList = GetSuccDataMng().GetSuccDataByType(succType)
-        if not succInfoList:
-            continue
-        for succDataObj in succInfoList:
-            succID = succDataObj.succID
-            condition = succDataObj.condition
-            if not GetSuccFinishValue(curPlayer, succType, condition):
-                continue
-            SetSuccFinishValue(curPlayer, succType, condition, 0)
-            SetSuccFinish(curPlayer, succID, False)
-            SetSuccHasGot(curPlayer, succID, False)
-            resetList.append(succID)
-            GameWorld.DebugLog("    OnWeek 重置成就类型: succID=%s" % (succID))
-    if resetList:
-        Sync_SuccTypeIndexAwardRecord(curPlayer, resetList, True)
-        Sync_SuccessInfo(curPlayer, resetList, True)
-    return
+#def UpdateSuccessProgressByConditions(curPlayer, successType, conditionCountDict):
+#    ## 根据多种条件更新进度,如装备多品质的
+#    ipyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("Success", successType)
+#    if not ipyDataList:
+#        return
+#    updIDList = []
+#    updsuccDataList = []
+#    updConditionDict = {}
+#    
+#    for condition, newCount in conditionCountDict.items():
+#        addCondList = [] # 不同的成就ID条件可能相同,只是最大进度不同,故传入的条件计数针对相同成就条件只能累加一次
+#        for ipyData in ipyDataList:
+#            succID = ipyData.GetSuccID()
+#            conds = ipyData.GetCondition()
+#            needCnt = ipyData.GetNeedCnt()
+#            
+#            tupleCond = tuple(conds) # 作为字典key用
+#            
+#            if tupleCond not in updConditionDict:
+#                updConditionDict[tupleCond] = [conds, 0, 0] # [条件, 更新值, 最大进度值]
+#            updInfo = updConditionDict[tupleCond]
+#            if updInfo[2] < needCnt:
+#                updInfo[2] = needCnt
+#                
+#            if not __CheckCanAddSuccess(curPlayer, ipyData, list(condition)):
+#                continue
+#            
+#            if succID not in updIDList:
+#                updIDList.append(succID)
+#                updsuccDataList.append(ipyData)
+#                
+#            if tupleCond not in addCondList:
+#                addCondList.append(tupleCond)
+#                updConditionDict[tupleCond][1] = updConditionDict[tupleCond][1] + newCount # 更新进度值
+#                
+#    # 没有找到更新目标不处理
+#    #GameWorld.DebugLog("    updConditionDict=%s" % updConditionDict)
+#    #GameWorld.DebugLog("    updIDList=%s" % updIDList)
+#    if not updIDList:
+#        return
+#    
+#    # 先更新成就记录值后再判断完成与否
+#    for cond, updCnt, maxCnt in updConditionDict.values():
+#        if not updCnt:
+#            continue
+#        updCnt = min(maxCnt, updCnt)
+#        if GetSuccValue(curPlayer, successType, cond) == updCnt:
+#            continue
+#        SetSuccValue(curPlayer, successType, cond, updCnt)
+#    SyncSuccessInfo(curPlayer, syncTypeCondList)
+#    return
 
-def DoResetSuccessIDList(curPlayer, resetSuccIDList):
-    ## 重置成就相关数据
-    if not resetSuccIDList:
-        return
-    resetList = []
-    for succID in resetSuccIDList:
-        succData = GetSuccDataMng().GetSuccessData(succID)
-        if not succData:
-            continue
-        succType = succData.succType
-        condition = succData.condition
-        #if not GetSuccFinishValue(curPlayer, succType, condition):
-        #    continue
-        SetSuccFinishValue(curPlayer, succType, condition, 0)
-        SetSuccFinish(curPlayer, succID, False)
-        SetSuccHasGot(curPlayer, succID, False)
-        resetList.append(succID)
-        GameWorld.DebugLog("    重置成就类型: succType=%s,succID=%s" % (succType, succID))
-    if resetList:
-        Sync_SuccTypeIndexAwardRecord(curPlayer, resetList, True)
-        Sync_SuccessInfo(curPlayer, resetList, True)
-    return
-
-## 成就OnDay
-#  @param curPlayer
-#  @return
-def SuccOnDay(curPlayer):
-    resetList = []
-    # 重置连续类型断掉的数据
-    serverDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay)
-    GameWorld.DebugLog("连续类型成就过天...serverDay=%s" % serverDay)
-    for succType in ShareDefine.ContinueSuccessTypeList:
-        
-        succInfoList = GetSuccDataMng().GetSuccDataByType(succType)
-        
-        if not succInfoList:
-            continue
-       
-        for succDataObj in succInfoList:
-            succID = succDataObj.succID
-            condition = succDataObj.condition
-            #GameWorld.DebugLog("    succID=%s" % (succID))
-            
-            finishTime = GetSuccIsFinish(curPlayer, succID)
-            
-            # 已完成的不再检查
-            if finishTime > 0 or GetSuccHasGot(curPlayer, succID):
-                GameWorld.DebugLog("        已完成的不再检查")
-                continue
-            
-            if __DoCheckResetContinue(curPlayer, serverDay, succID):
-                SetSuccFinishValue(curPlayer, succType, condition, 0)
-                resetList.append(succID)
-                
-    if resetList:
-        Sync_SuccessInfo(curPlayer, resetList, True)
-    return
-
-## 检查成就连续天情况
-#  @param curPlayer
-#  @return True-连续已中断
-def __DoCheckResetContinue(curPlayer, serverDay, succID):
-    lastDayKey = ChConfig.Def_PDict_Success_LastDay % (succID)
-    lastDay = GetPDictValue(curPlayer, lastDayKey)
-    
-    # 记录时间从开服天数改成 time.time()
-    if lastDay <= 1000:
-        #GameWorld.DebugLog("        lastDay <= 0")
-        return
-    
-    tick = int(time.time())
-    serverDay = GameWorld.ChangeTimeNumToDatetime(tick, ChConfig.TYPE_Time_Format_Day)
-    lastDay = GameWorld.ChangeTimeNumToDatetime(lastDay, ChConfig.TYPE_Time_Format_Day)
-    # 昨天有更新的不处理,证明还是连续状态
-    if lastDay == serverDay - datetime.timedelta(1):
-        GameWorld.DebugLog("        昨天有更新的不处理,证明还是连续状态")
-        return
-    
-    
-    SetPDictValue(curPlayer, lastDayKey, 0)
-    GameWorld.DebugLog("    重置成就连续类型: succID=%s" % (succID))
-    return True
-
-def ResetSuccessByType(curPlayer, succType):
-    #重置某类型成就进度(已完成的不重置)
-    succInfoList = GetSuccDataMng().GetSuccDataByType(succType)
-    if not succInfoList:
-        return
-    #先重置次数再重新计数
-    for succDataObj in succInfoList:
-        succID = succDataObj.succID
-        condition = succDataObj.condition
-        #GameWorld.DebugLog("    succID=%s" % (succID))
-        finishTime = GetSuccIsFinish(curPlayer, succID)
-        # 已完成的不再检查
-        if finishTime > 0 or GetSuccHasGot(curPlayer, succID):
-            continue
-        SetSuccFinishValue(curPlayer, succType, condition, 0)
-    return
-
-def UpdateSuccessProgressByConditions(curPlayer, successType, conditionCountDict):
-    if successType not in ShareDefine.SuccessTypeList:
-        return
-    succInfoList = GetSuccDataMng().GetSuccDataByType(successType)
-    if not succInfoList:
-        return
-    updIDList = []
-    updsuccDataList = []
-    updConditionDict = {}
-    
-    for condition, newCount in conditionCountDict.items():
-        addCondList = [] # 不同的成就ID条件可能相同,只是最大进度不同,故传入的条件计数针对相同成就条件只能累加一次
-        for succDataObj in succInfoList:
-            cond = succDataObj.condition
-            
-            tupleCond = tuple(cond) # 作为字典key用
-            succID = succDataObj.succID
-            needCnt = succDataObj.needCnt
-            
-            if tupleCond not in updConditionDict:
-                updConditionDict[tupleCond] = [cond, 0, 0] # [条件, 更新值, 最大进度值]
-            updInfo = updConditionDict[tupleCond]
-            if updInfo[2] < needCnt:
-                updInfo[2] = needCnt
-                
-            if not __CheckCanAddSuccess(curPlayer, succDataObj, list(condition)):
-                continue
-            
-            if succID not in updIDList:
-                updIDList.append(succID)
-                updsuccDataList.append(succDataObj)
-                
-            if tupleCond not in addCondList:
-                addCondList.append(tupleCond)
-                updConditionDict[tupleCond][1] = updConditionDict[tupleCond][1] + newCount # 更新进度值
-                
-    # 没有找到更新目标不处理
-    #GameWorld.DebugLog("    updConditionDict=%s" % updConditionDict)
-    #GameWorld.DebugLog("    updIDList=%s" % updIDList)
-    if not updIDList:
-        return
-    
-    isUpd = False
-    # 先更新成就记录值后再判断完成与否
-    for cond, updCnt, maxCnt in updConditionDict.values():
-        if not updCnt:
-            continue
-        updCnt = min(maxCnt, updCnt)
-        if GetSuccFinishValue(curPlayer, successType, cond) == updCnt:
-            continue
-        isUpd = True
-        SetSuccFinishValue(curPlayer, successType, cond, updCnt)
-        #GameWorld.DebugLog("    successType=%s,cond=%s,updCnt=%s,maxCnt=%s"  % (successType, cond, updCnt, maxCnt))
-        
-    if not isUpd:
-        return
-    
-    # 同步更新信息
-    Sync_SuccessInfo(curPlayer, updIDList, False)
-    
-    # 更新值后检查成就完成情况
-    __DoCheckSuccessFinish(curPlayer, successType, updsuccDataList)
-    return
-
-
-## 更新成就完成进度逻辑(外部功能调用,只适用于不重置的成就类型)
-#  @param curPlayer
-#  @param successType: 成就类型
-#  @param newCnt: 新进度值
-#  @return
 def UptateSuccessProgress(curPlayer, successType, newCnt, condition=[]):
-    if successType not in ShareDefine.SuccessTypeList:
+    ipyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("Success", successType)
+    if not ipyDataList:
         return
-    #if successType in ShareDefine.FeastRedPackSuccessTypeList:
-    #    if not PlayerFeastRedPacket.GetFeastRedPacketState():
-    #        return
-    succInfoList = GetSuccDataMng().GetSuccDataByType(successType)
-    if not succInfoList:
-        GameWorld.DebugLog("    找不到成就数据successType=%s" % successType)
-        return
-    curCnt = -1
-    for succData in succInfoList:
-        if not __CheckCanAddSuccess(curPlayer, succData, condition):
+    
+    curCnt = None
+    for ipyData in ipyDataList:
+        if not __CheckCanAddSuccess(curPlayer, ipyData, condition):
             continue
-        curCnt = GetSuccFinishValue(curPlayer, successType, succData.condition)
+        curCnt = GetSuccValue(curPlayer, successType, ipyData.GetCondition())
         break
-  
-    if curCnt == -1:
+    
+    if curCnt == None or newCnt <= curCnt:
+        #GameWorld.DebugLog("不需要更新成就值: curCnt=%s" % (curCnt))
         return
-    if newCnt > curCnt: #这里需要立即更新!!
-        DoAddSuccessProgress(curPlayer, successType, newCnt - curCnt, condition, False)
+    #update的需要立即更新!!
+    DoAddSuccessProgress(curPlayer, successType, newCnt - curCnt, condition, False)
     return
 
-def __CheckCanAddSuccess(curPlayer, succDataObj, condition):
-    successType = succDataObj.succType
-    succID = succDataObj.succID
-    cond = succDataObj.condition
-    
-    #if successType in ShareDefine.FeastRedPackSuccessTypeList:
-    #    todayFeastSuccIDList = PlayerFeastRedPacket.GetTodayFeastSuccIDList()
-    #    if not todayFeastSuccIDList or succID not in todayFeastSuccIDList:
-    #        #GameWorld.DebugLog("    非今日节日红包成就,不增加进度! succID=%s,todayFeastSuccIDList=%s" % (succID, todayFeastSuccIDList))
-    #        return
-    isUnDownCheck = successType in ShareDefine.UnDownCheckSuccessTypeList
-    isContain = successType in ShareDefine.ContainSuccessTypeList
+def __CheckCanAddSuccess(curPlayer, ipyData, condition):
+    ## 检查可否添加进度
+    succID = ipyData.GetSuccID()
     # 已完成的不再检查
-    if GetSuccIsFinish(curPlayer, succID) or GetSuccHasGot(curPlayer, succID):
+    if GetSuccHasGot(curPlayer, succID):
         return
-    #前置成就判断
-    preSuccIDList = succDataObj.preSuccIDList
-    for preSuccID in preSuccIDList:
-        if not GetSuccIsFinish(curPlayer, preSuccID) and not GetSuccHasGot(curPlayer, preSuccID):
-            return
     
-    # 有辅助条件的, 需判断是否向下检查
-    if len(cond) > 0:
-        if isContain:
-            if condition[0] not in cond:
+    successType = ipyData.GetSuccType()
+    conds = ipyData.GetCondition()
+    if not conds:
+        # 无条件的默认可添加
+        return True
+    
+    if not condition:
+        return
+    
+    # 传进来的条件满足配置的条件列表中的一个就行的成就类型
+    if successType in ShareDefine.ContainSuccessTypeList:
+        if condition[0] not in conds:
+            return
+        
+    # 传进来的条件是配置条件的整数倍的成就类型
+    elif successType in ShareDefine.MultipleSuccessTypeList:
+        if not (condition[0] / conds[0] and condition[0] % conds[0] == 0):
+            #必须是条件的倍数
+            return
+        
+    else:
+        if len(conds) != len(condition):
+            return
+        # 不向下检查增加进度的, 仅配置值等于该值的可增加进度
+        if successType in ShareDefine.UnDownCheckSuccessTypeList:
+            if conds != condition:
                 return
-        elif successType in ShareDefine.MultipleSuccessTypeList:
-            if not (condition[0]/cond[0] and condition[0]%cond[0] == 0):
-                #必须是条件的倍数
-                return
+        # 可向下增加进度的, 仅配置值 <= 该值的可增加进度
         else:
-            if len(cond) != len(condition):
-                return
-            # 不向下检查增加进度的, 仅配置值等于该值的可增加进度
-            if isUnDownCheck and cond != condition:
-                return
-            # 可向下增加进度的, 仅配置值 <= 该值的可增加进度
-            if not isUnDownCheck:
-                isbreak = False
-                undowncheckIndexList = [] # 不向下检查的条件索引
-                if successType in ShareDefine.PartUnDownCheckSuccessTypeInfo:
-                    undowncheckIndexList = ShareDefine.PartUnDownCheckSuccessTypeInfo[successType]
-                for i, num in enumerate(cond):
-                    if i in undowncheckIndexList:
-                        if num != condition[i]:
-                            isbreak = True
-                            break
-                    if num > condition[i]:
+            isbreak = False
+            undowncheckIndexList = [] # 不向下检查的条件索引
+            if successType in ShareDefine.PartUnDownCheckSuccessTypeInfo:
+                undowncheckIndexList = ShareDefine.PartUnDownCheckSuccessTypeInfo[successType]
+            for i, num in enumerate(conds):
+                if i in undowncheckIndexList:
+                    if num != condition[i]:
                         isbreak = True
                         break
-                if isbreak:
-                    return
+                if num > condition[i]:
+                    isbreak = True
+                    break
+            if isbreak:
+                return
+            
     return True
 
-
-# 将攻击类的成就一次执行,减少运行量
 def FinishDelayAddSuccessProgress(curPlayer, tick, isFinish=True):
+    # 将攻击类的成就一次执行,减少运行量
 
     if not isFinish:
         # 二次延迟处理
@@ -547,401 +201,131 @@
     
     successDict = PyGameData.g_delaySuccessDict.pop(playerID)
     for sucessInfo, cnt in successDict.items():
-
         DoAddSuccessProgress(curPlayer, sucessInfo[0], cnt, list(sucessInfo[1]), False)
-
+        
     return
 
-
-## 增加成就完成进度逻辑(外部功能调用)
-#  @param curPlayer
-#  @param successType: 成就类型
-#  @param addCnt: 增加进度值
-#  @param condition: 扩展条件
-#  @return
 def DoAddSuccessProgress(curPlayer, successType, addCnt, condition=[], delayCalc=True):
-    #GameWorld.DebugLog("DoAddSuccessProgress type=%s,addCnt=%s,condition=%s" 
-    #                   % (successType, addCnt, condition), curPlayer.GetPlayerID())
     if GameWorld.IsCrossServer():
         return
     
-    #if successType in ShareDefine.FeastRedPackSuccessTypeList:
-    #    if not PlayerFeastRedPacket.GetFeastRedPacketState():
-    #        #GameWorld.DebugLog("非节日红包活动时间,不增加成就!successType=%s" % successType)
-    #        return
-        
     playerID = curPlayer.GetID()
-    if delayCalc and successType not in ShareDefine.NeedResetSuccessTypeList:
+    if delayCalc:
         if playerID not in PyGameData.g_delaySuccessDict:
             PyGameData.g_delaySuccessDict[playerID] = {}
-            
-        # 最终处理减少计算量
+        # 最终处理减少计算量,短时间多次累加汇总一次计算
         successTuple = (successType, tuple(condition))
         if successTuple not in PyGameData.g_delaySuccessDict[playerID]:
             PyGameData.g_delaySuccessDict[playerID][successTuple] = addCnt
         else:
             PyGameData.g_delaySuccessDict[playerID][successTuple] = PyGameData.g_delaySuccessDict[playerID][successTuple] + addCnt
-        
         return
-
-
+    
     if condition and type(condition) != type([]):
-        GameWorld.ErrLog('DoAddSuccessProgress type=%s, condition=%s 错误!'%(type, condition))
+        GameWorld.ErrLog('DoAddSuccessProgress type=%s, condition=%s 错误!' % (type, condition))
         return
     if successType not in ShareDefine.SuccessTypeList:
         return
     
-    succInfoList = GetSuccDataMng().GetSuccDataByType(successType)
-    if not succInfoList:
-        GameWorld.DebugLog("    找不到成就数据successType=%s" % successType)
+    ipyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("Success", successType)
+    if not ipyDataList:
+        GameWorld.DebugLog("找不到成就数据successType=%s" % successType)
         return
     
     maxCnt = 0 # 本次可以更新到的最大值
     updConditionList = [] # 需更新进度值的key编号列表
-    updIDList = []
-    updsuccDataList = []
-    tick = int(time.time())
-    for succDataObj in succInfoList:
-        succID = succDataObj.succID
-        needCnt = succDataObj.needCnt
+    for ipyData in ipyDataList:
         
-        if not __CheckCanAddSuccess(curPlayer, succDataObj, condition):
+        if not __CheckCanAddSuccess(curPlayer, ipyData, condition):
             continue
-        updIDList.append(succID)
-        updsuccDataList.append(succDataObj)
-        curCondition = succDataObj.condition
-        if curCondition not in updConditionList:
-            updConditionList.append(curCondition)
+        
+        conds = ipyData.GetCondition()
+        if conds not in updConditionList:
+            updConditionList.append(conds)
             
+        needCnt = ipyData.GetNeedCnt()
         if maxCnt < needCnt:
             maxCnt = needCnt
             
-        # 连续类型的, 更新连续时的开服天数
-        if successType in ShareDefine.ContinueSuccessTypeList:
-            lastDayKey = ChConfig.Def_PDict_Success_LastDay % (succID)
-            SetPDictValue(curPlayer, lastDayKey, tick)
-            
-        
-                
-    #GameWorld.DebugLog("    updConditionList=%s,maxCnt=%s" % (str(updConditionList), maxCnt))
-    
     # 没有找到更新目标不处理
     if not updConditionList or maxCnt <= 0:
         return
     
-    # 先更新成就记录值后再判断完成与否
-    for condition in updConditionList:
-        curCnt = GetSuccFinishValue(curPlayer, successType, condition)
+    syncTypeCondList = []
+    for conds in updConditionList:
+        curCnt = GetSuccValue(curPlayer, successType, conds)
         updCnt = min(maxCnt, curCnt + addCnt)
-        SetSuccFinishValue(curPlayer, successType, condition, updCnt)
-#        GameWorld.DebugLog("    successType=%s,condition=%s,curCnt=%s,addCnt=%s,updCnt=%s" 
-#                           % (successType,condition, curCnt, addCnt, updCnt))
-        
-    
-    # 同步更新信息
-    Sync_SuccessInfo(curPlayer, updIDList, False)
-    
-    # 更新值后检查成就完成情况
-    __DoCheckSuccessFinish(curPlayer, successType, updsuccDataList)
+        SetSuccValue(curPlayer, successType, conds, updCnt)
+        syncTypeCondList.append([successType, conds])
+    SyncSuccessInfo(curPlayer, syncTypeCondList)
     return
 
-
-## 检查成就完成情况
-#  @param curPlayer
-#  @param successType: 成就类型
-#  @param succInfoDict: 该类型所有成就信息字典
-#  @param isPub: 进度值是否公共
-#  @param updNumList: 有更新进度的编号列表
-#  @return
-def __DoCheckSuccessFinish(curPlayer, successType, succInfoList):
+def GetSuccessAward(curPlayer, succID):
+    ipyData = IpyGameDataPY.GetIpyGameDataByCondition("Success", {"SuccID":succID})
+    if not ipyData:
+        return
     
-    isNeedSys = successType in [ShareDefine.SuccType_ElderBattlefieldKill, ShareDefine.SuccType_ElderBattlefieldConKill]
-    curTime = GameWorld.ChangeTimeStrToNum(GameWorld.GetCurrentDataTimeStr())
-    playerName = curPlayer.GetName()
-
-    for succDataObj in succInfoList:
-        succID = succDataObj.succID
-        needCnt = succDataObj.needCnt
- 
-        finishTime = GetSuccIsFinish(curPlayer, succID)
-        
-        # 已完成的不再检查
-        if finishTime > 0 or GetSuccHasGot(curPlayer, succID):
-            continue
-        
-        curCnt = GetSuccFinishValue(curPlayer, successType, succDataObj.condition)
-        
-        # 完成成就
-        if curCnt >= needCnt:
-            # 设置完成时间
-            SetSuccFinish(curPlayer, succID)
-            # 没有奖励的直接设置已领取
-            if not succDataObj.hasAward:
-                SetSuccHasGot(curPlayer, succID)
-                
-            # 通知客户端完成成就
-            Notify_FinishSuccess(curPlayer, succID, curTime)
-            
-            if isNeedSys:
-                PlayerControl.WorldNotify(0, 'AncientBattlefield_1', [playerName, succID])
-                
-            GameWorld.DebugLog("    完成成就succID=%s, type=%s,time=%s" 
-                               % (succID, successType, curTime))
-            
-            
+    if GetSuccHasGot(curPlayer, succID):
+        GameWorld.DebugLog("该成就奖励已经领取过! succID=%s" % succID)
+        return
     
+    succType = ipyData.GetSuccType()
+    conds = ipyData.GetCondition()
+    needCnt = ipyData.GetNeedCnt()
+    curValue = GetSuccValue(curPlayer, succType, conds)
+    if curValue < needCnt:
+        GameWorld.DebugLog("该成就未完成! succID=%s,curValue=%s < %s" % (succID, curValue, needCnt))
+        return
+    
+    SetSuccHasGot(curPlayer, succID)
+    SyncSuccessAwardRecord(curPlayer, [succID], True)
+    
+    awardItemList = ipyData.GetAwardItemList()
+    if awardItemList:
+        ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["SuccessAward", False, {}])
     return
 
-
-## 计算成就属性
-#  @param curPlayer 玩家
-#  @param allAttrList 属性列表
-#  @return None
-def CalcSuccessAttr(curPlayer):
-    allAttrList = [{} for _ in range(4)]
-    attrDict = {}
-    ipyDataMgr = IpyGameDataPY.IPY_Data()
-    for i in xrange(ipyDataMgr.GetSuccessCount()):
-        ipyData = ipyDataMgr.GetSuccessByIndex(i)
-        succID = ipyData.GetID()
-        attrAwardDict = ipyData.GetAwardAttr()
-        if not attrAwardDict:
-            continue
-        if not GetSuccHasGot(curPlayer, succID):
-            continue
-        for attrID, attrValue in attrAwardDict.items():
-            attrDict[attrID] = attrDict.get(attrID, 0) + attrValue
-            
-    #GameWorld.DebugLog("    成就增加属性 attrDict=%s" % (attrDict))        
-    for attrID, attrValue in attrDict.items():
-        PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)
-        
-    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Success, allAttrList)
-    return
-
-## 刷新成就属性
-def RefreshSuccessAttr(curPlayer):
-    CalcSuccessAttr(curPlayer)
-    # 不立即刷新
-    PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
-    return
-
-## 同步成就信息
-#  @param curPlayer: 
-#  @param syncDict: 指定同步字典
-#  @param isSendZero: 是否同步空数据(如连续类型进度值被清空时 or GM命令测试), 数据比较多,空数据默认就不同步了
-#  @return
-def Sync_SuccessInfo(curPlayer, succIdList=[], isSendZero=False):
-    succInfoListPack = ChPyNetSendPack.tagMCSuccessInfoList()
-    succInfoListPack.Clear()
-    succInfoListPack.SuccessInfoList = []
-    if succIdList:
-        syncIdList = succIdList
-    else:
-        syncIdList = []
+def SyncSuccessInfo(curPlayer, syncTypeCondList=None, isSendZero=False):
+    if not syncTypeCondList:
+        syncTypeCondList = []
         ipyDataMgr = IpyGameDataPY.IPY_Data()
-        for i in xrange(ipyDataMgr.GetSuccessCount()):
-            ipyData = ipyDataMgr.GetSuccessByIndex(i)
-            succID = ipyData.GetID()
-            syncIdList.append(succID)
+        for index in range(ipyDataMgr.GetSuccessCount()):
+            ipyData = ipyDataMgr.GetSuccessByIndex(index)
+            # 已领取的不发 
+            if GetSuccHasGot(curPlayer, ipyData.GetSuccID()):
+                continue
+            succType = ipyData.GetSuccType()
+            conds = ipyData.GetCondition()
+            tcList = [succType, conds]
+            if tcList in syncTypeCondList:
+                continue
+            syncTypeCondList.append(tcList)
             
-    syncTypeDict = {}
-    for succID in syncIdList:
-        succData = GetSuccDataMng().GetSuccessData(succID)
-        if not succData:
-            continue
-        succType = succData.succType
-        condition = succData.condition
-
-        CntValue = GetSuccFinishValue(curPlayer, succType, condition)
-        isfinish = GetSuccIsFinish(curPlayer, succID)
+    successInfoList = []
+    objPoolMgr = ObjPool.GetPoolMgr()
+    for succType, conds in syncTypeCondList:
+        curValue = GetSuccValue(curPlayer, succType, conds)
         # 不发送为0的数据
-        if not isSendZero and CntValue <= 0 and not isfinish:
+        if not isSendZero and curValue <= 0:
             continue
-        # 已领取的不发 
-        if GetSuccHasGot(curPlayer, succID):
-            continue
-            
-        if succType not in syncTypeDict:
-            syncTypeDict[succType] = [[condition, CntValue]]
-        elif [condition, CntValue] not in syncTypeDict[succType]:
-            syncTypeDict[succType].append([condition, CntValue])
+        succInfo = objPoolMgr.acquire(ChPyNetSendPack.tagSCSuccessInfo)
+        succInfo.SuccType = succType
+        succInfo.Conds = conds
+        succInfo.CLen = len(succInfo.Conds)
+        succInfo.CurValue = curValue
+        successInfoList.append(succInfo)
         
-    if not syncTypeDict:
+    if not successInfoList:
         return
     
-    for sType, conditionList in syncTypeDict.items():
-        for condition, cntValue in conditionList:
-            succInfo = ChPyNetSendPack.tagMCSuccessInfo()
-            succInfo.Clear()
-            succInfo.SuccType = sType
-            succInfo.Condition = str(condition) if condition else '[0]'
-            succInfo.Len = len(succInfo.Condition)
-            succInfo.CntValue = cntValue
-            succInfoListPack.SuccessInfoList.append(succInfo)
-        
-    succInfoListPack.count = len(succInfoListPack.SuccessInfoList)
-    NetPackCommon.SendFakePack(curPlayer, succInfoListPack)
+    clientPack = objPoolMgr.acquire(ChPyNetSendPack.tagSCSuccessInfoList)
+    clientPack.SuccessInfoList = successInfoList
+    clientPack.Count = len(clientPack.SuccessInfoList)
+    NetPackCommon.SendFakePack(curPlayer, clientPack)
     return
 
-
-## 通知完成成就
-#  @param None
-#  @return
-def Notify_FinishSuccess(curPlayer, succID, finishTime):
-    succFinishPack = ChPyNetSendPack.tagMCSuccessFinish()
-    succFinishPack.Clear()
-    succFinishPack.SuccID = succID
-    #succFinishPack.FinishTime = finishTime    
-    NetPackCommon.SendFakePack(curPlayer, succFinishPack)
-    return
-
-
-def GetCanGetAwardSuccByType(curPlayer, successTypeList):
-    ##根据类型获取可领取的成就
-    succList = []
-    for successType in successTypeList:
-        succInfoList = GetSuccDataMng().GetSuccDataByType(successType)
-        for succDataObj in succInfoList:
-            succID = succDataObj.succID
-            if GetSuccIsFinish(curPlayer, succID) and not GetSuccHasGot(curPlayer, succID):
-                succList.append(succID)
-    return succList
-
-def GiveSuccAward(curPlayer, succIDList, isGiveItem=True):
-    #给成就奖励
-    awardDict = {}
-    for succID in succIDList:
-        awardItemDict = __DoGetSuccTypeIndexAward(curPlayer, succID, isGiveItem)
-        if not awardItemDict:
-            continue
-        for itemID,itemCnt in awardItemDict.items():
-            awardDict[itemID] = awardDict.get(itemID, 0)+itemCnt
-    return awardDict
-
-def GetSuccessPassportState(curPlayer):
-    ## 成就通行证状态
-    return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGGoodsBuyCount % ChConfig.Def_CTGID_SuccessPassport) > 0
-
-#// A5 42 领取成就奖励 #tagMCGetSuccessAward
-#
-#struct    tagMCGetSuccessAward
-#{
-#    tagHead        Head;
-#    DWORD        SuccID;    //成就ID
-#    BYTE        IsPassport;    //是否通行证奖励
-#};
-def OnGetSuccessAward(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    succID = clientData.SuccID
-    isPassport = clientData.IsPassport
-    __DoGetSuccTypeIndexAward(curPlayer, succID, isPassport=isPassport)
-    return
-
-## 领取某个成就奖励
-#  @param None
-#  @return
-def __DoGetSuccTypeIndexAward(curPlayer, succID, isGiveItem=True, isPassport=False):
-    GameWorld.DebugLog("领取成就奖励succID=%s,isPassport=%s" % (succID, isPassport))
-   
-    succData = GetSuccDataMng().GetSuccessData(succID)
-    if not succData:
-        GameWorld.DebugLog("    成就数据不存在!succID=%s" % (succID))
-        return
-        
-    if not succData.hasAward:
-        GameWorld.DebugLog("    该成就没有配置奖励!")
-        return
-    
-    finishTime = GetSuccIsFinish(curPlayer, succID)
-    hasGot = GetSuccHasGot(curPlayer, succID) # 因为普通奖励领取后会重置是否已完成,所以如果已经领取普通奖励也代表已完成
-    if finishTime <= 0 and not hasGot:
-        GameWorld.DebugLog("    该成就未完成!")
-        return
-    
-    if isPassport:
-        if GetSuccPassportAwardHasGot(curPlayer, succID):
-            GameWorld.DebugLog("    该成就通行证奖励已经领取过!")
-            return
-        
-        if not GetSuccessPassportState(curPlayer):
-            GameWorld.DebugLog("    未开通成就通行证,无法领取通行证奖励!")
-            return
-        itemDict = succData.awardItemDict2
-        if not itemDict:
-            GameWorld.DebugLog("    该成就没用通行证奖励!")
-            return
-    else:
-        if hasGot:
-            GameWorld.DebugLog("    该成就奖励已经领取过!")
-            return
-        itemDict = succData.awardItemDict
-        
-#    if awardItemDict and '[' in str(awardItemDict):
-#        #修行成就奖励根据境界等级变
-#        curRealmLV = curPlayer.GetOfficialRank()
-#        sortLVList=sorted(awardItemDict.keys())
-#        findLV = sortLVList[0]
-#        for realmlv in sortLVList:
-#            if curRealmLV <= int(realmlv):
-#                findLV = realmlv
-#                break
-#        itemDict = dict(awardItemDict[findLV])
-#    else:
-#        itemDict = awardItemDict
-        
-    # 检查背包
-    if isGiveItem:
-        if not ItemCommon.CheckPackEnough(curPlayer, itemDict):
-            return
-#        packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem)
-#        needSpace = len(itemDict)
-#        if needSpace > packSpace:
-#            PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")
-#            return
-
-    # 更新领奖记录
-    if isPassport:
-        SetSuccPassportAwardHasGot(curPlayer, succID)
-    else:
-        SetSuccHasGot(curPlayer, succID)
-    
-    # 给物品
-    giveItemList = []
-    if isGiveItem:
-        for itemID, itemCnt in itemDict.items():
-            isPutIn = ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem, IPY_GameWorld.rptAnyWhere])
-            if isPutIn:
-                giveItemList.append([itemID, itemCnt])
-        
-    if isPassport:
-        # 通行证奖励只给物品
-        ItemControler.NotifyGiveAwardInfo(curPlayer, giveItemList, "SuccessAward")
-        return itemDict
-    
-    #给钱
-    for moneyType, value in succData.moneyDict.items():
-        PlayerControl.GiveMoney(curPlayer, int(moneyType), value)
-        
-    #给经验
-    if succData.exp:
-        PlayerControl.PlayerControl(curPlayer).AddExp(succData.exp)
-    #属性
-    if succData.attrDict:
-        RefreshSuccessAttr(curPlayer)
-    #发红包
-    #if succData.redPacketID:
-    #    PlayerFamilyRedPacket.CreatRedPacketByID(curPlayer, succData.redPacketID, PlayerFamilyRedPacket.State_NoGot, succID)
-    GameWorld.DebugLog("    OK! awardItemDict=%s moneyDict=%s" % (itemDict, succData.moneyDict))
-    ItemControler.NotifyGiveAwardInfo(curPlayer, giveItemList, "SuccessAward", exp=succData.exp, moneyInfo=succData.moneyDict)
-    return itemDict
-
-
-
-## 通知成就对应奖励领奖记录
-#  @param None
-#  @return
-def Sync_SuccTypeIndexAwardRecord(curPlayer, succIDList=[], isSyncZero=False):
+def SyncSuccessAwardRecord(curPlayer, succIDList=[], isSyncZero=False):
+    ## 通知成就对应奖励领奖记录
     if succIDList:
         recordIndexList = []
         for succID in succIDList:
@@ -953,60 +337,25 @@
         succCnt = ipyDataMgr.GetSuccessCount()
         if not succCnt:
             return
-        maxSuccid = ipyDataMgr.GetSuccessByIndex(succCnt-1).GetID()
-        recordIndexList = xrange(maxSuccid / 31+1)
-            
-    succFARPack = ChPyNetSendPack.tagMCSuccessFinishAwardRecordList()
-    succFARPack.Clear()
-    succFARPack.RecordList = []
+        maxSuccID = ipyDataMgr.GetSuccessByIndex(succCnt - 1).GetSuccID()
+        recordIndexList = xrange(maxSuccID / 31 + 1)
+        
+    objPoolMgr = ObjPool.GetPoolMgr()
+    recordList = []
     for i in recordIndexList:
-        awardRecord=curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Success_AwardRecord%i)
-        passportAwardRecord=curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Success_PassportAward%i)
-        if not isSyncZero and not awardRecord and not passportAwardRecord:
+        awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SuccessAward % i)
+        if not isSyncZero and not awardRecord:
             continue
-        recordInfo = ChPyNetSendPack.tagMCSuccessFinishAwardRecord()
+        recordInfo = objPoolMgr.acquire(ChPyNetSendPack.tagSCSuccessAwardRecord)
         recordInfo.RecordIndex = i
         recordInfo.Record = awardRecord
-        recordInfo.PassportRecord = passportAwardRecord
-        succFARPack.RecordList.append(recordInfo)
+        recordList.append(recordInfo)
         
-    succFARPack.RecordCnt = len(succFARPack.RecordList)
-    NetPackCommon.SendFakePack(curPlayer, succFARPack)
-    return
-
-
-def AddEnterFBSuccess(curPlayer, mapID, addCount):
-    #进入副本成就相关
-    return
-
-def GetSuccessScoreAward(curPlayer, awardIndex):
-    playerID = curPlayer.GetPlayerID()
-    awardDict = IpyGameDataPY.GetFuncEvalCfg("SucceeScore", 1, {})
-    if str(awardIndex) not in awardDict:
+    if not recordList:
         return
-    awardInfo = awardDict[str(awardIndex)]
-    if len(awardInfo) != 2:
-        return
-    needScore, awardItemList = awardInfo
-    if not PlayerControl.HaveMoney(curPlayer, ShareDefine.TYPE_Price_SuccessSocre, needScore):
-        GameWorld.Log("成就积分不足,无法领奖! awardIndex=%s,needScore=%s" % (awardIndex, needScore), playerID)
-        return
-    awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Success_ScoreAward)
-    if awardState & pow(2, awardIndex):
-        GameWorld.DebugLog("已领取过该成就积分奖励! awardIndex=%s" % awardIndex, playerID)
-        return
-    updAwardState = awardState | pow(2, awardIndex)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Success_ScoreAward, updAwardState)
-    GameWorld.DebugLog("领取成就积分奖励! awardIndex=%s,awardState=%s,updAwardState=%s" % (awardIndex, awardState, updAwardState), playerID)
-    Sync_SuccessScoreAward(curPlayer)
-    ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["SuccessScore", False, {}])
-    return
-
-def Sync_SuccessScoreAward(curPlayer):
-    clientPack = ChPyNetSendPack.tagMCSuccessScoreInfo()
-    clientPack.Clear()
-    clientPack.ScoreAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Success_ScoreAward)
+    
+    clientPack = objPoolMgr.acquire(ChPyNetSendPack.tagSCSuccessAwardRecordList)
+    clientPack.RecordList = recordList
+    clientPack.RecordCnt = len(clientPack.RecordList)
     NetPackCommon.SendFakePack(curPlayer, clientPack)
     return
-    
-    
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWing.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWing.py
index 29e0823..14d0e48 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWing.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWing.py
@@ -22,8 +22,6 @@
 import ShareDefine
 import ItemCommon
 import GameFuncComm
-import PlayerSuccess
-import ItemControler
 import ChEquip
 
 import random
@@ -86,7 +84,6 @@
     WingProgressUP(curWing, totalPoint, materialItemDict, curPlayer)
     ChEquip.RefreshPlayerLingQiEquipAttr(curPlayer)
     PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
-    PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_WingRefine, 1)
     return
 
 def __WingCanJingLian(curWing):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 19dedc4..34881db 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -690,7 +690,7 @@
 CDBPlayerRefresh_ExAttr20, # ExAttr20 244
 CDBPlayerRefresh_JiYuan, # 机缘币  245
 CDBPlayerRefresh_BTGMYuE, # BTGM余额  246
-CDBPlayerRefresh_SuccessScore, # 成就积分  247
+CDBPlayerRefresh_247, # 成就积分  247
 CDBPlayerRefresh_FamilyFlagWarPoint, # 成就积分  248
 CDBPlayerRefresh_ComboRateDef, # 抗连击概率 249
 CDBPlayerRefresh_AtkBackRate, # 反击概率 250
@@ -813,7 +813,6 @@
                            TYPE_Price_BTGMPoint:CDBPlayerRefresh_BTGMPoint,
                            TYPE_Price_GuShenMoney:CDBPlayerRefresh_GuShenMoney,
                            TYPE_Price_GongdePoint:CDBPlayerRefresh_GongdePoint,
-                           TYPE_Price_SuccessSocre:CDBPlayerRefresh_SuccessScore,
                            TYPE_Price_Xiantao:CDBPlayerRefresh_Xiantao,
                            TYPE_Price_Lingyu:CDBPlayerRefresh_Lingyu,
                            TYPE_Price_FamilyFlagWarPoint:CDBPlayerRefresh_FamilyFlagWarPoint,
@@ -1457,232 +1456,22 @@
 
 # 成就类型定义
 SuccessTypeList = (
-SuccType_HeroLV, # 等级达到XX级成就1
-SuccType_DecomposeEquip, # 分解X件装备(装备碎片也算2
-SuccType_MainTaskNode, # 主线任务节点3
-SuccType_MunekadoTrialEx, #通关X次宗门试炼4
-SuccType_TaskCRun, # 完成x次日常环任务成就5
-SuccType_TaskFRun, # 完成x次10环战盟环任务成就6
-SuccType_KirinHomeEx, #通关麒麟之府X次成就7
-SuccType_GodWeapon, # x神器达到X级成就8
-SuccType_XXX9, # 废弃9
-SuccType_HorseAllLV, # 坐骑等级达到X级 10
-SuccType_XXX11, # 废弃11
-SuccType_KillBossHomeBoss, # BOSS之家BOSS击杀成就12
-SuccType_XXX13, # 废弃13
-SuccType_XXX14, # 废弃14
-SuccType_XXX15, # 废弃15
-SuccType_XXX16, # 废弃16
-SuccType_XXX17, # 废弃17
-SuccType_XXX18, # 废弃18
-SuccType_AddFriend, # 添加XX个好友成就19
-SuccType_TalkWorld, # 世界频道发言20
-SuccType_XXX21 , # 废弃21
-SuccType_XXX22 , # 废弃22
-SuccType_XXX23 , # 废弃23
-SuccType_XXX24 , # 废弃24
-SuccType_XXX25, # 废弃25
-SuccType_EquipPlus, # x件x阶x强化等级 26
-SuccType_XXX27, # 废弃27
-SuccType_KillWorldBoss, # 击杀世界bossx次成就(有伤害就算)28
-SuccType_XXX29, # 废弃29
-SuccType_PassWagicWeapon, # 通关法宝副本30
-SuccType_XXX31, # 废弃31
-SuccType_XXX32, # 废弃32
-SuccType_GetMagicWeapon, # 获得x法宝成就33
-SuccType_XXX34, # 废弃34
-SuccType_Pray, # 祈祷x次35
-SuccType_KillSpecificNPC, # 击杀特定NPC36
-SuccType_XXX37, # 废弃37
-SuccType_EquipPlace, # x件x阶x部位 38
-SuccType_EquipColorItem, # x件x阶x品质 39
-SuccType_XXX40, #废弃40
-SuccType_XXX41, #废弃41
-SuccType_PassRuneTower, #通关符印塔成就42
-SuccType_XXX43, #废弃43
-SuccType_InlayRune, #镶嵌X枚X品质符印44
-SuccType_RuneLvUp, #累计符印总等级XX45
-SuccType_BZZD, #通关仙界秘境成就46
-SuccType_XXX47, #废弃47
-SuccType_SealDemon, #封魔坛击杀BOSS几只48
-SuccType_KirinHome, #通关麒麟之府X层X次成就49
-SuccType_RealmlvUp, #境界提升成就50
-SuccType_RefineItem, #完成1次炼丹成就51
-SuccType_XXX52, #废弃52
-SuccType_XXX53, #废弃53
-SuccType_MunekadoTrial, #X人及以上组队X评级及以上通关X层宗门试炼54
-SuccType_ElderBattlefieldKill, #上古战场击杀成就55
-SuccType_ElderBattlefieldConKill, #上古战场15连杀成就56
-SuccType_XXX57, #废弃57
-SuccType_PetClassLV, #X灵宠达到X阶58
-SuccType_XXX59, #废弃59
-SuccType_InlayStone1, #镶嵌X枚X级以上生命翡翠60
-SuccType_InlayStone2, #镶嵌X枚X级以上毁灭炎晶61
-SuccType_XJMJGetExp, #仙界秘境单场获得X亿经验62
-SuccType_QueenRelics, #S级通关娲皇遗迹X层63
-SuccType_XXX64, #废弃64
-SuccType_XMZZConWin, #仙魔之争X连胜X次65
-SuccType_XXX66, #废弃66
-SuccType_ChaosDemon, #混乱妖域X人以上队伍X评级通关67
-SuccType_XXX68, #废弃68
-SuccType_CompoundItemEx, #物品X的合成成功X次69
-SuccType_EquipWash, #x件x阶x洗练等级 70
-SuccType_XXX71, #废弃71
-SuccType_XXX72, #废弃72
-SuccType_XXX73, #废弃73
-SuccType_XXX74, #废弃74
-SuccType_XXX75, #废弃75
-SuccType_XXX76, #废弃76
-SuccType_XXX77, #废弃77
-SuccType_DujieFBHelp, #渡劫护法成功X次 78
-SuccType_DujieFBHelpPass, #渡劫助战成功X次 79
-SuccType_XXX80, #废弃 80
-SuccType_81, #x副本累计鼓舞X次 81
-SuccType_EquipStar, #x件x阶x星 82
-SuccType_XXX83, #废弃 83
-SuccType_XXX84, #废弃 84
-SuccType_XXX85, #废弃85
-SuccType_XXX86, #废弃 86
-SuccType_XXX87, #废弃 87
-SuccType_XXX88, #废弃 88
-SuccType_XXX89, #废弃 89
-SuccType_XXX90, #废弃 90
-SuccType_MWSkillUp, #X法宝潜力技能提升X级 91
-SuccType_EquipSuit, # X件X阶套装 92
-SuccType_TalkFamily, # 仙盟频道发言93
-SuccType_UseItem, # 使用X物品X次94
-SuccType_XXX95, # 废弃95
-SuccType_XXX96, # 废弃96
-SuccType_XXX97, # 废弃97
-SuccType_XXX98, # 废弃98
-SuccType_XXX99, # 废弃99
-SuccType_100, # 100
-SuccType_XXX101, # 废弃101
-SuccType_XXX102, # 废弃102
-SuccType_XXX103, # 废弃103
-SuccType_XXX104, # 废弃104
-SuccType_FMTFirst, # 获得封魔坛双倍奖励X次105
-SuccType_XXX106, # 废弃106
-SuccType_XXX107, # 废弃107
-SuccType_XXX108, # 废弃108
-SuccType_XXX109, # 废弃109
-SuccType_XXX110, # 废弃110
-SuccType_WingRefine, # 羽翼精炼X次111
-SuccType_GetSpecialItem, # 获得特殊物品112
-SuccType_XXX113, # 废弃113
-SuccType_GetRealmPoint, # 获得多少修行点114
-SuccType_AlchemyLV, # 炼丹炉等级115
-SuccType_PickUpItem, # 拾取物品116
-SuccType_VIPLV, # VIP等级117
-SuccType_XMZZWinCnt, # 仙魔之争累积胜利场数118
-SuccType_XMZZGetScore, # 仙盟之争累积获得积分119
-SuccType_StoneTotalLV, #镶嵌宝石总等级120
-SuccType_TowerSD, #符印塔扫荡X次121
-SuccType_XXX122, # 废弃122
-SuccType_XBXZ, # 仙宝寻主完成进度123
-SuccType_CompoundEquip, # 合成X阶X颜色X星级以上装备124
-SuccType_IceLode, #通关冰晶矿脉成就125
-SuccType_RefineStoveColor, #炼制X品质丹药X枚126
-SuccType_UseStoveBylv, #使用X品丹药X枚127
-SuccType_QueenRelicsEx, #通关娲皇遗迹128
-SuccType_DogzBattle, #x神兽出战129
-SuccType_DogzEquipPlus, #出战神兽装备总强化X级130
-SuccType_Collect, #采集X物品X次131
-SuccType_InlayGatherSoul, #镶嵌X枚X品质聚魂(不包含核心)132
-SuccType_GatherSoulLvUp, #累计聚魂总等级XX(不包含核心)133
-SuccType_134, #节日红包 - 世界频道发言 x次 134
-SuccType_135, # 节日红包 - 祈祷x次 135
-SuccType_136, # 节日红包 - 击杀特定NPC x次 136
-SuccType_137, # 节日红包 - 指定类型boss x次 137
-SuccType_138, # 节日红包 - 进入指定地图 x次  138
-SuccType_139, # 节日红包 - 完成x次日常环任务成就 139
-SuccType_140, # 节日红包 - 天机摇骰子x次  140
-SuccType_141, # 节日红包 - 跨服PK x次  141
-SuccType_142, # 节日红包 - 副本扫荡 x次  142
-SuccType_PassSkyTower, #通关天星塔 143
-SuccType_Battlefield_Join, # 古神战场 - 参与 x次  144
-SuccType_Battlefield_CallOpen, # 古神战场 - 召集开启 x次  145
-SuccType_Battlefield_Called, # 古神战场 - 当被召集人 x次  146
-SuccType_Battlefield_WinJ, # 古神战场 - 道家获胜 x次  147
-SuccType_Battlefield_WinE, # 古神战场 - 佛家获胜 x次  148
-SuccType_Battlefield_KillCnt, # 古神战场 - 击败玩家 x次  149
-SuccType_Battlefield_CKillCnt, # 古神战场 - 连续击败y玩家 x次  150
-SuccType_Battlefield_KillBoss, # 古神战场 - 阵营击败boss x次  151
-SuccType_Battlefield_KillScoreKing, # 古神战场 - 不同场次击败积分王 x次  152
-SuccType_Battlefield_KillGuard, # 古神战场 - 击败守卫  x次  153
-SuccType_Battlefield_Score, # 古神战场 - 累计获得个人积分 xx  154
-SuccType_Battlefield_ScoreMore, # 古神战场 - 单场个人积分超过yy积分 x次  155
-SuccType_Battlefield_AuraScore, # 古神战场 - 累计在积分光环中获得积分 xx  156
-SuccType_Battlefield_SuperItem, # 古神战场 - 累计获得古神大奖 x次  157
-SuccType_Battlefield_FactionBuff, # 古神战场 - 累计采集阵营buff x次  158
-SuccType_Battlefield_PersonBuff, # 古神战场 - 累计获得个人buff x次  159
-SuccType_Battlefield_Crystal, # 古神战场 - 累计采集占领资源 x次  160
-SuccType_Battlefield_Wall, # 古神战场 - 累计采集积分墙 x次  161
-SuccType_Battlefield_BillFirst, # 古神战场 - 任意周榜榜首 x次  162
-SuccType_Battlefield_BillIn, # 古神战场 - 结算时累计上榜 x次  163
-SuccType_ActivityPlace, # 活跃放置x次 164
-SuccType_UseStoveByType, # 使用丹药X枚 165
-SuccType_Arena, # 参与竞技场x次 166
-SuccType_KillCrossPenglaiBoss, # 击杀蓬莱仙境bossx只 167
-SuccType_KillCrossDemonLandBoss, # 击杀魔化之地bossx只 168
-SuccType_EquipPlusClass, # X阶装备强化总等级X级 169
-SuccType_EquipStarClass, # X阶装备升星总等级X星 170
-SuccType_EquipStoneClass, # X阶装备宝石总等级X级 171
-SuccType_EquipWashClass, # X阶装备洗炼总等级X级 172
-SuccType_EquipPlusTotal, # 全身强化总等级X级 173
-SuccType_EquipStarTotal, # 全身升星总星数X星 174
-SuccType_EquipWashTotal, # 全身洗炼总等级X级 175
-SuccType_CrossPK, # 跨服PK x次  176
-SuccType_FamilyZhenfaExp, # 仙盟阵法捐献累计经验 177
-SuccType_PassAdventure, #通关冒险 178
-SuccType_GatherTheSoulColor, #聚魂激活x品质x个 179
-SuccType_GatherTheSoulLV, #聚魂总等级x 180
-SuccType_MineAreaCnt, #采集福地x次数 181
-SuccType_MineAreaSelfCnt, #采集自己福地x次数 182
-SuccType_MineAreaRobCnt, #采集他人福地x次数 183
-) = range(1, 184)
-
-# 连续天规则的成就类型
-ContinueSuccessTypeList = []
+SuccType_MainLevel, # 通过主线关卡xxx 1
+) = range(1, 1 + 1)
 
 # 不向下适配检查的成就类型(指相对较高成就条件不会增加较低成就条件的进度)
-UnDownCheckSuccessTypeList = [
-                              SuccType_GodWeapon,
-                              SuccType_MainTaskNode,SuccType_PassWagicWeapon,
-                              SuccType_KillSpecificNPC, SuccType_UseStoveBylv, SuccType_UseStoveByType,
-                              SuccType_Pray,SuccType_PetClassLV,
-                              SuccType_QueenRelics,SuccType_XMZZConWin,
-                              SuccType_Collect,SuccType_DogzBattle,
-                              SuccType_GetSpecialItem,SuccType_GetMagicWeapon,SuccType_XBXZ,
-                              ]
+UnDownCheckSuccessTypeList = []
 
 # 部分参数不向下适配检查的成就类型,此配置的类型不能在 UnDownCheckSuccessTypeList 里 {类型:[不向下适配的参数索引, ...], ...}
-PartUnDownCheckSuccessTypeInfo = {
-                                  SuccType_EquipSuit:[0], # 阶不向下适配
-                                  SuccType_EquipPlace:[0,1], # 阶、部位不向下适配
-                                  SuccType_EquipColorItem:[0], # 阶不向下适配
-                                  SuccType_EquipPlus:[0], # 阶不向下适配
-                                  SuccType_EquipWash:[0], # 阶不向下适配
-                                  SuccType_EquipStar:[0], # 阶不向下适配
-                                  SuccType_EquipPlusClass:[0], # 阶不向下适配
-                                  SuccType_EquipStarClass:[0], # 阶不向下适配
-                                  SuccType_EquipStoneClass:[0], # 阶不向下适配
-                                  SuccType_EquipWashClass:[0], # 阶不向下适配
-                                  SuccType_GatherTheSoulColor:[0], # 品质不向下适配
-                                  }
+PartUnDownCheckSuccessTypeInfo = {}
 
 #传进来的条件满足配置的条件列表中的一个就行的成就类型
-ContainSuccessTypeList = [SuccType_CompoundItemEx, SuccType_PickUpItem, SuccType_MWSkillUp]
+ContainSuccessTypeList = []
 
 #传进来的条件是配置条件的整数倍的成就类型
-MultipleSuccessTypeList = [SuccType_ElderBattlefieldConKill, SuccType_Battlefield_CKillCnt]
+MultipleSuccessTypeList = []
 
-#增加进度前需要重置的成就类型
-NeedResetSuccessTypeList = [
-                            SuccType_InlayStone1,SuccType_InlayStone2,SuccType_InlayRune,
-                            SuccType_DogzEquipPlus,
-                            SuccType_PetClassLV,SuccType_InlayGatherSoul,
-                            ]
+#------------------------------------------------------------------------
 
 # 聊天类型, 从100开始, 前100个给c++用
 TalkTypeList = (

--
Gitblit v1.8.0