#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package Player.PlayerActRechargeRebateGold # # @todo:ÀۼƳäÖµ·µÀûÏÉÓñ»î¶¯ # @author hxp # @date 2020-10-15 # @version 1.0 # # ÏêϸÃèÊö: ÀۼƳäÖµ·µÀûÏÉÓñ»î¶¯£¨»î¶¯½áÊøÓʼþ·¢·Å£¬Ö»Ëã×î¸ßÒ»µµ£© # #------------------------------------------------------------------------------- #"""Version = 2020-10-15 12:00""" #------------------------------------------------------------------------------- import ChConfig import ShareDefine import PlayerControl import PyGameData import GameWorld import NetPackCommon import ChPyNetSendPack import IpyGameDataPY def OnPlayerLogin(curPlayer): isReset = __CheckPlayerRechargeRebateGoldAction(curPlayer) if not isReset: actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_RechargeRebateGold, {}) # »î¶¯ÖÐͬ²½»î¶¯ÐÅÏ¢ if actInfo.get(ShareDefine.ActKey_State): Sync_RechargeRebateGoldActionInfo(curPlayer) Sync_RechargeRebateGoldPlayerInfo(curPlayer) return def RefreshRechargeRebateGoldActionInfo(): ## ÊÕµ½GameServerͬ²½µÄ»î¶¯ÐÅÏ¢£¬Ë¢Ð»ÐÅÏ¢ playerManager = GameWorld.GetPlayerManager() for index in xrange(playerManager.GetPlayerCount()): curPlayer = playerManager.GetPlayerByIndex(index) if not GameWorld.IsNormalPlayer(curPlayer): continue __CheckPlayerRechargeRebateGoldAction(curPlayer) return def __CheckPlayerRechargeRebateGoldAction(curPlayer): ## ¼ì²éÍæ¼ÒÀۼƳäÖµ»î¶¯Êý¾ÝÐÅÏ¢ playerID = curPlayer.GetPlayerID() actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_RechargeRebateGold, {}) actID = actInfo.get(ShareDefine.ActKey_ID, 0) state = actInfo.get(ShareDefine.ActKey_State, 0) playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RechargeRebateGoldID) # Íæ¼ÒÉíÉϵĻID templateID = GetTemplateID(actInfo.get(ShareDefine.ActKey_CfgID, 0), actInfo.get(ShareDefine.ActKey_DayIndex, 0)) playerTemplateID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RechargeRebateGoldTemplateID) # »î¶¯ID ÏàͬµÄ»°²»´¦Àí if actID == playerActID: GameWorld.DebugLog("ÀۼƳäÖµ·µÀûÏÉÓñ»î¶¯ID²»±ä£¬²»´¦Àí£¡", playerID) if state: if playerTemplateID != templateID and templateID: PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RechargeRebateGoldTemplateID, templateID) GameWorld.DebugLog(" »î¶¯Ä£°åID±ä¸ü£¬¸üÐÂÍæ¼ÒÉíÉÏÄ£°åID¼Ç¼£¡playerTemplateID=%s,updTemplateID=%s" % (playerTemplateID, templateID), playerID) return GameWorld.DebugLog("ÀۼƳäÖµ·µÀûÏÉÓñ»î¶¯ÖØÖÃ! actID=%s,playerActID=%s,state=%s" % (actID, playerActID, state), playerID) totalRMB = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RechargeRebateGoldRMB) if playerActID and playerTemplateID and totalRMB > 0: __SendRebateGoldMail(curPlayer, playerTemplateID, totalRMB) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RechargeRebateGoldID, actID) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RechargeRebateGoldTemplateID, templateID) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RechargeRebateGoldRMB, 0) Sync_RechargeRebateGoldActionInfo(curPlayer) Sync_RechargeRebateGoldPlayerInfo(curPlayer) return True def GetTemplateID(cfgID, dayIndex): if cfgID == None or dayIndex == None: return 0 ipyData = IpyGameDataPY.GetIpyGameData("ActRechargeRebateGold", cfgID) if not ipyData: return 0 templateIDList = ipyData.GetTemplateIDList() templateID = templateIDList[-1] if dayIndex >= len(templateIDList) else templateIDList[dayIndex] return templateID def __SendRebateGoldMail(curPlayer, playerTemplateID, totalRMB): ## ·¢ËÍ·µÀû½±ÀøÓʼþ£¬È¡×î´ó½±Àøµµ·¢½±Àø playerID = curPlayer.GetPlayerID() GameWorld.DebugLog("ÀۼƳäÖµ·µÀûÏÉÓñ·¢Ëͽ±ÀøÓʼþ! playerTemplateID=%s,totalRMB=%s" % (playerTemplateID, totalRMB), playerID) ipyDataList = IpyGameDataPY.GetIpyGameDataList("RechargeRebateGoldTemplate", playerTemplateID) if not ipyDataList: return rebateIpyData = None for ipyData in ipyDataList: rmbMin = ipyData.GetRMBMin() rmbMax = ipyData.GetRMBMax() if (rmbMin <= totalRMB <= rmbMax) or (rmbMin <= totalRMB and rmbMax == 0): rebateIpyData = ipyData break if not rebateIpyData: GameWorld.DebugLog("Íæ¼ÒÎÞ·µÀûÏÉÓñ½±Àø!", playerID) return rebateRate = rebateIpyData.GetRebateRate() addItemList = [] paramList = [totalRMB, rebateRate] gold = min(int(totalRMB * rebateRate / 100.0), ShareDefine.Def_UpperLimit_DWord) GameWorld.DebugLog(" ·µÀûÏÉÓñ°Ù·Ö±È=%s%%, gold=%s" % (rebateRate, gold), playerID) PlayerControl.SendMailByKey("RechargeRebateGold", [playerID], addItemList, paramList, gold) return def AddRechargeRebateGoldRMB(curPlayer, addRMB): ## Ôö¼Ó»î¶¯ÒÑÀۼƳäÖµRMB£¬ Ö÷¸É·ÖÖ§¼Ç¼µÄÊÇÏÉÓñ£¬Ö»ËãÖ±³ä£¬Ö÷¸ÉûÓÐRMB¶ÔÓ¦±ÈÀýÅäÖã¬Ö±½Ó¼Ç¼ÏÉÓñ actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_RechargeRebateGold, {}) if not actInfo: return if not actInfo.get(ShareDefine.ActKey_State): return totalRMB = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RechargeRebateGoldRMB) + addRMB PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RechargeRebateGoldRMB, totalRMB) GameWorld.DebugLog("ÀۼƳäÖµ·µÀûÏÉÓñ»î¶¯Ôö¼ÓÍæ¼ÒÀۼƳäÖµRMB: addRMB=%s,totalRMB=%s" % (addRMB, totalRMB), curPlayer.GetPlayerID()) Sync_RechargeRebateGoldPlayerInfo(curPlayer) return def Sync_RechargeRebateGoldPlayerInfo(curPlayer): ## ֪ͨÀۼƳäÖµ·µÀûÏÉÓñ»î¶¯Íæ¼ÒÊý¾ÝÐÅÏ¢ playerActInfo = ChPyNetSendPack.tagMCRechargeRebateGoldPlayerInfo() playerActInfo.RechargeRMBTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RechargeRebateGoldRMB) NetPackCommon.SendFakePack(curPlayer, playerActInfo) return def Sync_RechargeRebateGoldActionInfo(curPlayer): ## ֪ͨÀۼƳäÖµ·µÀûÏÉÓñ»î¶¯ÐÅÏ¢ actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_RechargeRebateGold, {}) if not actInfo: return if not actInfo.get(ShareDefine.ActKey_State): return cfgID = actInfo.get(ShareDefine.ActKey_CfgID) ipyData = IpyGameDataPY.GetIpyGameData("ActRechargeRebateGold", cfgID) if not ipyData: return templateIDList = ipyData.GetTemplateIDList() if not templateIDList: return startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData) actInfo = ChPyNetSendPack.tagMCActRechargeRebateGoldInfo() actInfo.StartDate = startDateStr actInfo.EndtDate = endDateStr actInfo.LimitLV = ipyData.GetLVLimit() actInfo.IsDayReset = ipyData.GetIsDayReset() actInfo.RebateDayInfo = [] for templateID in templateIDList: ipyDataList = IpyGameDataPY.GetIpyGameDataList("RechargeRebateGoldTemplate", templateID) if not ipyDataList: continue dayInfo = ChPyNetSendPack.tagMCActRechargeRebateDay() dayInfo.RebateInfo = [] for dayIpyData in ipyDataList: rebateInfo = ChPyNetSendPack.tagMCActRechargeRebate() rebateInfo.RMBMin = dayIpyData.GetRMBMin() rebateInfo.RMBMax = dayIpyData.GetRMBMax() rebateInfo.RebateRate = dayIpyData.GetRebateRate() dayInfo.RebateInfo.append(rebateInfo) dayInfo.Rebates = len(dayInfo.RebateInfo) actInfo.RebateDayInfo.append(dayInfo) actInfo.RebateDays = len(actInfo.RebateDayInfo) NetPackCommon.SendFakePack(curPlayer, actInfo) return