From 7712ee7c2ae0a55610a18d962e9d51faf0372609 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 17 七月 2019 11:15:44 +0800
Subject: [PATCH] 8101 【主干】【后端】全民冲榜的神兵排行榜改成升星排行榜(榜单GM命令说明增加升星榜25)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py |  124 +++++++++++++++++++++++++++++-----------
 1 files changed, 89 insertions(+), 35 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
index 4ecf0bd..f6e8aba 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
@@ -44,10 +44,15 @@
 import ShareDefine
 import PlayerFlashGiftbag
 import PlayerFairyCeremony
+import PlayerNewFairyCeremony
 import PlayerGoldGift
 import PlayerActTotalRecharge
 import OpenServerCampaign
+import PlayerWeekParty
+import PlayerGoldInvest
 import ItemCommon
+
+import time
 
 #---------------------------------------------------------------------
 #注意: GetChangeCoinPointTotal 充值点和赠送点总和
@@ -57,29 +62,57 @@
 def GetCoinRate(): return IpyGameDataPY.GetFuncCfg("PayRMB")
 
 def OnLogin(curPlayer):
-    
+    if not DoResetCTGCountByTime(curPlayer):
+        Sync_CoinToGoldCountInfo(curPlayer)
+    return
+
+def DoResetCTGCountByTime(curPlayer):
     # 重置充值次数
-    if not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_VersionFix, ChConfig.Def_VerFix_CTGDoublePrize):
-        GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_VersionFix, ChConfig.Def_VerFix_CTGDoublePrize, 1)
-        ipyDataMgr = IpyGameDataPY.IPY_Data()
-        for i in xrange(ipyDataMgr.GetCTGCount()):
-            ipyData = ipyDataMgr.GetCTGByIndex(i)
-            recordID = ipyData.GetRecordID()
-            totalBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGGoodsBuyCount % recordID)
-            todayBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TodayCTGCount % recordID)
-            if not totalBuyCount and not todayBuyCount:
-                continue
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CTGGoodsBuyCount % recordID, 0)
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TodayCTGCount % recordID, 0)
-            drDict = {"PlayerID":curPlayer.GetPlayerID(),"AccID":curPlayer.GetAccID(), "totalBuyCount":totalBuyCount, "todayBuyCount":todayBuyCount, "recordID":recordID}
-            DataRecordPack.SendEventPack("ResetCTGCount", drDict, curPlayer)
-            GameWorld.Log("重置充值次数: recordID=%s,totalBuyCount=%s,todayBuyCount=%s" 
-                          % (recordID, totalBuyCount, todayBuyCount), curPlayer.GetPlayerID())
-    else:
-        GameWorld.DebugLog("已经重置过充值次数!")
-            
+    ctgResetTimeYMD = IpyGameDataPY.GetFuncCfg("CTG", 1)
+    if not ctgResetTimeYMD:
+        return
+    if not isinstance(ctgResetTimeYMD, int):
+        GameWorld.ErrLog("充值重置时间配置必须是数值格式,不能包含符号!")
+        return
+    curTime = int(time.time())
+    #playerID = curPlayer.GetPlayerID()
+    resetTime = GameWorld.ChangeTimeStrToNum(str(ctgResetTimeYMD), "%Y%m%d")
+    if curTime < resetTime:
+        #GameWorld.DebugLog("还未到达充值充值次数时间!curTime=%s < resetTime=%s" % (curTime, resetTime), playerID)
+        return
+    playerResetTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGCountResetTime)
+    if playerResetTime == resetTime:
+        #GameWorld.DebugLog("已经重置过充值次数!resetTime=%s" % resetTime, playerID)
+        return
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CTGCountResetTime, resetTime)
+    
+    DoResetCTGCount(curPlayer, ctgResetTimeYMD)
+    return True
+
+def DoResetCTGCount(curPlayer, resetEvent):
+    # 重置充值次数
+    
+    playerID = curPlayer.GetPlayerID()
+    ipyDataMgr = IpyGameDataPY.IPY_Data()
+    for i in xrange(ipyDataMgr.GetCTGCount()):
+        ipyData = ipyDataMgr.GetCTGByIndex(i)
+        recordID = ipyData.GetRecordID()
+        if not ipyData.GetCanResetBuyCount():
+            continue
+        totalBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGGoodsBuyCount % recordID)
+        todayBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TodayCTGCount % recordID)
+        if not totalBuyCount and not todayBuyCount:
+            continue
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CTGGoodsBuyCount % recordID, 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TodayCTGCount % recordID, 0)
+        drDict = {"PlayerID":curPlayer.GetPlayerID(),"AccID":curPlayer.GetAccID(), "ResetEvent":resetEvent,
+                  "totalBuyCount":totalBuyCount, "todayBuyCount":todayBuyCount, "recordID":recordID}
+        DataRecordPack.SendEventPack("ResetCTGCount", drDict, curPlayer)
+        GameWorld.Log("重置充值次数: resetEvent=%s,recordID=%s,totalBuyCount=%s,todayBuyCount=%s" 
+                      % (resetEvent, recordID, totalBuyCount, todayBuyCount), playerID)
     Sync_CoinToGoldCountInfo(curPlayer)
     return
+
 
 def OnDay(curPlayer):
     syncRecordIDList = []
@@ -145,6 +178,9 @@
     orderInfo = chargeInfo.GetOrderInfo() # 商品编号
     orderID = chargeInfo.GetOrderID() #订单号,兑换成功后清除
     isAddBourseMoney = chargeInfo.GetIsAddBourseMoney()
+    if orderID:
+        curPlayer.SendDBFinishRecharge(orderID)
+        
     appID = chargeInfo.GetAppID()
     if not appID:
         appID = GameWorld.GetPlayerPlatform(curPlayer)
@@ -181,11 +217,11 @@
         DataRecordPack.DR_CTGError(curPlayer, "The orderInfo is useless!", addDRDict)
         return
     
-    DoCTGLogic(curPlayer, orderCoin, addGold, prizeGold, giveItemList, isAddBourseMoney, eventName, addDRDict, notifyMark)
+    DoCTGLogic(curPlayer, orderCoin, addGold, prizeGold, giveItemList, isAddBourseMoney, eventName, addDRDict, notifyMark, ipyData)
     
     #充值成功主动查询一次,无充值数量就不会继续查询
     if orderID:
-        curPlayer.SendDBFinishRecharge(orderID)
+        #curPlayer.SendDBFinishRecharge(orderID)
         # 充值成功回报客户端,SDK等会用到
         Sync_CoinToGoldReport(curPlayer, orderID, orderCoin)
         
@@ -200,31 +236,42 @@
         DataRecordPack.DR_CTGError(curPlayer, "Can not find CTG ipyData!", addDRDict)
         return
     
-    dailyBuyCount = ipyData.GetDailyBuyCount()
     addDRDict.update({"recordID":recordID})
+    
+    totalBuyCountLimit = ipyData.GetTotalBuyCount()
+    totalBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGGoodsBuyCount % recordID)
+    if totalBuyCountLimit:
+        addDRDict.update({"totalBuyCountLimit":totalBuyCountLimit, "totalBuyCount":totalBuyCount})
+        if totalBuyCount >= totalBuyCountLimit:
+            DataRecordPack.DR_CTGError(curPlayer, "Pay count limit total!totalBuyCount=%s" % totalBuyCount, addDRDict)
+            return        
+    
+    dailyBuyCountLimit = ipyData.GetDailyBuyCount()
     todayBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TodayCTGCount % recordID)
-    if dailyBuyCount:
-        addDRDict.update({"dailyCanBuyCount":dailyBuyCount, "todayBuyCount":todayBuyCount})
-        if todayBuyCount >= dailyBuyCount:
+    if dailyBuyCountLimit:
+        addDRDict.update({"dailyBuyCountLimit":dailyBuyCountLimit, "todayBuyCount":todayBuyCount})
+        if todayBuyCount >= dailyBuyCountLimit:
             DataRecordPack.DR_CTGError(curPlayer, "Pay count limit today!todayBuyCount=%s" % todayBuyCount, addDRDict)
             return
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TodayCTGCount % recordID, todayBuyCount + 1)
-    
+        
+    if totalBuyCountLimit:
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CTGGoodsBuyCount % recordID, totalBuyCount + 1)
+        addDRDict.update({"totalBuyCountUpd":(totalBuyCount + 1)})
+    if dailyBuyCountLimit:
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TodayCTGCount % recordID, todayBuyCount + 1)
+        addDRDict.update({"todayBuyCountUpd":(todayBuyCount + 1)})
+        
     giveItemList = ipyData.GetGainItemList()
     addGold = ipyData.GetGainGold() # 获得仙玉数
     gainGoldPrize = ipyData.GetGainGoldPrize() # 赠送仙玉数,首次充值赠送仙玉时,此仙玉不给
     firstGoldPrize = ipyData.GetFirstGoldPrize() # 首次充值赠送的仙玉
     notifyMark = ipyData.GetNotifyMark()
-    totalBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGGoodsBuyCount % recordID)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CTGGoodsBuyCount % recordID, totalBuyCount + 1)
     prizeGold = firstGoldPrize if (not totalBuyCount and firstGoldPrize) else gainGoldPrize
-    
-    addDRDict.update({"totalBuyCount":(totalBuyCount + 1)})
     
     Sync_CoinToGoldCountInfo(curPlayer, [recordID])
     return addGold, prizeGold, giveItemList, notifyMark
 
-def DoCTGLogic(curPlayer, orderCoin, addGold, prizeGold, giveItemList, isAddBourseMoney, eventName, addDRDict, notifyMark=''):
+def DoCTGLogic(curPlayer, orderCoin, addGold, prizeGold, giveItemList, isAddBourseMoney, eventName, addDRDict, notifyMark='', ipyData=None):
     goldBefore = curPlayer.GetGold()
     bourseMoneyBefore = PlayerControl.GetMoney(curPlayer, ShareDefine.TYPE_Price_BourseMoney)
     
@@ -241,7 +288,7 @@
             PlayerControl.SendMailByKey("", [curPlayer.GetPlayerID()], giveItemList)
         else:
             for itemID, itemCount, isBind in giveItemList:
-                ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isBind, [IPY_GameWorld.rptItem], 
+                ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem], 
                                              event=[ChConfig.ItemGive_CTG, True, addDRDict])
         if notifyMark:
             mainItemID = giveItemList[0][0]
@@ -265,11 +312,18 @@
     #---充值成功后逻辑---
     #仙界盛典-充值大礼
     PlayerFairyCeremony.OnFCRecharge(curPlayer)
+    PlayerNewFairyCeremony.OnFCRecharge(curPlayer)
     PlayerGoldGift.DayChargeRedPackAward(curPlayer)
     #累积充值X元
     PlayerActTotalRecharge.AddTotalRechargeGold(curPlayer, orderCoin/100)
+    PlayerFairyCeremony.AddFCCostGold(curPlayer, orderCoin/100)
+    PlayerNewFairyCeremony.AddFCCostGold(curPlayer, orderCoin/100)
     #开服活动
-    OpenServerCampaign.AddOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_Recharge, orderCoin)
+    #OpenServerCampaign.AddOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_Recharge, orderCoin)
+    PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Recharge, addVIPExp)
+    #投资
+    if ipyData:
+        PlayerGoldInvest.InvestByCTG(curPlayer, ipyData.GetCTGID()) 
     GameWorld.Log("Billing: eventName=%s, %s" % (eventName, addDRDict), curPlayer.GetPlayerID())
     return
 

--
Gitblit v1.8.0