From 8155ce1b16a37578c76b3d520a12f4b5419666a1 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 01 四月 2020 15:53:16 +0800
Subject: [PATCH] 8405 【后端】成就系统开发(成就通行证领奖)

---
 /dev/null                                                                                   |   56 --------------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py          |    8 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py      |    8 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py        |    3 
 PySysDB/PySysDBPY.h                                                                         |    1 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuccess.py |   88 +++++++++++++++------
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py                               |    8 +
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py                           |    8 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py             |    8 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Success.py  |   10 +
 10 files changed, 103 insertions(+), 95 deletions(-)

diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index c293d33..e615ec8 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -725,6 +725,7 @@
 	list		Condition;	//辅助条件
 	list		PreSuccess;	//需要达成前置成就
 	dict		AwardItem;	//奖励物品列表
+	dict		AwardItem2;	//通行证奖励物品列表
 	dict		Money;	//金钱
 	DWORD		Exp;	//经验
 	dict		AwardAttr;	//奖励属性
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
index cae53eb..7b71519 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
@@ -10153,6 +10153,7 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("SuccID", c_int),    #成就ID
+                  ("IsPassport", c_ubyte),    #是否通行证奖励
                   ]
 
     def __init__(self):
@@ -10170,6 +10171,7 @@
         self.Cmd = 0xA5
         self.SubCmd = 0x42
         self.SuccID = 0
+        self.IsPassport = 0
         return
 
     def GetLength(self):
@@ -10182,12 +10184,14 @@
         DumpString = '''// A5 42 领取成就奖励 //tagMCGetSuccessAward:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                SuccID:%d
+                                SuccID:%d,
+                                IsPassport:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.SuccID
+                                self.SuccID,
+                                self.IsPassport
                                 )
         return DumpString
 
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 68862a6..cf09baf 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -18767,6 +18767,7 @@
     _fields_ = [
                   ("RecordIndex", c_ushort),    #第几个记录值 每个key存31个succid   0-30为0, 31-61为1..
                   ("Record", c_int),    #对应是否领取值
+                  ("PassportRecord", c_int),    #通行证奖励是否领取值
                   ]
 
     def __init__(self):
@@ -18781,6 +18782,7 @@
     def Clear(self):
         self.RecordIndex = 0
         self.Record = 0
+        self.PassportRecord = 0
         return
 
     def GetLength(self):
@@ -18792,11 +18794,13 @@
     def OutputString(self):
         DumpString = '''//A3 42  成就完成领奖记录列表 //tagMCSuccessFinishAwardRecordList:
                                 RecordIndex:%d,
-                                Record:%d
+                                Record:%d,
+                                PassportRecord:%d
                                 '''\
                                 %(
                                 self.RecordIndex,
-                                self.Record
+                                self.Record,
+                                self.PassportRecord
                                 )
         return DumpString
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 6707c9e..a2c1aca 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3868,11 +3868,12 @@
 Def_PDict_GoldInvest_GotRewardValue = "Invest_GotRewardValue_%s_%s"  # 等级回报已领取数值,参数为投资类型 索引
 
 # 成就 Def_PDictType_Success
-Def_PDict_Success_AwardRecord = "Succ_AwardRecord_%s" # 成就领奖记录,参数(成就类型),按索引位存储0-未领,1-已领
+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_PDictType_GreatMaster
 Def_PDict_Master_Exp = "Master_Exp" # 当前大师经验
@@ -5449,4 +5450,7 @@
     PowerDownType_ResetPoint:'ResetPoint',
     PowerDownType_ResetTalent:'ResetTalent',
     PowerDownType_GatherSoul:'GatherSoul',
-    } 
\ No newline at end of file
+    }
+
+# CTG ID 定义
+Def_CTGID_SuccessPassport = 117 # 成就通行证
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index cae53eb..7b71519 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -10153,6 +10153,7 @@
                   ("Cmd", c_ubyte),
                   ("SubCmd", c_ubyte),
                   ("SuccID", c_int),    #成就ID
+                  ("IsPassport", c_ubyte),    #是否通行证奖励
                   ]
 
     def __init__(self):
@@ -10170,6 +10171,7 @@
         self.Cmd = 0xA5
         self.SubCmd = 0x42
         self.SuccID = 0
+        self.IsPassport = 0
         return
 
     def GetLength(self):
@@ -10182,12 +10184,14 @@
         DumpString = '''// A5 42 领取成就奖励 //tagMCGetSuccessAward:
                                 Cmd:%s,
                                 SubCmd:%s,
-                                SuccID:%d
+                                SuccID:%d,
+                                IsPassport:%d
                                 '''\
                                 %(
                                 self.Cmd,
                                 self.SubCmd,
-                                self.SuccID
+                                self.SuccID,
+                                self.IsPassport
                                 )
         return DumpString
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 68862a6..cf09baf 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -18767,6 +18767,7 @@
     _fields_ = [
                   ("RecordIndex", c_ushort),    #第几个记录值 每个key存31个succid   0-30为0, 31-61为1..
                   ("Record", c_int),    #对应是否领取值
+                  ("PassportRecord", c_int),    #通行证奖励是否领取值
                   ]
 
     def __init__(self):
@@ -18781,6 +18782,7 @@
     def Clear(self):
         self.RecordIndex = 0
         self.Record = 0
+        self.PassportRecord = 0
         return
 
     def GetLength(self):
@@ -18792,11 +18794,13 @@
     def OutputString(self):
         DumpString = '''//A3 42  成就完成领奖记录列表 //tagMCSuccessFinishAwardRecordList:
                                 RecordIndex:%d,
-                                Record:%d
+                                Record:%d,
+                                PassportRecord:%d
                                 '''\
                                 %(
                                 self.RecordIndex,
-                                self.Record
+                                self.Record,
+                                self.PassportRecord
                                 )
         return DumpString
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearSuccess.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearSuccess.py
deleted file mode 100644
index 22c378b..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearSuccess.py
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-#-------------------------------------------------------------------------------
-#
-##@package GM.Commands.ClearSuccess
-#
-# @todo:重置成就数据
-# @author hxp
-# @date 2014-11-13
-# @version 1.0
-#
-# 详细描述: 重置成就数据
-#
-#---------------------------------------------------------------------
-"""Version = 2014-11-13 20:30"""
-
-import ShareDefine
-import ChConfig
-import PlayerSuccess
-import GameWorld
-
-#逻辑实现
-## GM命令执行入口
-#  @param curPlayer 当前玩家
-#  @param msgList 参数列表 [npcID]
-#  @return None
-#  @remarks 函数详细说明.
-def OnExec(curPlayer, msgList):
-    for succType in ShareDefine.SuccessTypeList:
-        succDataList = PlayerSuccess.GetSuccDataMng().GetSuccDataByType(succType)
-        if not succDataList:
-            continue
-            
-        for succDataObj in succDataList:
-            succID = succDataObj.succID
-            PlayerSuccess.SetSuccHasGot(curPlayer, succID, False)
-            # 重置该成就完成时间
-            PlayerSuccess.SetSuccFinish(curPlayer, succID, False)
-            
-            lastDayKey = ChConfig.Def_PDict_Success_LastDay % (succID)
-            PlayerSuccess.SetPDictValue(curPlayer, lastDayKey, 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)
-    GameWorld.DebugAnswer(curPlayer, "OK!")
-    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 f187085..d683796 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
@@ -72,6 +72,7 @@
             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)
@@ -100,9 +101,11 @@
         
         for succDataObj in succDataList:
             succID = succDataObj.succID
-            if not PlayerSuccess.GetSuccHasGot(curPlayer, 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)
             
     # 同步成就领奖记录
@@ -132,8 +135,9 @@
                 GameWorld.DebugAnswer(curPlayer, "成就类型: %s" % succType)
             isFinish = PlayerSuccess.GetSuccIsFinish(curPlayer, succID)
             hasGot = PlayerSuccess.GetSuccHasGot(curPlayer, succID)
-            GameWorld.DebugAnswer(curPlayer, "    id=%s 条件:%s 进度:%s/%s 完成:%s 领奖:%s" 
-                                  % (succID, succDataObj.condition, value, succDataObj.needCnt, isFinish, hasGot))
+            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))
             
     return
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 09bfb33..d0774cd 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -609,6 +609,7 @@
                         ("list", "Condition", 0),
                         ("list", "PreSuccess", 0),
                         ("dict", "AwardItem", 0),
+                        ("dict", "AwardItem2", 0),
                         ("dict", "Money", 0),
                         ("DWORD", "Exp", 0),
                         ("dict", "AwardAttr", 0),
@@ -2799,6 +2800,7 @@
         self.Condition = []
         self.PreSuccess = []
         self.AwardItem = {}
+        self.AwardItem2 = {}
         self.Money = {}
         self.Exp = 0
         self.AwardAttr = {}
@@ -2813,6 +2815,7 @@
     def GetCondition(self): return self.Condition # 辅助条件
     def GetPreSuccess(self): return self.PreSuccess # 需要达成前置成就
     def GetAwardItem(self): return self.AwardItem # 奖励物品列表
+    def GetAwardItem2(self): return self.AwardItem2 # 通行证奖励物品列表
     def GetMoney(self): return self.Money # 金钱
     def GetExp(self): return self.Exp # 经验
     def GetAwardAttr(self): return self.AwardAttr # 奖励属性
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 1d4901f..9382a50 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuccess.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuccess.py
@@ -89,6 +89,14 @@
         
     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)
+    return
+    
 def SetSuccFinishValue(curPlayer, succType, condition, value):
     #设置成就完成度
     key = ChConfig.Def_PDict_Success_CntValue % (succType, condition)
@@ -112,6 +120,7 @@
         self.preSuccIDList = [] # 前置成就ID
         self.condition = [] # 辅助条件(根据类型自定义配置)
         self.awardItemDict = {} # 完成成就可领取的奖励物品{itemid:itemcnt}
+        self.awardItemDict2 = {} # 完成成就可领取的奖励物品,通行证奖励{itemid:itemcnt}
         self.moneyDict = {} # 完成成就获得的金钱 {moneyType:money}
         self.exp = 0 # 完成成就获得的经验
         self.attrDict = {} # 完成成就获得的属性 {attrid:attrvalue}
@@ -153,6 +162,7 @@
             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()
@@ -161,7 +171,8 @@
             magicWeaponExp = successIpyData.GetMagicWeaponExp()
             if magicWeaponID and magicWeaponExp:
                 succData.magicWeaponExp[magicWeaponID] = magicWeaponExp
-            succData.hasAward = bool(succData.awardItemDict or succData.moneyDict or succData.exp or succData.attrDict or succData.redPacketID or succData.magicWeaponExp)
+            succData.hasAward = bool(succData.awardItemDict or succData.moneyDict or succData.exp or succData.attrDict or succData.redPacketID or succData.magicWeaponExp \
+                                     or succData.awardItemDict2)
             successDataObjDict[succData.succID]=succData
             if tuple(succData.condition) not in conditionDict:
                 conditionDict[tuple(succData.condition)] = [succData.succID]
@@ -865,47 +876,64 @@
             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;    //是否通行证奖励
 #};
-## 领取成就奖励
-#  @param None
-#  @return
 def OnGetSuccessAward(index, clientData, tick):
     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
     succID = clientData.SuccID
-    __DoGetSuccTypeIndexAward(curPlayer, succID)
+    isPassport = clientData.IsPassport
+    __DoGetSuccTypeIndexAward(curPlayer, succID, isPassport=isPassport)
     return
 
 ## 领取某个成就奖励
 #  @param None
 #  @return
-def __DoGetSuccTypeIndexAward(curPlayer, succID, isGiveItem=True):
-    GameWorld.DebugLog("领取成就奖励succID=%s" % (succID))
+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
-    
-    finishTime = GetSuccIsFinish(curPlayer, succID)
-    if finishTime <= 0:
-        GameWorld.DebugLog("    该成就未完成!")
-        return
-    
-    if GetSuccHasGot(curPlayer, succID):
-        GameWorld.DebugLog("    该成就奖励已经领取过!")
-        return
-    
+        
     if not succData.hasAward:
         GameWorld.DebugLog("    该成就没有配置奖励!")
         return
     
-    itemDict = succData.awardItemDict
+    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()
@@ -919,9 +947,6 @@
 #    else:
 #        itemDict = awardItemDict
         
-            
-        
-        
     # 检查背包
     if isGiveItem:
         packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem)
@@ -931,13 +956,20 @@
             return
 
     # 更新领奖记录
-    SetSuccHasGot(curPlayer, succID)
+    if isPassport:
+        SetSuccPassportAwardHasGot(curPlayer, succID)
+    else:
+        SetSuccHasGot(curPlayer, succID)
     
     # 给物品
     if isGiveItem:
         for itemID, itemCnt in itemDict.items():
             isPutIn = ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem, IPY_GameWorld.rptAnyWhere])
        
+    if isPassport:
+        # 通行证奖励只给物品
+        return itemDict
+    
     #给钱
     for moneyType, value in succData.moneyDict.items():
         PlayerControl.GiveMoney(curPlayer, moneyType, value)
@@ -968,27 +1000,31 @@
     if succIDList:
         recordIndexList = []
         for succID in succIDList:
-            recordIndexList.append(succID / 31)
+            recordIndex = succID / 31
+            if recordIndex not in recordIndexList:
+                recordIndexList.append(recordIndex)
     else:
         ipyDataMgr = IpyGameDataPY.IPY_Data()
         succCnt = ipyDataMgr.GetSuccessCount()
         if not succCnt:
             return
         maxSuccid = ipyDataMgr.GetSuccessByIndex(succCnt-1).GetID()
-        recordIndexList = range(maxSuccid / 31+1)
+        recordIndexList = xrange(maxSuccid / 31+1)
             
     succFARPack = ChPyNetSendPack.tagMCSuccessFinishAwardRecordList()
     succFARPack.Clear()
     succFARPack.RecordList = []
     for i in recordIndexList:
         awardRecord=curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Success_AwardRecord%i)
-        if not isSyncZero and not awardRecord:
+        passportAwardRecord=curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Success_PassportAward%i)
+        if not isSyncZero and not awardRecord and not passportAwardRecord:
             continue
         recordInfo = ChPyNetSendPack.tagMCSuccessFinishAwardRecord()
         recordInfo.RecordIndex = i
         recordInfo.Record = awardRecord
+        recordInfo.PassportRecord = passportAwardRecord
         succFARPack.RecordList.append(recordInfo)
-   
+        
     succFARPack.RecordCnt = len(succFARPack.RecordList)
     NetPackCommon.SendFakePack(curPlayer, succFARPack)
     return

--
Gitblit v1.8.0