#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package Player.PlayerActLoginNew # # @todo:µÇ¼»î¶¯-Р# @author hxp # @date 2024-06-03 # @version 1.0 # # ÏêϸÃèÊö: µÇ¼»î¶¯-Р# #------------------------------------------------------------------------------- #"""Version = 2024-06-03 18: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): for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_ActLoginNew, {}).values(): actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0) isReset = __CheckPlayerActLoginAction(curPlayer, actNum) # »î¶¯ÖÐͬ²½»î¶¯ÐÅÏ¢ if not isReset and actInfo.get(ShareDefine.ActKey_State): Sync_ActLoginActionInfo(curPlayer, actNum) Sync_ActLoginPlayerInfo(curPlayer, actNum) return def RefreshActLoginActionInfo(actNum): ## ÊÕµ½GameServerͬ²½µÄ»î¶¯ÐÅÏ¢£¬Ë¢Ð»ÐÅÏ¢ playerManager = GameWorld.GetPlayerManager() for index in xrange(playerManager.GetPlayerCount()): curPlayer = playerManager.GetPlayerByIndex(index) if not GameWorld.IsNormalPlayer(curPlayer): continue __CheckPlayerActLoginAction(curPlayer, actNum) return def __CheckPlayerActLoginAction(curPlayer, actNum): ## ¼ì²éÍæ»î¶¯Êý¾ÝÐÅÏ¢ playerID = curPlayer.GetPlayerID() actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_ActLoginNew, actNum) actID = actInfo.get(ShareDefine.ActKey_ID, 0) state = actInfo.get(ShareDefine.ActKey_State, 0) playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLoginNewID % actNum) # Íæ¼ÒÉíÉϵĻID # »î¶¯ID ÏàͬµÄ»°²»´¦Àí if actID == playerActID: GameWorld.DebugLog("еǼ»î¶¯ID²»±ä£¬²»´¦Àí£¡ actNum=%s,actID=%s" % (actNum, actID), curPlayer.GetPlayerID()) return GameWorld.DebugLog("еǼ»î¶¯ÖØÖÃ! actNum=%s,actID=%s,playerActID=%s,state=%s" % (actNum, actID, playerActID, state), playerID) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActLoginNewID % actNum, actID) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActLoginNewAward % actNum, 0) if state: Sync_ActLoginActionInfo(curPlayer, actNum) Sync_ActLoginPlayerInfo(curPlayer, actNum) return True def OnGetActLoginAward(curPlayer, dayNum, actNum): ## ÁìÈ¡»î¶¯½±Àø actNum = GameWorld.ToIntDef(actNum) actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_ActLoginNew, actNum) if not actInfo: GameWorld.DebugLog("ûÓиõǼ»î¶¯£¡ actNum=%s" % actNum) return if not actInfo.get(ShareDefine.ActKey_State): GameWorld.DebugLog("·ÇµÇ¼»î¶¯ÖУ¡ actNum=%s" % actNum) return curDayNum = actInfo.get(ShareDefine.ActKey_DayIndex) + 1 if curDayNum < dayNum: GameWorld.DebugLog("δµ½¿ÉÁìÈ¡µÄµÇ¼Ì죬ÎÞ·¨ÁìÈ¡£¡ actNum=%s,curDayNum=%s < %s" % (actNum, curDayNum, dayNum)) return cfgID = actInfo.get(ShareDefine.ActKey_CfgID) ipyData = IpyGameDataPY.GetIpyGameData("ActLoginNew", cfgID) if not ipyData: return templateID = ipyData.GetTemplateID() dayIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActLoginNewAward", templateID) if not dayIpyDataList: return findIpyData = None for dayIpyData in dayIpyDataList: if dayIpyData.GetDayNum() == dayNum: findIpyData = dayIpyData break if not findIpyData: GameWorld.DebugLog("ÕÒ²»µ½¶ÔÓ¦µÇ¼Ìì½±Àø! actNum=%s,cfgID=%s,templateID=%s,dayNum=%s" % (actNum, cfgID, templateID, dayNum)) return awardItemList = findIpyData.GetLoginAwardItemList() awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLoginNewAward % actNum) if awardRecord & pow(2, dayNum): GameWorld.DebugLog("µÇ¼»î¶¯¸ÃÌìÒÑÁì½±£¡ actNum=%s,dayNum=%s,awardRecord=%s" % (actNum, dayNum, awardRecord)) return # ÅжϷǵ±ÌìÐ貹ǩ costMoneyType, costMoneyValue = 0, 0 if curDayNum != dayNum and ipyData.GetRepSignCostMoneyInfo(): costMoneyType, costMoneyValue = ipyData.GetRepSignCostMoneyInfo() if costMoneyType and costMoneyValue and not PlayerControl.HaveMoney(curPlayer, costMoneyType, costMoneyValue): return if not ItemControler.CheckPackSpaceEnough(curPlayer, awardItemList): return if costMoneyType and costMoneyValue: PlayerControl.PayMoney(curPlayer, costMoneyType, costMoneyValue, "ActLoginNew", {"actNum":actNum, "dayNum":dayNum}) updAwardRecord = awardRecord | pow(2, dayNum) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ActLoginNewAward % actNum, updAwardRecord) Sync_ActLoginPlayerInfo(curPlayer, actNum) GameWorld.DebugLog("ÁìÈ¡µÇ¼»î¶¯½±Àø£¡ actNum=%s,dayNum=%s,awardItemList=%s" % (actNum, dayNum, awardItemList)) for itemID, itemCount, isAuctionItem in awardItemList: ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem], event=["ActLoginNew", False, {}]) return def Sync_ActLoginPlayerInfo(curPlayer, actNum): ## ֪ͨ»î¶¯Íæ¼ÒÐÅÏ¢ clientPack = ChPyNetSendPack.tagMCActLoginPlayerInfoNew() clientPack.ActNum = actNum clientPack.LoginAward = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActLoginNewAward % actNum) NetPackCommon.SendFakePack(curPlayer, clientPack) return def Sync_ActLoginActionInfo(curPlayer, actNum): ## ֪ͨ»î¶¯ÐÅÏ¢ actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_ActLoginNew, actNum) if not actInfo: return if not actInfo.get(ShareDefine.ActKey_State): return cfgID = actInfo.get(ShareDefine.ActKey_CfgID) ipyData = IpyGameDataPY.GetIpyGameData("ActLoginNew", cfgID) if not ipyData: return moneyType, moneyValue = ipyData.GetRepSignCostMoneyInfo() templateID = ipyData.GetTemplateID() dayIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActLoginNewAward", templateID) if not dayIpyDataList: return startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData) actPack = ChPyNetSendPack.tagMCActLoginNew() actPack.Clear() actPack.ActNum = actNum actPack.StartDate = startDateStr actPack.EndtDate = endDateStr actPack.LimitLV = ipyData.GetLVLimit() actPack.RepSignMoneyType = moneyType actPack.RepSignMoneyValue = moneyValue actPack.AwardDayList = [] for dayIpyData in dayIpyDataList: dayInfo = ChPyNetSendPack.tagMCActLoginNewDay() dayInfo.DayNum = dayIpyData.GetDayNum() dayInfo.AwardItemList = [] for itemID, itemCount, isAuctionItem in dayIpyData.GetLoginAwardItemList(): itemInfo = ChPyNetSendPack.tagMCActLoginNewItem() itemInfo.ItemID = itemID itemInfo.ItemCount = itemCount itemInfo.IsBind = isAuctionItem dayInfo.AwardItemList.append(itemInfo) dayInfo.Count = len(dayInfo.AwardItemList) actPack.AwardDayList.append(dayInfo) actPack.DayCount = len(actPack.AwardDayList) NetPackCommon.SendFakePack(curPlayer, actPack) return