#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package Player.PlayerActManyDayRecharge # # @todo:¶àÈÕÁ¬³ä # @author hxp # @date 2021-03-12 # @version 1.0 # # ÏêϸÃèÊö: ¶àÈÕÁ¬³ä # #------------------------------------------------------------------------------- #"""Version = 2021-03-12 15:00""" #------------------------------------------------------------------------------- import PyGameData import ShareDefine import PlayerControl import IpyGameDataPY import ItemControler import ChPyNetSendPack import DataRecordPack import IPY_GameWorld import NetPackCommon import GameWorld import ChConfig import CommFunc Max_ActDays = 7 # Ö§³Ö×î´ó»î¶¯³ÖÐøÌì Max_AwardKeyNum = 3 # Ö§³Ö×î´óÁì½±¼Ç¼keyÊý def GetTemplateID(cfgID): if not cfgID: return 0 ipyData = IpyGameDataPY.GetIpyGameData("ActManyDayRecharge", cfgID) if not ipyData: return 0 return ipyData.GetTemplateID() def OnPlayerLogin(curPlayer): for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_ManyDayRecharge, {}).values(): actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0) isReset = __CheckPlayerManyDayRechargeAction(curPlayer, actNum) if not isReset: # »î¶¯ÖÐͬ²½»î¶¯ÐÅÏ¢ if actInfo.get(ShareDefine.ActKey_State): Sync_ManyDayRechargeActionInfo(curPlayer, actNum) Sync_ManyDayRechargePlayerInfo(curPlayer, actNum) return def RefreshManyDayRechargeActionInfo(actNum): ## ÊÕµ½GameServerͬ²½µÄ»î¶¯ÐÅÏ¢£¬Ë¢Ð»ÐÅÏ¢ playerManager = GameWorld.GetPlayerManager() for index in xrange(playerManager.GetPlayerCount()): curPlayer = playerManager.GetPlayerByIndex(index) if not GameWorld.IsNormalPlayer(curPlayer): continue __CheckPlayerManyDayRechargeAction(curPlayer, actNum) return def __CheckPlayerManyDayRechargeAction(curPlayer, actNum): ## ¼ì²éÍæ¼Ò»î¶¯Êý¾ÝÐÅÏ¢ playerID = curPlayer.GetPlayerID() actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_ManyDayRecharge, actNum) actID = actInfo.get(ShareDefine.ActKey_ID, 0) state = actInfo.get(ShareDefine.ActKey_State, 0) templateID = GetTemplateID(actInfo.get(ShareDefine.ActKey_CfgID, 0)) playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ManyDayRechargeID % actNum) # Íæ¼ÒÉíÉϵĻID playerTemplateID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ManyDayRechargeTempID % actNum) # »î¶¯ID ÏàͬµÄ»°²»´¦Àí if actID == playerActID: GameWorld.DebugLog("¶àÈÕÁ¬³ä»î¶¯ID²»±ä£¬²»´¦Àí£¡actNum=%s,actID=%s" % (actNum, actID), playerID) if state and templateID and templateID != playerTemplateID: PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ManyDayRechargeTempID % actNum, templateID) Sync_ManyDayRechargePlayerInfo(curPlayer, actNum) GameWorld.DebugLog(" »î¶¯ÖиüÐÂÄ£°åID: templateID=%s" % templateID, playerID) return actWorldLV = actInfo.get(ShareDefine.ActKey_WorldLV, 0) playerWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ManyDayRechargeWorldLV % actNum) GameWorld.DebugLog("¶àÈÕÁ¬³äÖØÖÃ! actNum=%s,actID=%s,playerActID=%s,state=%s,templateID=%s,playerTemplateID=%s" % (actNum, actID, playerActID, state, templateID, playerTemplateID), playerID) # δÁìÈ¡µÄ½±ÀøÓʼþ·¢·Å __SendManyDayRechargeMail(curPlayer, playerTemplateID, playerWorldLV, actNum) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ManyDayRechargeID % actNum, actID) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ManyDayRechargeTempID % actNum, templateID) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ManyDayRechargeWorldLV % actNum, actWorldLV) for i in xrange(Max_AwardKeyNum): PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ManyDayRechargeAward % (actNum, i), 0) for dayIndex in xrange(Max_ActDays): PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ManyDayRechargeValue % (actNum, dayIndex), 0) Sync_ManyDayRechargeActionInfo(curPlayer, actNum) Sync_ManyDayRechargePlayerInfo(curPlayer, actNum) return True def __SendManyDayRechargeMail(curPlayer, playerTemplateID, playerWorldLV, actNum): # δÁìÈ¡µÄ½±ÀøÓʼþ·¢·Å if not playerTemplateID: return ipyDataList = IpyGameDataPY.GetIpyGameDataList("ActManyDayRechargeAward", playerTemplateID) if not ipyDataList: return playerID = curPlayer.GetPlayerID() batchPlayerIDList, batchAddItemList, batchParamList = [], [], [] for ipyData in ipyDataList: awardIndex = ipyData.GetAwardIndex() if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_ManyDayRechargeAward, awardIndex, True, [actNum]): continue needRechargeValue = CommFunc.RMBToCoin(ipyData.GetNeedRMB()) needDays = ipyData.GetNeedDays() finishDays = 0 for dayIndex in xrange(Max_ActDays): rechargeValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ManyDayRechargeValue % (actNum, dayIndex)) if rechargeValue >= needRechargeValue: finishDays += 1 if finishDays < needDays: continue GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_ManyDayRechargeAward, awardIndex, 1, True, [actNum]) awardItemList = GameWorld.GetDictValueByRangeKey(ipyData.GetAwardItemInfo(), playerWorldLV, []) batchPlayerIDList.append([playerID]) batchAddItemList.append(awardItemList) batchParamList.append([needDays, str(ipyData.GetNeedRMB())]) GameWorld.Log("¶àÈÕÁ¬³ä»î¶¯²¹·¢½±Àø! actNum=%s,playerTemplateID=%s,awardIndex=%s" % (actNum, playerTemplateID, awardIndex)) if batchPlayerIDList: actType = actNum / 10 PlayerControl.SendMailBatch("ManyDayRechargeMail%s" % actType, batchPlayerIDList, batchAddItemList, batchParamList) return def AddManyDayRechargeValue(curPlayer, addValue): if addValue <= 0: return for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_ManyDayRecharge, {}).values(): actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0) dayIndex = actInfo.get(ShareDefine.ActKey_DayIndex, 0) if not actInfo.get(ShareDefine.ActKey_State): GameWorld.DebugLog("¶àÈÕÁ¬³ä»î¶¯µ±Ç°Î´¿ªÆô! actNum=%s" % actNum) continue curRechargeValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ManyDayRechargeValue % (actNum, dayIndex)) updRechargeValue = min(curRechargeValue + addValue, ChConfig.Def_UpperLimit_DWord) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ManyDayRechargeValue % (actNum, dayIndex), updRechargeValue) Sync_ManyDayRechargePlayerInfo(curPlayer, actNum) GameWorld.DebugLog("¶àÈÕÁ¬³ä³äÖµ»î¶¯Ôö¼Ó³äÖµ¶î¶È: actNum=%s,dayIndex=%s,curRechargeValue=%s,addValue=%s,updRechargeValue=%s" % (actNum, dayIndex, curRechargeValue, addValue, updRechargeValue), curPlayer.GetPlayerID()) return def OnGetManyDayRechargeAward(curPlayer, awardIndex, actNum): '''OnGetManyDayRechargeAward @param awardIndex: ½±ÀøË÷Òý @param actNum: »î¶¯±àºÅ£¬Èç11 »ò 12 ´ú±í²»Í¬µÄ»î¶¯ ''' actNum = GameWorld.ToIntDef(actNum, 0) if actNum <= 0: GameWorld.DebugLog("ûÓÐÖ¸¶¨ÁìÈ¡µÄ»î¶¯±àºÅ! actNum=%s" % actNum) return playerID = curPlayer.GetPlayerID() actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_ManyDayRecharge, actNum) state = actInfo.get(ShareDefine.ActKey_State, 0) templateID = GetTemplateID(actInfo.get(ShareDefine.ActKey_CfgID, 0)) if not state or not templateID: GameWorld.DebugLog("¸Ã¶àÈÕÁ¬³ä»î¶¯·Ç»î¶¯ÖУ¬ÎÞ·¨Áì½±£¡actNum=%s,state=%s,templateID=%s" % (actNum, state, templateID), playerID) return if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_ManyDayRechargeAward, awardIndex, True, [actNum]): GameWorld.DebugLog("ÒѾ­ÁìÈ¡¹ý¸Ã¶àÈÕÁ¬³ä»î¶¯½±Àø! actNum=%s,awardIndex=%s" % (actNum, awardIndex), playerID) return ipyDataList = IpyGameDataPY.GetIpyGameDataList("ActManyDayRechargeAward", templateID) if not ipyDataList: return awardIpyData = None for ipyData in ipyDataList: if ipyData.GetAwardIndex() == awardIndex: awardIpyData = ipyData break if not awardIpyData: GameWorld.DebugLog("ÕÒ²»µ½¸Ã¶àÈÕÁ¬³ä»î¶¯µµÎ»Ë÷Òý½±Àø!actNum=%s,templateID=%s,awardIndex=%s" % (actNum, templateID, awardIndex), playerID) return needRechargeValue = CommFunc.RMBToCoin(awardIpyData.GetNeedRMB()) needDays = awardIpyData.GetNeedDays() dayRechargeValueDict = {} finishDays = 0 for dayIndex in xrange(Max_ActDays): rechargeValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ManyDayRechargeValue % (actNum, dayIndex)) if rechargeValue >= needRechargeValue: finishDays += 1 if rechargeValue: dayRechargeValueDict[dayIndex] = rechargeValue if finishDays < needDays: GameWorld.DebugLog("δÂú×ã¶àÈÕÁ¬³äµµ´ÎÁ¬³äÌìÊý! templateID=%s,needRechargeValue=%s,needDays(%s) > finishDays(%s), %s" % (templateID, needRechargeValue, needDays, finishDays, dayRechargeValueDict), playerID) return actWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ManyDayRechargeWorldLV % actNum) awardItemList = GameWorld.GetDictValueByRangeKey(ipyData.GetAwardItemInfo(), actWorldLV, []) if not ItemControler.CheckPackSpaceEnough(curPlayer, awardItemList): return GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_ManyDayRechargeAward, awardIndex, 1, True, [actNum]) Sync_ManyDayRechargePlayerInfo(curPlayer, actNum) notifyKey = awardIpyData.GetNotifyKey() GameWorld.DebugLog(" ÁìÈ¡³É¹¦! actNum=%s,templateID=%s,awardIndex=%s,needRechargeValue=%s,needDays=%s %s" % (actNum, templateID, awardIndex, needRechargeValue, needDays, dayRechargeValueDict)) if notifyKey: PlayerControl.WorldNotify(0, notifyKey, [curPlayer.GetPlayerName(), needDays, str(awardIpyData.GetNeedRMB())]) for itemID, itemCount, isAuctionItem in awardItemList: ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem]) addDataDict = {"TemplateID":templateID, "AwardIndex":awardIndex, "ItemList":str(awardItemList), "ActNum":actNum} DataRecordPack.DR_FuncGiveItem(curPlayer, "ManyDayRechargeAward", addDataDict) return def Sync_ManyDayRechargePlayerInfo(curPlayer, actNum): ## Í¨ÖªÍæ¼ÒÊý¾ÝÐÅÏ¢ playerActInfo = ChPyNetSendPack.tagMCActManyDayRechargePlayerInfo() playerActInfo.ActNum = actNum playerActInfo.DayRechargeValues = [] for dayIndex in xrange(Max_ActDays): rechargeValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ManyDayRechargeValue % (actNum, dayIndex)) playerActInfo.DayRechargeValues.append(rechargeValue) playerActInfo.Days = len(playerActInfo.DayRechargeValues) for i in xrange(Max_AwardKeyNum): playerActInfo.AwardRecord.append(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ManyDayRechargeAward % (actNum, i))) playerActInfo.RecordCount = len(playerActInfo.AwardRecord) NetPackCommon.SendFakePack(curPlayer, playerActInfo) return def Sync_ManyDayRechargeActionInfo(curPlayer, actNum): ## ֪ͨ»î¶¯ÐÅÏ¢ actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_ManyDayRecharge, actNum) if not actInfo.get(ShareDefine.ActKey_State): return cfgID = actInfo.get(ShareDefine.ActKey_CfgID) ipyData = IpyGameDataPY.GetIpyGameData("ActManyDayRecharge", cfgID) if not ipyData: return templateID = ipyData.GetTemplateID() if not templateID: return actWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ManyDayRechargeWorldLV % actNum) startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData) clientPack = ChPyNetSendPack.tagMCActManyDayRechargeInfo() clientPack.ActNum = actNum clientPack.StartDate = startDateStr clientPack.EndtDate = endDateStr clientPack.LimitLV = ipyData.GetLVLimit() clientPack.AwardList = [] ipyDataList = IpyGameDataPY.GetIpyGameDataList("ActManyDayRechargeAward", templateID) if ipyDataList: for awardIpyData in ipyDataList: awardInfo = ChPyNetSendPack.tagMCActManyDayRechargeAward() awardInfo.AwardIndex = awardIpyData.GetAwardIndex() awardInfo.NeedRecharge = CommFunc.RMBToCoin(awardIpyData.GetNeedRMB()) awardInfo.NeedDays = awardIpyData.GetNeedDays() awardInfo.AwardItemList = [] awardItemList = GameWorld.GetDictValueByRangeKey(awardIpyData.GetAwardItemInfo(), actWorldLV, []) for itemID, itemCount, isBind in awardItemList: awardItem = ChPyNetSendPack.tagMCActManyDayRechargeItem() awardItem.ItemID = itemID awardItem.ItemCount = itemCount awardItem.IsBind = isBind awardInfo.AwardItemList.append(awardItem) awardInfo.AwardItemCount = len(awardInfo.AwardItemList) clientPack.AwardList.append(awardInfo) clientPack.AwardCount = len(clientPack.AwardList) NetPackCommon.SendFakePack(curPlayer, clientPack) return