#!/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
|
import CommFunc
|
import PlayerCoin
|
|
def OnPlayerLogin(curPlayer):
|
__CheckPlayerDailyGiftbagAction(curPlayer)
|
return
|
|
def RefreshDailyGiftbagActionInfo():
|
## ÊÕµ½GameServerͬ²½µÄ»î¶¯ÐÅÏ¢£¬Ë¢Ð»ÐÅÏ¢
|
playerManager = GameWorld.GetPlayerManager()
|
for index in xrange(playerManager.GetPlayerCount()):
|
curPlayer = playerManager.GetPlayerByIndex(index)
|
if not GameWorld.IsNormalPlayer(curPlayer):
|
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
|
actWorldLV = actInfo.get(ShareDefine.ActKey_WorldLV, 0)
|
giftItemList = __GetJobItemList(giftbagIpyData.GetGiftItemList(), curPlayer.GetJob(), actWorldLV)
|
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:
|
PlayerCoin.ExchangePayCoin(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:
|
eventName = "DailyGiftbag" if not isCTG else ChConfig.ItemGive_CTG
|
ItemControler.GivePlayerItemOrMail(curPlayer, giftItemList, "", event=[eventName, True, addDRDict])
|
|
SyncDailyGiftbagBuyCount(curPlayer, giftbagType)
|
return True
|
|
def OnGetDailyFreeGiftbag(curPlayer):
|
## ÁìȡÿÈÕÃâ·ÑÖ±¹ºÀñ°ü
|
giftbagID = 0 # Ãâ·ÑÀñ°üID¹Ì¶¨Îª0
|
addDRDict = {}
|
OnPlayerOrderDailyGiftbag(curPlayer, giftbagID, addDRDict, False)
|
return
|
|
def __GetJobItemList(giftItemInfo, job, worldLV):
|
jobItemList = []
|
if isinstance(giftItemInfo, dict):
|
itemList = GameWorld.GetDictValueByRangeKey(giftItemInfo, worldLV, [])
|
else:
|
itemList = giftItemInfo
|
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
|
|
actWorldLV = actInfo.get(ShareDefine.ActKey_WorldLV, 0)
|
# È¡Íæ¼ÒAPPID£¬»ì·þʹÓÃ
|
appID = GameWorld.GetPlayerPlatform(curPlayer)
|
|
packInfo = ChPyNetSendPack.tagMCDailyGiftbagInfo()
|
packInfo.GiftbagInfo = []
|
packInfo.LimitLV = cfgIpyData.GetLVLimit()
|
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 CommFunc.RMBToCoin(orderIpyData.GetPayRMBNum())
|
giftBag.ItemInfo = []
|
for itemID, itemCount, isBind in __GetJobItemList(giftIpyData.GetGiftItemList(), curPlayer.GetJob(), actWorldLV):
|
item = ChPyNetSendPack.tagMCDailyGiftbagItem()
|
item.ItemID = itemID
|
item.ItemCount = itemCount
|
giftBag.ItemInfo.append(item)
|
giftBag.GiftItemCount = len(giftBag.ItemInfo)
|
giftBag.Discount = giftIpyData.GetDiscount()
|
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))
|
|