From 3be133d5ac1faf779a7493587313be622f297217 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 26 九月 2023 01:00:10 +0800
Subject: [PATCH] 9961 【BT0.1】【主干】倒计时礼包

---
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossLuckyCloudBuy.py |   61 ++++++++++++++++++------------
 1 files changed, 36 insertions(+), 25 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossLuckyCloudBuy.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossLuckyCloudBuy.py
index fafbef3..ae64795 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossLuckyCloudBuy.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossLuckyCloudBuy.py
@@ -60,8 +60,11 @@
 value5:lotteryTime       开奖时间
 
 StrValue1:luckyPlayerName    中奖玩家名
+StrValue2:templateID    使用模板ID
 StrValue3:lotteryInfo        分区信息|大奖信息|中奖玩家账号
 '''
+
+Def_SyncBuyRec_Count = 50
 
 class LuckyCloudBuyNum():
     ''' 幸运云购购买号码记录
@@ -103,11 +106,12 @@
         self.serverIDRangeList = [] # 分区信息
         self.superItemInfo = [] # 大奖信息
         self.luckyPlayerAccID = "" # 中奖玩家账号
+        self.templateID = 0 # 使用模板ID
         return
     
     def GetString(self):
         return {"idTime":self.idTime, "cfgID":self.cfgID, "zoneID":self.zoneID, "roundNum":self.roundNum, "luckyPlayerID":self.luckyPlayerID, 
-                "lotteryNum":self.lotteryNum, "lotteryTime":self.lotteryTime, "luckyPlayerName":self.luckyPlayerName, 
+                "lotteryNum":self.lotteryNum, "lotteryTime":self.lotteryTime, "luckyPlayerName":self.luckyPlayerName, "templateID":self.templateID,
                 "serverIDRangeList":self.serverIDRangeList, "superItemInfo":self.superItemInfo, "luckyPlayerAccID":self.luckyPlayerAccID}
         
     def SetAttrByDict(self, attrDict):
@@ -168,6 +172,7 @@
         lotteryRec.lotteryTime = recData.GetValue5()
         
         lotteryRec.luckyPlayerName = recData.GetStrValue1()
+        lotteryRec.templateID = GameWorld.ToIntDef(recData.GetStrValue2())
         strValue3 = recData.GetStrValue3()
         lotteryRec.serverIDRangeList, lotteryRec.superItemInfo, lotteryRec.luckyPlayerAccID = [], [], ""
         if strValue3:
@@ -227,6 +232,7 @@
             recData.SetValue5(lotteryRec.lotteryTime)
             
             recData.SetStrValue1(lotteryRec.luckyPlayerName)
+            recData.SetStrValue2("%s" % lotteryRec.templateID)
             recData.SetStrValue3("%s|%s|%s" % (str(lotteryRec.serverIDRangeList).replace(" ", ""), 
                                                str(lotteryRec.superItemInfo).replace(" ", ""), 
                                                lotteryRec.luckyPlayerAccID))
@@ -238,6 +244,7 @@
         return
     
     Sync_LuckyCloudBuyRoundInfo(curPlayer)
+    Sync_LuckyCloudBuyNumRecInfo(curPlayer)
     __LoginNotifyMapCloudBuyNumInfo(curPlayer)
     return
 
@@ -453,6 +460,7 @@
     lotteryRec.cfgID = cfgID
     lotteryRec.zoneID = zoneID
     lotteryRec.roundNum = nextRoundNum
+    lotteryRec.templateID = templateID
     
     lotteryRec.serverIDRangeList = serverIDRangeList
     lotteryRec.superItemInfo = superItemInfo
@@ -473,6 +481,10 @@
     zoneLotteryInfo = {zoneID:[lotteryRec.GetString()]}
     dataMsg = {"syncType":"New", "zoneLotteryInfo":zoneLotteryInfo}
     CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_LuckyCloudBuyLottery, dataMsg)
+    
+    maxBuyCount = IpyGameDataPY.GetFuncCfg("LuckyCloudBuySet", 2)
+    dataMsg = {"syncType":"All", "zoneID":zoneID, "zoneBuyNumList":[], "remainCount":maxBuyCount}
+    CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_LuckyCloudBuyNum, dataMsg)
     return True
 
 def Sync_LuckyCloudBuyDataToClientServer(tick, serverGroupID=0):
@@ -493,10 +505,12 @@
     for zoneID in PyGameData.g_luckyCloudBuyLotteryDict.keys():
         zoneBuyNumList = []
         buyRecList = PyGameData.g_luckyCloudBuyNumDict.get(zoneID, [])
-        for buyRec in buyRecList:
+        for buyRec in buyRecList[-Def_SyncBuyRec_Count:]:
             zoneBuyNumList.append(buyRec.GetString())
             
-        dataMsg = {"syncType":"All", "zoneID":zoneID, "zoneBuyNumList":zoneBuyNumList}
+        maxBuyCount = IpyGameDataPY.GetFuncCfg("LuckyCloudBuySet", 2)
+        remainCount = max(0, maxBuyCount - len(buyRecList))
+        dataMsg = {"syncType":"All", "zoneID":zoneID, "zoneBuyNumList":zoneBuyNumList, "remainCount":remainCount}
         CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_LuckyCloudBuyNum, dataMsg)
         
     return
@@ -649,11 +663,12 @@
     DataRecordPack.SendEventPack("LuckyCloudBuyNum", dataDict)
     
     # 通知子服
-    dataMsg = {"syncType":"New", "zoneID":zoneID, "zoneBuyNumList":zoneBuyNumList, "buyPlayer":[serverGroupID, playerID, roundID, buyCount]}
+    remainCount -= buyCount
+    dataMsg = {"syncType":"New", "zoneID":zoneID, "zoneBuyNumList":zoneBuyNumList, "buyPlayer":[serverGroupID, playerID, roundID, buyCount], "remainCount":remainCount}
     CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_LuckyCloudBuyNum, dataMsg)
     
     # 结算开奖
-    if remainCount == buyCount:
+    if remainCount <= 0:
         DoLuckyCloudBuyLottery(lotteryRec, False, "SoldOut")
         
     return
@@ -704,11 +719,12 @@
         zoneBuyNumList.append(buyRec.GetString())
         
     # 通知子服
-    dataMsg = {"syncType":"New", "zoneID":zoneID, "zoneBuyNumList":zoneBuyNumList}
+    remainCount -= buyCount
+    dataMsg = {"syncType":"New", "zoneID":zoneID, "zoneBuyNumList":zoneBuyNumList, "remainCount":remainCount}
     CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_LuckyCloudBuyNum, dataMsg)
     
     # 结算开奖
-    if remainCount == buyCount:
+    if remainCount <= 0:
         DoLuckyCloudBuyLottery(lotteryRec, False, "SoldOut")
     return
 
@@ -718,6 +734,7 @@
     syncType = msgData["syncType"] # All New
     zoneID = msgData["zoneID"]
     zoneBuyNumList = msgData["zoneBuyNumList"]
+    remainCount = msgData["remainCount"]
     
     curServerGroupID = GameWorld.GetServerGroupID()
     actInfo = CrossActionControl.GetCrossActInfoByServerGroupID(ShareDefine.CrossActName_LuckyCloudBuy, curServerGroupID)
@@ -732,6 +749,8 @@
         GameWorld.DebugLog("不是本服务器分区的云购记录不处理! curServerGroupID=%s,serverZoneID(%s) != zoneID(%s)" 
                            % (curServerGroupID, serverZoneID, zoneID))
         return
+    
+    PyGameData.g_luckyCloudBuyRemainCountDict[zoneID] = remainCount
     
     if syncType == "All":
         PyGameData.g_luckyCloudBuyNumDict = {}
@@ -758,12 +777,11 @@
     if serverGroupID != curServerGroupID:
         return
     
-    templateIDList = ipyDataInfo.get("TemplateIDList")
-    if not templateIDList:
+    lotteryRecList = PyGameData.g_luckyCloudBuyLotteryDict.get(zoneID, [])
+    lotteryRec = None if not lotteryRecList else lotteryRecList[-1] # 取最新一期的
+    if not lotteryRec:
         return
-    
-    dayIndex = actInfo.get(ShareDefine.ActKey_DayIndex, 0)
-    templateID = templateIDList[dayIndex] if len(templateIDList) > dayIndex else templateIDList[-1]
+    templateID = lotteryRec.templateID
     templateIpyData = IpyGameDataPY.GetIpyGameData("CrossActLuckyCloudBuyTemplate", templateID)
     if not templateIpyData:
         return
@@ -856,22 +874,17 @@
     if not zoneID:
         return
     
-    templateIDList = ipyDataInfo.get("TemplateIDList")
-    if not templateIDList:
+    lotteryRecList = PyGameData.g_luckyCloudBuyLotteryDict.get(zoneID, [])
+    lotteryRec = None if not lotteryRecList else lotteryRecList[-1] # 取最新一期的
+    if not lotteryRec:
         return
+    templateID = lotteryRec.templateID
     
-    dayIndex = actInfo.get(ShareDefine.ActKey_DayIndex, 0)
-    templateID = templateIDList[dayIndex] if len(templateIDList) > dayIndex else templateIDList[-1]
     templateIpyData = IpyGameDataPY.GetIpyGameData("CrossActLuckyCloudBuyTemplate", templateID)
     if not templateIpyData:
         return
     baseAwardInfo = templateIpyData.GetBaseAwardInfo()
     randAwardWeightInfo = templateIpyData.GetRandAwardWeightInfo()
-    
-    lotteryRecList = PyGameData.g_luckyCloudBuyLotteryDict.get(zoneID, [])
-    lotteryRec = None if not lotteryRecList else lotteryRecList[-1] # 取最新一期的
-    if not lotteryRec:
-        return
     
     roundTimeList = []
     StartTimeList = ipyDataInfo.get("StartTimeList")
@@ -945,12 +958,10 @@
         lotteryRec = None if not lotteryRecList else lotteryRecList[-1] # 取最新一期的
         if not lotteryRec:
             return
-        syncRecList = buyRecList[-50:]
-        
-    maxBuyCount = IpyGameDataPY.GetFuncCfg("LuckyCloudBuySet", 2)
+        syncRecList = buyRecList[-Def_SyncBuyRec_Count:]
         
     clientPack = ChPyNetSendPack.tagGCLuckyCloudBuyNumRecInfo()
-    clientPack.RemainCount = max(0, maxBuyCount - len(buyRecList))
+    clientPack.RemainCount = PyGameData.g_luckyCloudBuyRemainCountDict.get(zoneID, 0)
     clientPack.BuyNumRecList = []
     for buyRec in syncRecList:
         buyNumInfo = ChPyNetSendPack.tagGCLuckyCloudBuyNumRec()

--
Gitblit v1.8.0