From e1fb8828f3e3ade575522e1717322a27e0521daf Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 10 十一月 2025 20:09:16 +0800
Subject: [PATCH] 247 【付费内容】特权卡-服务端

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldInvest.py |  427 +++++++++++++++++-----------------------------------
 1 files changed, 141 insertions(+), 286 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldInvest.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldInvest.py
index 09d6dec..500140b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldInvest.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldInvest.py
@@ -6,96 +6,97 @@
 #
 # @todo:投资
 # @author hxp
-# @date 2020-09-10
+# @date 2025-11-10
 # @version 1.0
 #
 # 详细描述: 投资
 #
 #-------------------------------------------------------------------------------
-#"""Version = 2020-09-10 11:00"""
+#"""Version = 2025-11-10 20:30"""
 #-------------------------------------------------------------------------------
 
 import GameWorld
 import IpyGameDataPY
 import NetPackCommon
-import DataRecordPack
 import ChPyNetSendPack
 import ItemControler
 import PlayerControl
-import IPY_GameWorld
+import PlayerMail
 import ChConfig
 
 import time
 
-## 登录
 def OnLogin(curPlayer):
     for investType in ChConfig.InvestTypeList:
         if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_InvestTime % investType):
+            # 有投资过就同步
             continue
         Sync_InvestInfo(curPlayer, investType)
     return
 
-## 过天
 def OnDay(curPlayer):
+    dayAwardDict = IpyGameDataPY.GetFuncEvalCfg("InvestDay", 3, {})
     for investType in ChConfig.InvestTypeList:
         if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_InvestTime % investType):
             continue
         
-        # 登录卡
-        if investType == ChConfig.InvestType_Login:
-            progressValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_InvestProgress % (investType, 0))
-            maxDays = __GetInvestMaxDays(investType)
-            if maxDays and progressValue < maxDays:
-                progressValue += 1
-                PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_InvestProgress % (investType, 0), progressValue)
-                GameWorld.DebugLog("更新登录投资可领奖天数进度: %s" % progressValue)
-                
-        # 终身卡
-        elif investType == ChConfig.InvestType_Life:
-            __GiveUnGetPerDayReward(curPlayer, investType)
-            for keyNum in range(ChConfig.Def_PDict_InvestKeyCount):
-                PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_InvestReward % (investType, keyNum), 0)
-                
+        # 每日相同奖励的
+        if str(investType) in dayAwardDict:                
+            __GiveUnGetPerDayReward(curPlayer, investType, dayAwardDict[str(investType)])
+            
         Sync_InvestInfo(curPlayer, investType)
+        
     return
 
-def __GiveUnGetPerDayReward(curPlayer, investType):
+def __GiveUnGetPerDayReward(curPlayer, investType, dayAwardItemList):
     ## 补发未领取的每日奖励,一般用于 每日可领取的固定奖励,如永久卡等
+    
+    if not dayAwardItemList:
+        return
+    
     playerID = curPlayer.GetPlayerID()
-    curTime = int(time.time())
     lastRewardTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_InvestRewardTime % investType)
     if not lastRewardTime:
-        passDays = __GetInvestPassDays(curPlayer, investType)
-        #GameWorld.DebugLog("补发奖励时,距离开通投资已过天数: %s" % passDays, playerID)
-    else:
-        passDays = GameWorld.GetDiff_Day(curTime, lastRewardTime)
-        #GameWorld.DebugLog("补发奖励时,距离上次领奖已过天数: %s" % passDays, playerID)
+        investTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_InvestTime % investType)
+        if not investTime:
+            return
+        lastRewardTime = investTime - 3600 * 24 # 让激活当天也可以领
+        #GameWorld.DebugLog("从未领奖过")
         
-    rewardDays = passDays - 1 # # 需要补发的奖励天数,只补到昨天,不算当天
+    curTime = int(time.time())
+    passDays = GameWorld.GetDiff_Day(curTime, lastRewardTime)
+    #GameWorld.DebugLog("补发奖励时,距离上次领奖已过天数: %s" % passDays, playerID)
+    if not GetInvestState(curPlayer, investType):
+        rewardDays = passDays
+        endTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_InvestEndTime % investType)
+        if not endTime:
+            return
+        rewardDayMax = GameWorld.GetDiff_Day(endTime, lastRewardTime)
+        if rewardDayMax <= 0:
+            return
+        GameWorld.DebugLog("已过期: 最大还可奖励天数: %s" % rewardDayMax, playerID)
+        if rewardDays > rewardDayMax:
+            rewardDays = rewardDayMax
+            GameWorld.DebugLog("修正最大还可补发的奖励天数: %s" % rewardDays, playerID)
+    else:
+        rewardDays = passDays - 1 # # 需要补发的奖励天数,只补到昨天,不算当天
+        GameWorld.DebugLog("未过期: rewardDays=%s" % rewardDays, playerID)
+        
     if rewardDays <= 0:
         GameWorld.DebugLog("不用补发投资卡每日奖励: investType=%s,rewardDays=%s" % (investType, rewardDays), playerID)
         return
     updRewardTime = curTime - 3600 * 24 # 最后一次领奖强制设置到昨天
     
-    rewardIndex = 0 # 每日奖励默认0索引
-    ipyData = IpyGameDataPY.GetIpyGameData("Invest", investType * 100 + rewardIndex)
-    if not ipyData:
-        return
-    rewardInfo = ipyData.GetReward()
-    
-    rewardKey = "1" # 默认1
-    rewardItemList = rewardInfo.get(str(rewardKey), [])
-    if not rewardItemList:
-        return
-    
     mailItemList = []
-    for itemID, itemCount, isAuctionItem in rewardItemList:
-        mailItemList.append([itemID, itemCount * rewardDays, isAuctionItem])
-            
+    for itemInfo in dayAwardItemList:
+        itemID = itemInfo[0]
+        itemCount = itemInfo[1]
+        mailItemList.append([itemID, itemCount * rewardDays])
+        
     GameWorld.DebugLog("邮件补发投资卡每日奖励! investType=%s, rewardDays=%s, updRewardTime=%s, mailItemList=%s" 
                        % (investType, rewardDays, updRewardTime, mailItemList), playerID)
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_InvestRewardTime % investType, updRewardTime)
-    PlayerControl.SendMailByKey("InvestDayReward_%s" % investType, [playerID], mailItemList, [rewardDays])
+    PlayerMail.SendMailByKey("InvestDayReward_%s" % investType, playerID, mailItemList, [rewardDays])
     return
 
 def __GetInvestPassDays(curPlayer, investType):
@@ -106,16 +107,16 @@
     curTime = int(time.time())
     return max(0, GameWorld.GetDiff_Day(curTime, investTime) + 1)
 
-def __GetInvestMaxDays(investType):
-    ## 获取投资最大天数,0为永久
-    investMaxDayDict = IpyGameDataPY.GetFuncEvalCfg("InvestMaxDay", 1, {})
-    return investMaxDayDict.get(str(investType), 0)
-
 def GetInvestState(curPlayer, investType):
-    ## 获取投资卡状态 0-未投资;1-已投资;
+    ## 获取投资卡状态 0-未投资;1-投资生效中;
     investTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_InvestTime % investType)
     if not investTime:
         return 0
+    endTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_InvestEndTime % investType)
+    if endTime: # 有到期时间的检查到期
+        expiredDays = GameWorld.GetDiff_Day(int(time.time()), endTime)
+        if expiredDays > 0: # 已过期
+            return 0
     return 1
 
 #// A5 40 投资理财 #tagCMGoldInvest
@@ -127,164 +128,92 @@
 #    DWORD        InvestGold; // 投资额度
 #};
 def OnGoldInvest(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    investType = clientData.InvestType
-    InvestByRealCTG(curPlayer, investType)
+    #curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+    #investType = clientData.InvestType
     return
 
-def InvestByRealCTG(curPlayer, investType):
-    ## 真实充值激活投资
-    needRealCTGCoinDict = IpyGameDataPY.GetFuncEvalCfg("InvestCost", 4, {})
-    if str(investType) not in needRealCTGCoinDict:
-        return
-    playerID = curPlayer.GetPlayerID()
-    realNeed = needRealCTGCoinDict[str(investType)]
-    realTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGRealTotal)
-    if realTotal < realNeed:
-        GameWorld.DebugLog("真实充值额度不足,无法激活! investType=%s,realTotal=%s < %s" 
-                           % (investType, realTotal, realNeed), playerID)
-        return
-    __DoLogicInvest(curPlayer, investType)
-    return True
-
-## 充值直购投资
 def InvestByCTG(curPlayer, ctgID):
-    ctgInvestDict = IpyGameDataPY.GetFuncEvalCfg("InvestCost", 3, {})
+    ## 充值直购投资
+    ctgInvestDict = IpyGameDataPY.GetFuncEvalCfg("InvestCost", 1, {})
     for investType, ctgIDList in ctgInvestDict.items():
         if ctgID in ctgIDList:
-            __DoLogicInvest(curPlayer, int(investType))
+            DoLogicInvest(curPlayer, int(investType))
             break
     return
 
-## 执行投资逻辑
-def __DoLogicInvest(curPlayer, investType):
-    if GetInvestState(curPlayer, investType) == 1:
-        GameWorld.DebugLog("已投资,无法重复投资! investType=%s" % investType)
-        return
+def DoLogicInvest(curPlayer, investType):
+    ## 执行投资逻辑
+    buyDaysDict = IpyGameDataPY.GetFuncEvalCfg("InvestDay", 1, {}) # 购买天数 
+    buyDays = buyDaysDict.get(str(investType), 0)
+    curState = GetInvestState(curPlayer, investType)
+    GameWorld.DebugLog("购买投资: investType=%s,buyDays=%s,curState=%s" % (investType, buyDays, curState))
     
-    # 可投资,更新重置投资相关数据
     curTime = int(time.time())
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_InvestTime % investType, curTime)
-    for keyNum in range(ChConfig.Def_PDict_InvestKeyCount):
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_InvestReward % (investType, keyNum), 0)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_InvestProgress % (investType, keyNum), 0)
-    
-    # 登录卡,投资当天可领奖,完成设置为1
-    if investType == ChConfig.InvestType_Login:
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_InvestProgress % (investType, 0), 1)
+    # 已过期的重置投资相关数据
+    if not curState:
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_InvestTime % investType, curTime)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_InvestEndTime % investType, 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_InvestRewardTime % investType, 0)
         
-    # 额外奖励物品
-    awardItemDict = IpyGameDataPY.GetFuncEvalCfg("InvestCost", 5, {})
-    if str(investType) in awardItemDict:
-        awardItemListEx = awardItemDict[str(investType)]
-        ItemControler.GivePlayerItemOrMail(curPlayer, awardItemListEx, event=["Invest", True, {"investType":investType}])
+    # 支持重复购买,累加到期时间
+    # 永久
+    if buyDays <= 0:
+        updEndTime = 0
         
-    # 广播
-    PlayerControl.WorldNotify(0, "BuyInvest_%s" % investType, [curPlayer.GetName(), __GetTotalGetGold(investType)])
-    
+    # 有天数限制
+    elif buyDays > 0:
+        endTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_InvestEndTime % investType)
+        if endTime > curTime:
+            updEndTime = endTime + buyDays * 24 * 3600
+            GameWorld.Log("    累加时长: investType=%s,endTime=%s,updEndTime=%s" 
+                          % (investType, GameWorld.ChangeTimeNumToStr(endTime), GameWorld.ChangeTimeNumToStr(updEndTime)))
+        else:
+            updEndTime = GameWorld.GetEndTimeByZeroTime(curTime, buyDays)
+            GameWorld.Log("    重新激活: investType=%s,updEndTime=%s" % (investType, GameWorld.ChangeTimeNumToStr(updEndTime)))
+            
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_InvestEndTime % investType, updEndTime)
     GameWorld.DebugLog("投资理财成功: investType=%s" % (investType))
     Sync_InvestInfo(curPlayer, investType)
-    PlayerControl.Sync_ExpRateChange(curPlayer)
     return
 
-def __GetTotalGetGold(investType):
-    ## 获取投资预计总收益仙玉、灵石
-    totalGold = 0
-    ipyDataMgr = IpyGameDataPY.IPY_Data()
-    for index in xrange(ipyDataMgr.GetInvestCount()):
-        ipyData = ipyDataMgr.GetInvestByIndex(index)
-        if ipyData.GetType() != investType:
-            continue
-        rewardDict = ipyData.GetReward()
-        for rewardInfo in rewardDict.values():
-            for itemID, itemCount, _ in rewardInfo:
-                if itemID in [20, 30]: # 单位1的仙玉、灵石
-                    totalGold += itemCount
-    return totalGold
-
-def GetAddBossCnt(curPlayer, bossFuncIndex):
-    ## 获取增加的boss次数上限
-    addBossCnt = 0
-    if GetInvestState(curPlayer, ChConfig.InvestType_Life):
-        lifeCardAddBossCntDict = IpyGameDataPY.GetFuncEvalCfg("InvestPower", 1, {})
-        lifeCardAddCnt = lifeCardAddBossCntDict.get(str(bossFuncIndex), 0)
-        addBossCnt += lifeCardAddCnt
-    return addBossCnt
-
 def GetAddFBCnt(curPlayer, mapID):
-    ## 获取增加的副本次数上限
+    ## 获取增加的副本免费次数上限
     addFBCnt = 0
-    if GetInvestState(curPlayer, ChConfig.InvestType_Life):
-        lifeCardAddFBCntDict = IpyGameDataPY.GetFuncEvalCfg("InvestPower", 2, {})
-        lifeCardAddCnt = lifeCardAddFBCntDict.get(str(mapID), 0)
-        addFBCnt += lifeCardAddCnt
     return addFBCnt
-
-def GetAddBossBuyCnt(curPlayer, bossFuncIndex):
-    ## 获取增加的boss购买次数上限
-    addBossBuyCnt = 0
-    if GetInvestState(curPlayer, ChConfig.InvestType_Life):
-        lifeCardAddBossCntDict = IpyGameDataPY.GetFuncEvalCfg("InvestPower", 4, {})
-        lifeCardAddCnt = lifeCardAddBossCntDict.get(str(bossFuncIndex), 0)
-        addBossBuyCnt += lifeCardAddCnt
-    return addBossBuyCnt
 
 def GetAddFBBuyCnt(curPlayer, mapID):
     ## 获取增加的副本购买次数上限
     addFBBuyCnt = 0
-    if GetInvestState(curPlayer, ChConfig.InvestType_Life):
-        lifeCardAddFBCntDict = IpyGameDataPY.GetFuncEvalCfg("InvestPower", 5, {})
-        lifeCardAddCnt = lifeCardAddFBCntDict.get(str(mapID), 0)
-        addFBBuyCnt += lifeCardAddCnt
+    addFBBuyCntDict = IpyGameDataPY.GetFuncEvalCfg("InvestPower", 1, {})
+    for investType, fbMapIDAddDict in addFBBuyCntDict.items():
+        addCnt = fbMapIDAddDict.get(str(mapID), 0)
+        if not addCnt:
+            continue
+        if not GetInvestState(curPlayer, int(investType)):
+            continue
+        addFBBuyCnt += addCnt
     return addFBBuyCnt
 
-def GetAddFightExpRate(curPlayer):
-    ## 杀怪经验加成
-    fightExpRate = 0
-    if GetInvestState(curPlayer, ChConfig.InvestType_Life):
-        fightExpRate += IpyGameDataPY.GetFuncCfg("InvestPower2", 1)
-    return fightExpRate
-
-def CanQuickFinishMissionFree(curPlayer):
-    ## 可否免费快速完成任务
-    for investType in IpyGameDataPY.GetFuncEvalCfg("InvestPower", 3):
-        if GetInvestState(curPlayer, investType):
-            return True
+def IsFBCntBuyFree(curPlayer, mapID):
+    ## 副本付费次数购买免费
+    freeSweepDict = IpyGameDataPY.GetFuncEvalCfg("InvestPower", 2, {})
+    for investType, fbMapIDList in freeSweepDict.items():
+        if mapID not in fbMapIDList:
+            continue
+        if not GetInvestState(curPlayer, int(investType)):
+            continue
+        return True
     return False
 
-def OnKillBoss(curPlayer, npcID):
-    ## 参与击杀boss
-    if GetInvestState(curPlayer, ChConfig.InvestType_Boss) != 1:
-        #GameWorld.DebugLog("boss投资未投资!")
-        return
-    key = "BossInvestNPCIDDict"
-    BossInvestNPCIDDict = IpyGameDataPY.GetConfigEx(key)
-    if not BossInvestNPCIDDict:
-        BossInvestNPCIDDict = {}
-        ipyDataMgr = IpyGameDataPY.IPY_Data()
-        for index in xrange(ipyDataMgr.GetInvestCount()):
-            ipyData = ipyDataMgr.GetInvestByIndex(index)
-            if ipyData.GetType() != ChConfig.InvestType_Boss:
-                continue
-            if not ipyData.GetNeedNPCID():
-                continue
-            BossInvestNPCIDDict[ipyData.GetNeedNPCID()] = ipyData.GetID()
-        IpyGameDataPY.SetConfigEx(key, BossInvestNPCIDDict)
-        GameWorld.Log("缓存boss投资对应关系: %s" % BossInvestNPCIDDict)
-        
-    if npcID not in BossInvestNPCIDDict:
-        #GameWorld.DebugLog("    该boss没有投资奖励!")
-        return
-    investID = BossInvestNPCIDDict[npcID]
-    investType, rewardIndex = investID / 100, investID % 100
-    if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_InvestProgress, rewardIndex, True, [investType]):
-        #GameWorld.DebugLog("已设置击杀过该投资boss: npcID=%s,rewardIndex=%s,progressValue=%s" % (npcID, rewardIndex, progressValue))
-        return
-    progressValue, updProgressValue = GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_InvestProgress, rewardIndex, 1, True, [investType])
-    Sync_InvestInfo(curPlayer, investType)
-    GameWorld.DebugLog("设置杀过投资boss: npcID=%s,rewardIndex=%s,progressValue=%s,updProgressValue=%s" 
-                       % (npcID, rewardIndex, progressValue, updProgressValue))
-    return
+def GetArenaTicketMax(curPlayer):
+    ## 演武场门票上限
+    addMax = 0
+    arenaCntDict = IpyGameDataPY.GetFuncEvalCfg("InvestPower", 3, {})
+    for investType, addCnt in arenaCntDict.items():
+        if not GetInvestState(curPlayer, int(investType)):
+            continue
+        addMax += addCnt
+    return addMax
 
 #// A5 41 领取投资理财回报 #tagCMGetInvestReward
 #
@@ -308,116 +237,42 @@
         GameWorld.DebugLog("    未投资或已过期,无法领奖!")
         return
     
-    ipyData = IpyGameDataPY.GetIpyGameData("Invest", investType * 100 + rewardIndex)
-    if not ipyData:
-        return
-    
-    needLV = ipyData.GetNeedLV()
-    if needLV and curPlayer.GetLV() < needLV:
-        GameWorld.DebugLog("    等级不足,无法领奖! needLV=%s" % needLV)
-        return
-    
-    if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_InvestReward, rewardIndex, True, [investType]):
-        GameWorld.DebugLog("    已领取过该索引奖励! rewardIndex=%s" % rewardIndex)
-        return
-    
-    needDay = ipyData.GetNeedDay()
-    rewardInfo = ipyData.GetReward()
-    
-    indexProgressState = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_InvestProgress, rewardIndex, True, [investType])
-    
-    # 月卡
-    if investType in [ChConfig.InvestType_NewMonth, ChConfig.InvestType_Month1]:
-        passDays = __GetInvestPassDays(curPlayer, investType) # 按投资时间计算天
-        if needDay > passDays:
-            GameWorld.DebugLog("    投资天数不足,无法领取! needDay=%s > passDays=%s" % (ipyData.GetNeedDay(), passDays))
-            return
-        
-    # 登录
-    elif investType == ChConfig.InvestType_Login:
-        loginDays = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_InvestProgress % (investType, 0)) # 按登录天计算天,有登录才算
-        if needDay > loginDays:
-            GameWorld.DebugLog("    登录投资天数不足,无法领取! needDay=%s > loginDays=%s" % (needDay, loginDays))
-            return
-        
-    # 等级
-    elif investType == ChConfig.InvestType_LV:
-        # 公共等级条件已判断
-        pass
-        
-    # Boss
-    elif investType == ChConfig.InvestType_Boss:
-        if not indexProgressState:
-            GameWorld.DebugLog("    Boss投资无参与击杀该boss,无法领取! rewardIndex=%s" % (rewardIndex))
-            return
-        
-    # 终身卡
-    elif investType == ChConfig.InvestType_Life:
-        pass
-    
-    else:
-        return
-    
-    if not ipyData:
-        return
-        
-    rewardKey = "1" # 默认1
-    rewardItemList = rewardInfo.get(str(rewardKey), [])
+    curTime = int(time.time())
+    rewardItemList = []
+    # 按每天固定奖励的
+    if rewardIndex == 0:
+        lastRewardTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_InvestRewardTime % investType)
+        if lastRewardTime:
+            if GameWorld.GetDiff_Day(curTime, lastRewardTime) == 0:
+                GameWorld.DebugLog("    已领取过该索引奖励! rewardIndex=%s" % rewardIndex)
+                return
+            
+        dayAwardDict = IpyGameDataPY.GetFuncEvalCfg("InvestDay", 3, {})
+        if str(investType) in dayAwardDict:
+            rewardItemList = dayAwardDict[str(investType)]
+            
     if not rewardItemList:
         return
     
-    if not ItemControler.CheckPackSpaceEnough(curPlayer, rewardItemList):
-        return
-    
-    rewardValue, updRewardValue = GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_InvestReward, rewardIndex, 1, True, [investType])
-    Sync_InvestInfo(curPlayer, investType)
-    GameWorld.DebugLog("    rewardValue=%s,updRewardValue=%s,rewardItemList=%s" % (rewardValue, updRewardValue, rewardItemList))
-    
-    # 记录最后一次领奖时间
-    if investType == ChConfig.InvestType_Life:
+    if rewardIndex == 0:
         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_InvestRewardTime % (investType), int(time.time()))
-        
-    for itemID, itemCount, isAuctionItem in rewardItemList:
-        ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem],
-                                     event=["Invest", False, {}])
-    ItemControler.NotifyGiveAwardInfo(curPlayer, rewardItemList, "Invest")
-    
-    # 记录领取事件
-    DataRecordPack.DR_GetGoldInvestReward(curPlayer, investType, rewardIndex, rewardItemList)
-    
-    # 领完了,重置可重复购买的非永久卡
-    maxDays = __GetInvestMaxDays(investType)
-    canRepetBuyTypeList = IpyGameDataPY.GetFuncEvalCfg("InvestMaxDay", 2)
-    if maxDays > 1 and investType in canRepetBuyTypeList:
-        isAllDayGet = True
-        for i in range(maxDays, -1, -1):
-            if not IpyGameDataPY.GetIpyGameDataNotLog("Invest", investType * 100 + i):
-                continue
-            if not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_InvestReward, i, True, [investType]):
-                isAllDayGet = False
-                #GameWorld.DebugLog("    还有未领取: i=%s,isAllDayGet=%s" % (i, isAllDayGet))
-                break
-            
-        if isAllDayGet:
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_InvestTime % investType, 0)
-            for keyNum in range(ChConfig.Def_PDict_InvestKeyCount):
-                PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_InvestReward % (investType, keyNum), 0)
-                PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_InvestProgress % (investType, keyNum), 0)
-            Sync_InvestInfo(curPlayer, investType)
-            GameWorld.DebugLog("    领完奖励了,重置投资! investType=%s" % investType)
-            
+    GameWorld.DebugLog("更新领奖:investType=%s,rewardItemList=%s" % (investType, rewardItemList))
+    Sync_InvestInfo(curPlayer, investType)
+    ItemControler.GivePlayerItemOrMail(curPlayer, rewardItemList, event=["Invest", False, {}])
     return
 
-## 同步投资理财信息
+def __todayAwardState(curPlayer, investType):
+    lastRewardTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_InvestRewardTime % investType)
+    if lastRewardTime:
+        if GameWorld.GetDiff_Day(int(time.time()), lastRewardTime) == 0:
+            return 1
+    return 0
+
 def Sync_InvestInfo(curPlayer, investType):
-    investInfoPack = ChPyNetSendPack.tagMCInvestInfo()
-    investInfoPack.InvestType = investType
-    investInfoPack.CurDay = __GetInvestPassDays(curPlayer, investType)
-    for keyNum in range(ChConfig.Def_PDict_InvestKeyCount):
-        investInfoPack.RewardValue.append(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_InvestReward % (investType, keyNum)))
-        investInfoPack.ProgressValue.append(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_InvestProgress % (investType, keyNum)))
-    investInfoPack.ValueCount = len(investInfoPack.RewardValue)
-    NetPackCommon.SendFakePack(curPlayer, investInfoPack)
+    clientPack = ChPyNetSendPack.tagSCInvestInfo()
+    clientPack.InvestType = investType
+    clientPack.InvestBuyTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_InvestTime % investType)
+    clientPack.InvestEndTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_InvestEndTime % investType)
+    clientPack.AwardState = __todayAwardState(curPlayer, investType)
+    NetPackCommon.SendFakePack(curPlayer, clientPack)
     return
-
-

--
Gitblit v1.8.0