#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
##@package Player.PlayerActRechargePrize
|
#
|
# @todo:³äÖµ·µÀû»î¶¯
|
# @author hxp
|
# @date 2020-09-23
|
# @version 1.0
|
#
|
# ÏêϸÃèÊö: ³äÖµ·µÀû»î¶¯
|
#
|
#-------------------------------------------------------------------------------
|
#"""Version = 2020-09-23 12:00"""
|
#-------------------------------------------------------------------------------
|
|
import PyGameData
|
import ShareDefine
|
import PlayerControl
|
import IpyGameDataPY
|
import ChPyNetSendPack
|
import NetPackCommon
|
import GameWorld
|
import ChConfig
|
|
def __GetActTemplateID(cfgID, dayIndex):
|
if cfgID == None or dayIndex == None:
|
return 0
|
ipyData = IpyGameDataPY.GetIpyGameData("ActRechargePrize", cfgID)
|
if not ipyData:
|
return 0
|
templateIDList = ipyData.GetTemplateIDList()
|
templateID = templateIDList[-1] if dayIndex >= len(templateIDList) else templateIDList[dayIndex]
|
return templateID
|
|
def OnPlayerLogin(curPlayer):
|
isReset = __CheckPlayerRechargePrizeAction(curPlayer)
|
if not isReset:
|
actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_RechargePrize, {})
|
# »î¶¯ÖÐͬ²½»î¶¯ÐÅÏ¢
|
if actInfo.get(ShareDefine.ActKey_State):
|
Sync_RechargePrizeActionInfo(curPlayer)
|
Sync_RechargePrizeInfo(curPlayer)
|
return
|
|
def RefreshRechargePrizeActionInfo():
|
## ÊÕµ½GameServerͬ²½µÄ»î¶¯ÐÅÏ¢£¬Ë¢Ð»ÐÅÏ¢
|
playerManager = GameWorld.GetPlayerManager()
|
for index in xrange(playerManager.GetPlayerCount()):
|
curPlayer = playerManager.GetPlayerByIndex(index)
|
if not GameWorld.IsNormalPlayer(curPlayer):
|
continue
|
__CheckPlayerRechargePrizeAction(curPlayer)
|
return
|
|
def __CheckPlayerRechargePrizeAction(curPlayer):
|
## ¼ì²éÍæ¼Ò³äÖµ·µÀû»î¶¯Êý¾ÝÐÅÏ¢
|
|
playerID = curPlayer.GetPlayerID()
|
|
actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_RechargePrize, {})
|
actID = actInfo.get(ShareDefine.ActKey_ID, 0)
|
state = actInfo.get(ShareDefine.ActKey_State, 0)
|
|
playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RechargePrizeID) # Íæ¼ÒÉíÉϵĻID
|
|
# »î¶¯ID ÏàͬµÄ»°²»´¦Àí
|
if actID == playerActID:
|
GameWorld.DebugLog("³äÖµ·µÀû»î¶¯ID²»±ä£¬²»´¦Àí£¡", curPlayer.GetPlayerID())
|
return
|
GameWorld.DebugLog("³äÖµ·µÀûÖØÖÃ! actID=%s,playerActID=%s,state=%s" % (actID, playerActID, state), playerID)
|
|
templateID = __GetActTemplateID(actInfo.get(ShareDefine.ActKey_CfgID, 0), actInfo.get(ShareDefine.ActKey_DayIndex, 0))
|
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RechargePrizeID, actID)
|
|
ipyDataList = IpyGameDataPY.GetIpyGameDataList("RechargePrizeTemplate", templateID)
|
if ipyDataList:
|
for ipyData in ipyDataList:
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RechargePrizeCount % ipyData.GetCTGID(), 0)
|
|
Sync_RechargePrizeActionInfo(curPlayer)
|
Sync_RechargePrizeInfo(curPlayer)
|
return True
|
|
def DoAddPlayerActRechargePrizeCount(curPlayer, ctgID):
|
## Ö´ÐÐÔö¼ÓÍæ¼Ò³äÖµ·µÀû»î¶¯·µÀû´ÎÊý
|
# @return: ·µÀûÏÉÓñ Êý
|
actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_RechargePrize, {})
|
if not actInfo:
|
GameWorld.DebugLog("ÎÞ³äÖµ·µÀû»î¶¯")
|
return
|
if not actInfo.get(ShareDefine.ActKey_State):
|
GameWorld.DebugLog("³äÖµ·µÀû»î¶¯Î´¿ªÆô")
|
return
|
templateID = __GetActTemplateID(actInfo.get(ShareDefine.ActKey_CfgID, 0), actInfo.get(ShareDefine.ActKey_DayIndex, 0))
|
actIpyData = None
|
ipyDataList = IpyGameDataPY.GetIpyGameDataList("RechargePrizeTemplate", templateID)
|
if ipyDataList:
|
for ipyData in ipyDataList:
|
if ctgID == ipyData.GetCTGID():
|
actIpyData = ipyData
|
break
|
if not actIpyData:
|
GameWorld.DebugLog("¸Ã³äÖµIDÎÞ³äÖµ·µÀû! ctgID=%s,templateID=%s" % (ctgID, templateID))
|
return
|
|
prizeCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RechargePrizeCount % ctgID)
|
prizeCountLimit = actIpyData.GetPrizeCountLimit()
|
if prizeCount >= prizeCountLimit:
|
GameWorld.DebugLog("ÒÑ´ï³äÖµ·µÀû×î´ó´ÎÊý: ctgID=%s,prizeCount=%s" % (ctgID, prizeCount))
|
return
|
prizeCount += 1
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RechargePrizeCount % ctgID, prizeCount)
|
goldPrize = actIpyData.GetGoldPrize()
|
|
Sync_RechargePrizeInfo(curPlayer, ctgID)
|
GameWorld.DebugLog("³äÖµ·µÀû: ctgID=%s,goldPrize=%s,prizeCount=%s" % (ctgID, goldPrize, prizeCount))
|
return goldPrize
|
|
def Sync_RechargePrizeInfo(curPlayer, ctgID=0):
|
## ֪ͨ³äÖµ·µÀûÍæ¼ÒÊý¾ÝÐÅÏ¢
|
actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_RechargePrize, {})
|
if not actInfo:
|
return
|
if not actInfo.get(ShareDefine.ActKey_State):
|
return
|
templateID = __GetActTemplateID(actInfo.get(ShareDefine.ActKey_CfgID, 0), actInfo.get(ShareDefine.ActKey_DayIndex, 0))
|
|
if ctgID > 0:
|
syncCTGIDList = [ctgID]
|
else:
|
syncCTGIDList = []
|
ipyDataList = IpyGameDataPY.GetIpyGameDataList("RechargePrizeTemplate", templateID)
|
if ipyDataList:
|
for ipyData in ipyDataList:
|
syncCTGIDList.append(ipyData.GetCTGID())
|
|
playerActInfo = ChPyNetSendPack.tagMCRechargePrizePlayerInfo()
|
playerActInfo.PlayerInfoList = []
|
for syncCTGID in syncCTGIDList:
|
prizeInfo = ChPyNetSendPack.tagMCRechargePrizeInfo()
|
prizeInfo.CTGID = syncCTGID
|
prizeInfo.PrizeCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RechargePrizeCount % syncCTGID)
|
playerActInfo.PlayerInfoList.append(prizeInfo)
|
playerActInfo.Count = len(playerActInfo.PlayerInfoList)
|
NetPackCommon.SendFakePack(curPlayer, playerActInfo)
|
return
|
|
def Sync_RechargePrizeActionInfo(curPlayer):
|
## ֪ͨ³äÖµ·µÀû»î¶¯ÐÅÏ¢
|
actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_RechargePrize, {})
|
if not actInfo:
|
return
|
|
if not actInfo.get(ShareDefine.ActKey_State):
|
return
|
|
cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
|
ipyData = IpyGameDataPY.GetIpyGameData("ActRechargePrize", cfgID)
|
if not ipyData:
|
return
|
|
templateIDList = ipyData.GetTemplateIDList()
|
if not templateIDList:
|
return
|
startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData)
|
actInfo = ChPyNetSendPack.tagMCActRechargePrizeInfo()
|
actInfo.StartDate = startDateStr
|
actInfo.EndtDate = endDateStr
|
actInfo.LimitLV = ipyData.GetLVLimit()
|
actInfo.IsDayReset = ipyData.GetIsDayReset()
|
actInfo.PrizeDayInfo = []
|
for templateID in templateIDList:
|
ipyDataList = IpyGameDataPY.GetIpyGameDataList("RechargePrizeTemplate", templateID)
|
if not ipyDataList:
|
continue
|
|
dayInfo = ChPyNetSendPack.tagMCActRechargePrizeDay()
|
dayInfo.PrizeInfo = []
|
for prizeData in ipyDataList:
|
prize = ChPyNetSendPack.tagMCActRechargePrize()
|
prize.CTGID = prizeData.GetCTGID()
|
prize.GoldPrize = prizeData.GetGoldPrize()
|
prize.PrizeCountLimit = prizeData.GetPrizeCountLimit()
|
dayInfo.PrizeInfo.append(prize)
|
|
dayInfo.Prizes = len(dayInfo.PrizeInfo)
|
actInfo.PrizeDayInfo.append(dayInfo)
|
|
actInfo.PrizeDays = len(actInfo.PrizeDayInfo)
|
NetPackCommon.SendFakePack(curPlayer, actInfo)
|
return
|
|
|