New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | ##@package Player.PlayerDailyGiftbag
|
| | | #
|
| | | # @todo:每日礼包
|
| | | # @author hxp
|
| | | # @date 2020年3月12日
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: 每日礼包
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2020年3月12日 12:00"""
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | import PyGameData
|
| | | import ShareDefine
|
| | | import PlayerControl
|
| | | import IpyGameDataPY
|
| | | import NetPackCommon
|
| | | import ChPyNetSendPack
|
| | | import DataRecordPack
|
| | | import ItemControler
|
| | | import IPY_GameWorld
|
| | | import ItemCommon
|
| | | import GameWorld
|
| | | import ChConfig
|
| | |
|
| | | def OnPlayerLogin(curPlayer):
|
| | | __CheckPlayerDailyGiftbagAction(curPlayer)
|
| | | return
|
| | |
|
| | | def RefreshDailyGiftbagActionInfo():
|
| | | ## 收到GameServer同步的活动信息,刷新活动信息
|
| | | playerManager = GameWorld.GetPlayerManager()
|
| | | for index in xrange(playerManager.GetPlayerCount()):
|
| | | curPlayer = playerManager.GetPlayerByIndex(index)
|
| | | if curPlayer.GetID() == 0:
|
| | | continue
|
| | | __CheckPlayerDailyGiftbagAction(curPlayer)
|
| | | return
|
| | |
|
| | | def __CheckPlayerDailyGiftbagAction(curPlayer):
|
| | | ## 检查玩家每日礼包活动数据信息
|
| | | |
| | | playerID = curPlayer.GetPlayerID()
|
| | | |
| | | actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_DailyGiftbag, {})
|
| | | actID = actInfo.get(ShareDefine.ActKey_ID, 0)
|
| | | state = actInfo.get(ShareDefine.ActKey_State, 0)
|
| | | cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
|
| | | if not state or not cfgID:
|
| | | return
|
| | | |
| | | playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyGiftbagID) # 玩家身上的活动ID
|
| | | cfgIpyData = IpyGameDataPY.GetIpyGameData("ActDailyGiftbag", cfgID)
|
| | | if not cfgIpyData:
|
| | | return
|
| | | giftbagType = cfgIpyData.GetGiftbagType()
|
| | | |
| | | isReset = False
|
| | | if actID != playerActID:
|
| | | isReset = True
|
| | | __ResetGiftbagItemBuyCount(curPlayer, giftbagType)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyGiftbagID, actID)
|
| | | GameWorld.DebugLog("每日礼包重置! actID=%s,playerActID=%s,state=%s,giftbagType=%s" % (actID, playerActID, state, giftbagType), playerID)
|
| | | else:
|
| | | GameWorld.DebugLog("每日礼包活动ID不变,不处理!", curPlayer.GetPlayerID())
|
| | | SyncDailyGiftbagBuyCount(curPlayer, giftbagType)
|
| | | |
| | | Sync_DailyGiftbagActionInfo(curPlayer)
|
| | | return isReset
|
| | |
|
| | | def __ResetGiftbagItemBuyCount(curPlayer, giftbagType):
|
| | | ##重置每日礼包限购物品次数
|
| | | |
| | | giftbagIpyDataList = IpyGameDataPY.GetIpyGameDataByCondition("DailyGiftbag", {"GiftbagType":giftbagType}, True, True)
|
| | | if not giftbagIpyDataList:
|
| | | return
|
| | | for giftIpyData in giftbagIpyDataList:
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyGiftbagBuyCount % giftIpyData.GetGiftbagID(), 0)
|
| | | SyncDailyGiftbagBuyCount(curPlayer, giftbagType)
|
| | | return
|
| | |
|
| | | def OnPlayerOrderDailyGiftbag(curPlayer, giftbagID, addDRDict, isCTG=True):
|
| | | ## 玩家订购每日礼包
|
| | | actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_DailyGiftbag, {})
|
| | | if not actInfo:
|
| | | if isCTG:
|
| | | DataRecordPack.DR_CTGError(curPlayer, "DailyGiftbag action info is null!", addDRDict)
|
| | | return
|
| | | |
| | | state = actInfo.get(ShareDefine.ActKey_State, 0)
|
| | | if not state:
|
| | | if isCTG:
|
| | | DataRecordPack.DR_CTGError(curPlayer, "DailyGiftbag state is 0!", addDRDict)
|
| | | return
|
| | | |
| | | cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
|
| | | cfgIpyData = IpyGameDataPY.GetIpyGameData("ActDailyGiftbag", cfgID)
|
| | | if not cfgIpyData:
|
| | | if isCTG:
|
| | | DataRecordPack.DR_CTGError(curPlayer, "DailyGiftbag GiftbagType is null!", addDRDict)
|
| | | return
|
| | | giftbagType = cfgIpyData.GetGiftbagType()
|
| | | |
| | | giftbagIpyData = IpyGameDataPY.GetIpyGameData("DailyGiftbag", giftbagType, giftbagID)
|
| | | if not giftbagIpyData:
|
| | | if isCTG:
|
| | | DataRecordPack.DR_CTGError(curPlayer, "DailyGiftbag giftbagType=%s giftbagID=%s can not found!" |
| | | % (giftbagType, giftbagID), addDRDict)
|
| | | return
|
| | | |
| | | giftItemList = __GetJobItemList(giftbagIpyData.GetGiftItemList(), curPlayer.GetJob())
|
| | | addDRDict.update({"giftbagType":giftbagType, "giftbagID":giftbagID, "giftItemList":giftItemList})
|
| | | buyCountLimit = giftbagIpyData.GetBuyCountLimit()
|
| | | buyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyGiftbagBuyCount % giftbagID)
|
| | | if buyCountLimit:
|
| | | addDRDict.update({"buyCountLimit":buyCountLimit, "buyCount":buyCount})
|
| | | if buyCount >= buyCountLimit:
|
| | | if isCTG:
|
| | | DataRecordPack.DR_CTGError(curPlayer, "DailyGiftbag Pay count limit !buyCount=%s,buyCountLimit=%s" |
| | | % (buyCount, buyCountLimit), addDRDict)
|
| | | return
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DailyGiftbagBuyCount % giftbagID, buyCount + 1)
|
| | | |
| | | if giftItemList:
|
| | | needSpace = len(giftItemList)
|
| | | emptySpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
|
| | | if emptySpace < needSpace:
|
| | | PlayerControl.SendMailByKey("", [curPlayer.GetPlayerID()], giftItemList)
|
| | | else:
|
| | | for itemID, itemCount, isBind in giftItemList:
|
| | | ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem], |
| | | event=[ChConfig.ItemGive_CTG, True, addDRDict])
|
| | | |
| | | SyncDailyGiftbagBuyCount(curPlayer, giftbagType)
|
| | | return True
|
| | |
|
| | | def OnGetDailyFreeGiftbag(curPlayer):
|
| | | ## 领取每日免费直购礼包
|
| | | giftbagID = 0 # 免费礼包ID固定为0
|
| | | addDRDict = {}
|
| | | OnPlayerOrderDailyGiftbag(curPlayer, giftbagID, addDRDict, False)
|
| | | return
|
| | |
|
| | | def __GetJobItemList(itemList, job):
|
| | | jobItemList = []
|
| | | for itemID, itemCnt, isBind in itemList:
|
| | | if type(itemID) == int:
|
| | | jobItemList.append([itemID, itemCnt, isBind])
|
| | | elif job in itemID:
|
| | | jobItemList.append([itemID[job], itemCnt, isBind])
|
| | | return jobItemList
|
| | |
|
| | | def SyncDailyGiftbagBuyCount(curPlayer, giftbagType):
|
| | | ## 通知每日礼包玩家活动信息
|
| | | |
| | | giftbagIpyDataList = IpyGameDataPY.GetIpyGameDataByCondition("DailyGiftbag", {"GiftbagType":giftbagType}, True, True)
|
| | | if not giftbagIpyDataList:
|
| | | return
|
| | | |
| | | giftbagBuyInfo = ChPyNetSendPack.tagMCDailyGiftbagPlayerInfo()
|
| | | giftbagBuyInfo.BuyCountList = []
|
| | | for giftIpyData in giftbagIpyDataList:
|
| | | giftbagID = giftIpyData.GetGiftbagID()
|
| | | buyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DailyGiftbagBuyCount % giftbagID)
|
| | | if buyCnt <= 0:
|
| | | continue
|
| | | buyCountInfo = ChPyNetSendPack.tagMCDailyGiftbagBuyCount()
|
| | | buyCountInfo.GiftbagID = giftbagID
|
| | | buyCountInfo.BuyCount = buyCnt
|
| | | giftbagBuyInfo.BuyCountList.append(buyCountInfo)
|
| | | giftbagBuyInfo.Count = len(giftbagBuyInfo.BuyCountList)
|
| | | NetPackCommon.SendFakePack(curPlayer, giftbagBuyInfo)
|
| | | return
|
| | |
|
| | | def Sync_DailyGiftbagActionInfo(curPlayer):
|
| | | ## 通知每日礼包活动信息
|
| | | actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_DailyGiftbag, {})
|
| | | if not actInfo:
|
| | | return
|
| | | |
| | | if not actInfo.get(ShareDefine.ActKey_State):
|
| | | return
|
| | | |
| | | cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
|
| | | if not cfgID:
|
| | | return
|
| | | |
| | | cfgIpyData = IpyGameDataPY.GetIpyGameData("ActDailyGiftbag", cfgID)
|
| | | if not cfgIpyData:
|
| | | return
|
| | | giftbagType = cfgIpyData.GetGiftbagType()
|
| | | |
| | | giftbagIpyDataList = IpyGameDataPY.GetIpyGameDataByCondition("DailyGiftbag", {"GiftbagType":giftbagType}, True, True)
|
| | | if not giftbagIpyDataList:
|
| | | return
|
| | | |
| | | # 取玩家APPID,混服使用
|
| | | appID = GameWorld.GetPlayerPlatform(curPlayer)
|
| | | |
| | | packInfo = ChPyNetSendPack.tagMCDailyGiftbagInfo()
|
| | | packInfo.GiftbagInfo = []
|
| | | |
| | | for giftIpyData in giftbagIpyDataList:
|
| | | giftbagID = giftIpyData.GetGiftbagID()
|
| | | orderIpyData = GetGiftbagIDOrderInfoIpyData(giftbagID, appID)
|
| | | |
| | | giftBag = ChPyNetSendPack.tagMCDailyGiftbag()
|
| | | giftBag.GiftID = giftbagID
|
| | | giftBag.OrderInfo = "" if not orderIpyData else orderIpyData.GetOrderInfo()
|
| | | giftBag.OrderInfoLen = len(giftBag.OrderInfo)
|
| | | giftBag.BuyCountLimit = giftIpyData.GetBuyCountLimit()
|
| | | giftBag.RMB = 0 if not orderIpyData else int(orderIpyData.GetPayRMBNum())
|
| | | giftBag.ItemInfo = []
|
| | | for itemID, itemCount, isBind in __GetJobItemList(giftIpyData.GetGiftItemList(), curPlayer.GetJob()):
|
| | | item = ChPyNetSendPack.tagMCDailyGiftbagItem()
|
| | | item.ItemID = itemID
|
| | | item.ItemCount = itemCount
|
| | | giftBag.ItemInfo.append(item)
|
| | | giftBag.GiftItemCount = len(giftBag.ItemInfo)
|
| | | packInfo.GiftbagInfo.append(giftBag)
|
| | | |
| | | packInfo.GiftbagCount = len(packInfo.GiftbagInfo)
|
| | | NetPackCommon.SendFakePack(curPlayer, packInfo)
|
| | | return
|
| | |
|
| | | def GetGiftbagIDOrderInfoIpyData(giftbagID, appID):
|
| | | ## 获取礼包ID对应数据配置
|
| | | key = "GiftbagIpyDataDict"
|
| | | GiftbagIpyDataDict = IpyGameDataPY.GetConfigEx(key)
|
| | | if not GiftbagIpyDataDict:
|
| | | GiftbagIpyDataDict = {}
|
| | | ipyDataMgr = IpyGameDataPY.IPY_Data()
|
| | | for i in xrange(ipyDataMgr.GetOrderInfoCount()):
|
| | | ipyData = ipyDataMgr.GetOrderInfoByIndex(i)
|
| | | if not ipyData.GetGiftbagID():
|
| | | continue
|
| | | GiftbagIpyDataDict[(ipyData.GetGiftbagID(), ipyData.GetAppID())] = ipyData
|
| | | IpyGameDataPY.SetConfigEx(key, GiftbagIpyDataDict)
|
| | | return GiftbagIpyDataDict.get((giftbagID, appID))
|
| | |
|