#!/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