| | |
| | | import PlayerControl
|
| | | import IpyGameDataPY
|
| | | import ItemCommon
|
| | | import ObjPool
|
| | |
|
| | | # 重置类型
|
| | | ResetType_Day = 1
|
| | |
| | | SyncShopItemBuyCntInfo(curPlayer, syncIDList)
|
| | | return
|
| | |
|
| | | def ResetShopItemBuyCountByShopType(curPlayer, shopTypeList):
|
| | | def ResetShopItemBuyCountByShopType(curPlayer, shopTypeList, recycleItemMail=""):
|
| | | ##根据商店类型重置商店限购物品次数
|
| | | # @param recycleItemMail: 商店消耗物品回收通知邮件,为空时不回收
|
| | | if not shopTypeList:
|
| | | return
|
| | | recycleCostItemIDList = []
|
| | | syncIDList = []
|
| | | for shopType in shopTypeList:
|
| | | ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition("Store", {"ShopType":shopType}, True, True)
|
| | | if not ipyDataList:
|
| | | continue
|
| | | for ipyData in ipyDataList:
|
| | | |
| | | # 消耗道具回收
|
| | | costItemID = ipyData.GetCostItemID()
|
| | | if recycleItemMail and costItemID and costItemID not in recycleCostItemIDList:
|
| | | recycleCostItemIDList.append(costItemID)
|
| | | ItemControler.RecycleItem(curPlayer, costItemID, recycleItemMail)
|
| | | |
| | | if not ipyData.GetLimitCnt():
|
| | | continue
|
| | | shopID = ipyData.GetID()
|
| | |
| | | totalItemList = []
|
| | | if itemID:
|
| | | totalItemList.append([itemID, itemCount * clientBuyCount, isBind])
|
| | | for itemIDEx, itemCountEx, isBindEx in itemListEx:
|
| | | for itemEx in itemListEx:
|
| | | itemIDEx, itemCountEx = itemEx[:2]
|
| | | isBindEx = itemEx[2] if len(itemEx) > 2 else 0
|
| | | totalItemList.append([itemIDEx, itemCountEx * clientBuyCount, isBindEx])
|
| | | if not totalItemList:
|
| | | GameWorld.ErrLog("Store shop item error! shopType=%s,shopID=%s" % (shopType, shopID), curPlayer.GetPlayerID())
|
| | |
| | | GameWorld.Log("Store shop item lock! shopID=%s,shopID=%s" % (shopType, shopID), curPlayer.GetPlayerID())
|
| | | return
|
| | |
|
| | | costItemID = ipyData.GetCostItemID()
|
| | | priceType, itemPrice = ipyData.GetMoneyType(), ipyData.GetMoneyNum()
|
| | | itemPrice *= clientBuyCount
|
| | | #if not PlayerControl.HaveMoney(curPlayer, priceType, itemPrice):
|
| | |
| | |
|
| | | infoDict = {"TotalItemList":totalItemList, "ClientBuyCount":clientBuyCount, "ShopType":shopType,
|
| | | "ShopID":shopID, ChConfig.Def_Cost_Reason_SonKey:mainItemID}
|
| | | if priceType and itemPrice and not PlayerControl.PayMoney(curPlayer, priceType, itemPrice, ChConfig.Def_Cost_BuyStoreItem, infoDict, clientBuyCount):
|
| | | return
|
| | | |
| | | # 支持消耗货币或道具二选一
|
| | | if priceType:
|
| | | if itemPrice and not PlayerControl.PayMoney(curPlayer, priceType, itemPrice, ChConfig.Def_Cost_BuyStoreItem, infoDict, clientBuyCount):
|
| | | return
|
| | | elif costItemID and itemPrice:
|
| | | needItemCnt = itemPrice
|
| | | costItemIndexList, bindCnt, unBindCnt = ItemCommon.GetPackItemBindStateIndexInfo(curPlayer, costItemID, needItemCnt)
|
| | | lackCnt = needItemCnt - bindCnt - unBindCnt
|
| | | if lackCnt > 0:
|
| | | GameWorld.DebugLog("所需消耗道具不足! costItemID=%s,needItemCnt=%s,lackCnt=%s" % (costItemID, needItemCnt, lackCnt))
|
| | | return
|
| | | ItemCommon.DelCostItemByBind(curPlayer, costItemIndexList, bindCnt, unBindCnt, needItemCnt, "BuyItem")
|
| | | |
| | | # 今日购买次数+1
|
| | | if limitBuyCnt > 0:
|
| | | updBuyCnt = min(curBuyCnt + clientBuyCount, ChConfig.Def_UpperLimit_DWord)
|
| | |
| | | syncIDList.append(shopID)
|
| | | if not syncIDList:
|
| | | return
|
| | | clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCShopRefreshItemInfo)
|
| | | clientPack = ChPyNetSendPack.tagSCShopRefreshItemInfo()
|
| | | clientPack.ShopType = shopType
|
| | | clientPack.RefreshCnt = min(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ShopRefreshCnt % shopType), 250)
|
| | | clientPack.ShopIDList = syncIDList
|
| | |
| | | def SyncShopItemBuyCntInfo(curPlayer, syncIDList=[]):
|
| | | ##同步商品购买次数
|
| | |
|
| | | objPool = ObjPool.GetPoolMgr()
|
| | | buyCntList = []
|
| | | if syncIDList:
|
| | | for shopID in syncIDList:
|
| | | buyInfo = objPool.acquire(ChPyNetSendPack.tagSCShopItemBuyCnt)
|
| | | buyInfo = ChPyNetSendPack.tagSCShopItemBuyCnt()
|
| | | buyInfo.ShopID = shopID
|
| | | buyInfo.BuyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ShopBuyCnt % shopID)
|
| | | buyCntList.append(buyInfo)
|
| | |
| | | buyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ShopBuyCnt % shopID)
|
| | | if buyCnt <= 0:
|
| | | continue
|
| | | buyInfo = objPool.acquire(ChPyNetSendPack.tagSCShopItemBuyCnt)
|
| | | buyInfo = ChPyNetSendPack.tagSCShopItemBuyCnt()
|
| | | buyInfo.ShopID = shopID
|
| | | buyInfo.BuyCnt = buyCnt
|
| | | buyCntList.append(buyInfo)
|
| | |
| | | if not buyCntList:
|
| | | return
|
| | |
|
| | | clientPack = objPool.acquire(ChPyNetSendPack.tagSCShopItemBuyCntInfo)
|
| | | clientPack = ChPyNetSendPack.tagSCShopItemBuyCntInfo()
|
| | | clientPack.BuyCntList = buyCntList
|
| | | clientPack.Count = len(clientPack.BuyCntList)
|
| | | NetPackCommon.SendFakePack(curPlayer, clientPack)
|