#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package Player.PlayerFeastLogin # # @todo:½ÚÈյǼ # @author hxp # @date 2021-01-27 # @version 1.0 # # ÏêϸÃèÊö: ½ÚÈյǼ # #------------------------------------------------------------------------------- #"""Version = 2021-01-27 17:00""" #------------------------------------------------------------------------------- import PyGameData import ShareDefine import PlayerControl import IpyGameDataPY import ChPyNetSendPack import ItemControler import IPY_GameWorld import NetPackCommon import GameWorld import ChConfig def OnPlayerLogin(curPlayer): isReset = __CheckPlayerFeastLoginAction(curPlayer) if not isReset: actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastLogin, {}) # »î¶¯ÖÐͬ²½»î¶¯ÐÅÏ¢ if actInfo.get(ShareDefine.ActKey_State): __SetLoginByDayIndex(curPlayer, actInfo) Sync_FeastLoginActionInfo(curPlayer) Sync_FeastLoginPlayerInfo(curPlayer) return def RefreshFeastLoginActionInfo(): ## ÊÕµ½GameServerͬ²½µÄ»î¶¯ÐÅÏ¢£¬Ë¢Ð»ÐÅÏ¢ playerManager = GameWorld.GetPlayerManager() for index in xrange(playerManager.GetPlayerCount()): curPlayer = playerManager.GetPlayerByIndex(index) if curPlayer.GetID() == 0: continue __CheckPlayerFeastLoginAction(curPlayer) return def __CheckPlayerFeastLoginAction(curPlayer): ## ¼ì²éÍæ¼Ò»î¶¯ÐÅÏ¢ playerID = curPlayer.GetPlayerID() actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastLogin, {}) actID = actInfo.get(ShareDefine.ActKey_ID, 0) state = actInfo.get(ShareDefine.ActKey_State, 0) playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastLoginID) # Íæ¼ÒÉíÉϵĻID # »î¶¯ID ÏàͬµÄ»°²»´¦Àí if actID == playerActID: GameWorld.DebugLog("½ÚÈյǼ»î¶¯ID²»±ä£¬²»´¦Àí£¡", curPlayer.GetPlayerID()) if state: if __SetLoginByDayIndex(curPlayer, actInfo): Sync_FeastLoginPlayerInfo(curPlayer) return GameWorld.DebugLog("½ÚÈյǼ»î¶¯ÖØÖÃ! actID=%s,playerActID=%s,state=%s" % (actID, playerActID, state), playerID) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastLoginID, actID) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastLoginState, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastLoginAwardState, 0) if state: __SetLoginByDayIndex(curPlayer, actInfo) Sync_FeastLoginActionInfo(curPlayer) Sync_FeastLoginPlayerInfo(curPlayer) return True def __SetLoginByDayIndex(curPlayer, actInfo): ## ÉèÖÃijһÌìÒѵǼ£¬¿ÉÁì½± dayIndex = actInfo.get(ShareDefine.ActKey_DayIndex, 0) loginState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastLoginState) if loginState & pow(2, dayIndex): return updLoginState = loginState | pow(2, dayIndex) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastLoginState, updLoginState) GameWorld.DebugLog(" ½ÚÈյǼÉèÖÃÌìµÇ¼: dayIndex=%s,loginState=%s,updLoginState=%s" % (dayIndex, loginState, updLoginState)) return True def GetFeastLoginAward(curPlayer, dayNum): ## ÁìÈ¡»î¶¯½±Àø actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastLogin, {}) if not actInfo: return if not actInfo.get(ShareDefine.ActKey_State): GameWorld.DebugLog("·Ç½ÚÈյǼ»î¶¯ÖУ¡") return cfgID = actInfo.get(ShareDefine.ActKey_CfgID) ipyData = IpyGameDataPY.GetIpyGameData("ActFeastLogin", cfgID) if not ipyData: return worldLV = actInfo.get(ShareDefine.ActKey_WorldLV) templateID = GameWorld.GetDictValueByRangeKey(ipyData.GetTemplateIDInfo(), worldLV, 0) if not templateID: return dayIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActFeastLoginAward", templateID) if not dayIpyDataList: return findIpyData = None for dayIpyData in dayIpyDataList: if dayIpyData.GetDayNum() == dayNum: findIpyData = dayIpyData break if not findIpyData: GameWorld.DebugLog("ÕÒ²»µ½¶ÔÓ¦µÄÌì½±Àø! dayNum=%s" % dayNum) return awardIndex = dayNum - 1 loginState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastLoginState) if not loginState & pow(2, awardIndex): GameWorld.DebugLog("½ÚÈյǼ»î¶¯¸ÃÌìδµÇ¼£¬ÎÞ·¨Áì½±£¡dayNum=%s,awardIndex=%s,loginState=%s" % (dayNum, awardIndex, loginState)) return awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastLoginAwardState) if awardRecord & pow(2, awardIndex): GameWorld.DebugLog("½ÚÈյǼ»î¶¯¸ÃÌìÒÑÁì½±£¡dayNum=%s,awardIndex=%s,awardRecord=%s" % (dayNum, awardIndex, awardRecord)) return awardItemList = findIpyData.GetLoginAwardItemList() if not ItemControler.CheckPackSpaceEnough(curPlayer, awardItemList): return updAwardRecord = awardRecord | pow(2, awardIndex) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastLoginAwardState, updAwardRecord) Sync_FeastLoginPlayerInfo(curPlayer) GameWorld.DebugLog("ÁìÈ¡½ÚÈյǼ½±Àø£¡dayNum=%s,awardIndex=%s,awardItemList=%s" % (dayNum, awardIndex, awardItemList)) for itemID, itemCount, isAuctionItem in awardItemList: ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem], event=["FeastLogin", False, {}]) return def Sync_FeastLoginPlayerInfo(curPlayer): ## ֪ͨ»î¶¯Íæ¼ÒÐÅÏ¢ clientPack = ChPyNetSendPack.tagMCFeastLoginPlayerInfo() clientPack.LoginState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastLoginState) clientPack.LoginAward = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastLoginAwardState) NetPackCommon.SendFakePack(curPlayer, clientPack) return def Sync_FeastLoginActionInfo(curPlayer): ## ֪ͨ»î¶¯ÐÅÏ¢ actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastLogin, {}) if not actInfo: return if not actInfo.get(ShareDefine.ActKey_State): return cfgID = actInfo.get(ShareDefine.ActKey_CfgID) ipyData = IpyGameDataPY.GetIpyGameData("ActFeastLogin", cfgID) if not ipyData: return worldLV = actInfo.get(ShareDefine.ActKey_WorldLV) templateID = GameWorld.GetDictValueByRangeKey(ipyData.GetTemplateIDInfo(), worldLV, 0) if not templateID: return dayIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActFeastLoginAward", templateID) if not dayIpyDataList: return openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1 actPack = ChPyNetSendPack.tagMCFeastLoginInfo() actPack.Clear() actPack.StartDate = GameWorld.GetOperationActionDateStr(ipyData.GetStartDate(), openServerDay) actPack.EndtDate = GameWorld.GetOperationActionDateStr(ipyData.GetEndDate(), openServerDay) actPack.DayAwardList = [] for dayIpyData in dayIpyDataList: dayInfo = ChPyNetSendPack.tagMCFeastLoginDayAward() dayInfo.DayNum = dayIpyData.GetDayNum() dayInfo.AwardItemList = [] for itemID, itemCount, isAuctionItem in dayIpyData.GetLoginAwardItemList(): itemInfo = ChPyNetSendPack.tagMCFeastLoginDayAwardItem() itemInfo.ItemID = itemID itemInfo.ItemCount = itemCount itemInfo.IsBind = isAuctionItem dayInfo.AwardItemList.append(itemInfo) dayInfo.AwardCount = len(dayInfo.AwardItemList) actPack.DayAwardList.append(dayInfo) actPack.DayCount = len(actPack.DayAwardList) NetPackCommon.SendFakePack(curPlayer, actPack) return