#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
##@package Player.PlayerFeastRedPacket
|
#
|
# @todo:½ÚÈÕºì°ü
|
# @author hxp
|
# @date 2019-01-29
|
# @version 1.0
|
#
|
# ÏêϸÃèÊö: ½ÚÈÕºì°ü
|
#
|
#-------------------------------------------------------------------------------
|
#"""Version = 2019-01-29 16:00"""
|
#-------------------------------------------------------------------------------
|
|
import GameWorld
|
import PyGameData
|
import PlayerControl
|
import IpyGameDataPY
|
import PlayerSuccess
|
import ChPyNetSendPack
|
import NetPackCommon
|
import ShareDefine
|
import ChConfig
|
|
def DoPlayerOnLogin(curPlayer):
|
if not GetFeastRedPacketState():
|
return
|
isReset = __CheckPlayerFeastRedPacketAction(curPlayer)
|
if not isReset:
|
Sync_FeastRedPackInfo(curPlayer)
|
return
|
|
def RefreshOperationAction_FeastRedPacket():
|
__UpdTodayFeastSuccIDList()
|
|
playerManager = GameWorld.GetPlayerManager()
|
for i in xrange(playerManager.OnlineCount()):
|
curPlayer = playerManager.OnlineAt(i)
|
if not GameWorld.IsNormalPlayer(curPlayer):
|
continue
|
__CheckPlayerFeastRedPacketAction(curPlayer)
|
|
return
|
|
def __UpdTodayFeastSuccIDList():
|
feastRedPacketInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastRedPacket, {})
|
state = feastRedPacketInfo.get(ShareDefine.ActKey_State, 0)
|
dayIndex = feastRedPacketInfo.get(ShareDefine.ActKey_DayIndex, 0)
|
if not state:
|
return
|
|
feastDay = dayIndex + 1
|
feastIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActFeastRedPacketSucc", feastDay)
|
if not feastIpyDataList:
|
return
|
|
succIDList = []
|
for feastIpyData in feastIpyDataList:
|
succIDList += list(feastIpyData.GetFeastSuccIDList())
|
|
GameWorld.DebugLog(" ¸üнñÈÕ½ÚÈÕºì°ü³É¾ÍIDÁбí: %s" % succIDList)
|
IpyGameDataPY.SetConfigEx("TodayFeastSuccIDList", succIDList)
|
return
|
def GetTodayFeastSuccIDList(): return IpyGameDataPY.GetConfigEx("TodayFeastSuccIDList")
|
|
def __CheckPlayerFeastRedPacketAction(curPlayer):
|
## ¼ì²éÍæ¼Ò½ÚÈÕºì°ü»î¶¯Êý¾ÝÐÅÏ¢
|
|
playerID = curPlayer.GetPlayerID()
|
|
feastRedPacketInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastRedPacket, {})
|
curActID = feastRedPacketInfo.get(ShareDefine.ActKey_ID, 0)
|
state = feastRedPacketInfo.get(ShareDefine.ActKey_State, 0)
|
dayIndex = feastRedPacketInfo.get(ShareDefine.ActKey_DayIndex, 0)
|
|
playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastRedPacketActID) # Íæ¼ÒÉíÉϵĻID
|
|
# »î¶¯ID ÏàͬµÄ»°²»´¦Àí
|
if curActID == playerActID:
|
GameWorld.DebugLog("ºì°ü½ÚÈջID²»±ä£¬²»´¦Àí£¡", playerID)
|
return
|
GameWorld.DebugLog("ÖØÖÃÍæ¼Òºì°ü½ÚÈջ! curActID=%s,playerActID=%s,state=%s,dayIndex=%s" % (curActID, playerActID, state, dayIndex), playerID)
|
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastRedPacketActID, curActID)
|
dayCanGrabCount = IpyGameDataPY.GetFuncCfg('FeastRedPacket', 1)
|
# ·ÇµÚÒ»ÌìÖ»ÖØÖÃÿÈÕ´ÎÊý£¬ÇÒ´ÎÊý¿ÉÒÔÀÛ¼Ó
|
if dayIndex == 0:
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastRedPacketGrabMoney, 0)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastRedPacketCanGrabCnt, dayCanGrabCount)
|
GameWorld.DebugLog(" Ê×ÈÕÖØÖôÎÊý¼°½ð¶î!", playerID)
|
else:
|
canAddRemainCnt = IpyGameDataPY.GetFuncCfg('FeastRedPacket', 4)
|
remainGrabCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastRedPacketCanGrabCnt)
|
setTotalCanGrabCnt = (remainGrabCnt + dayCanGrabCount) if canAddRemainCnt else dayCanGrabCount
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastRedPacketCanGrabCnt, setTotalCanGrabCnt)
|
GameWorld.DebugLog(" ·ÇÊ×ÈÕÖØÖôÎÊý! canAddRemainCnt=%s,remainGrabCnt=%s,setTotalCanGrabCnt=%s" % (canAddRemainCnt, remainGrabCnt, setTotalCanGrabCnt), playerID)
|
|
# ÖØÖÃÏà¹Ø³É¾Í
|
resetSuccIDList = []
|
ipyDataMgr = IpyGameDataPY.IPY_Data()
|
for index in xrange(ipyDataMgr.GetActFeastRedPacketSuccCount()):
|
ipyData = ipyDataMgr.GetActFeastRedPacketSuccByIndex(index)
|
feastDay = ipyData.GetFeastDay()
|
feastDayIndex = feastDay - 1
|
if dayIndex == 0 or feastDayIndex == dayIndex:
|
for succID in ipyData.GetFeastSuccIDList():
|
if succID not in resetSuccIDList:
|
resetSuccIDList.append(succID)
|
PlayerSuccess.DoResetSuccessIDList(curPlayer, resetSuccIDList)
|
|
Sync_FeastRedPackInfo(curPlayer)
|
return True
|
|
def GetFeastRedPacketState():
|
## ½ÚÈÕºì°ü»î¶¯×´Ì¬
|
feastRedPacketInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastRedPacket, {})
|
return feastRedPacketInfo.get(ShareDefine.ActKey_State, 0)
|
|
def GetFeastSuccRedPacketCanGrabCnt(curPlayer):
|
## ½ÚÈճɾͺì°ü¿ÉÁìÈ¡´ÎÊý
|
return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastRedPacketCanGrabCnt)
|
|
def GrabFeastRedPacketResult(curPlayer, moneyNum, getWay, isSelf):
|
##ÇÀ½ÚÈÕºì°ü½á¹û
|
grabNum = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastRedPacketGrabMoney)
|
newGrabNum = grabNum + moneyNum
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastRedPacketGrabMoney, newGrabNum)
|
|
#¹ã²¥
|
needSysOSRAllMoneyList = IpyGameDataPY.GetFuncEvalCfg('FeastRedPacket', 3)
|
lastIndex = -1
|
newIndex = -1
|
for i, num in enumerate(needSysOSRAllMoneyList):
|
if grabNum >= num:
|
lastIndex = i
|
if newGrabNum >= num:
|
newIndex = i
|
if newIndex != -1 and newIndex > lastIndex:
|
PlayerControl.WorldNotify(0, 'ActivityOpenRedBag1', [curPlayer.GetName(), newGrabNum])
|
|
if not isSelf and getWay == ShareDefine.RedPackType_FeastSucc: #ÇÀ×Ô¼ºµÄºì°ü²»¿Û´ÎÊý
|
grabCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastRedPacketCanGrabCnt)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastRedPacketCanGrabCnt, max(0, grabCnt - 1))
|
|
Sync_FeastRedPackInfo(curPlayer)
|
return
|
|
def Sync_FeastRedPackInfo(curPlayer):
|
#// AB 25 ½ÚÈÕºì°üÐÅÏ¢ #tagMCFeastRedPackInfo
|
pack = ChPyNetSendPack.tagMCFeastRedPackInfo()
|
pack.MoneyNum = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastRedPacketGrabMoney)
|
pack.GrabCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastRedPacketCanGrabCnt)
|
NetPackCommon.SendFakePack(curPlayer, pack)
|
return
|
|