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