#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package Player.PlayerFuncSysPrivilege # # @todo:¹¦ÄÜϵͳÌØȨ½±Àø # @author hxp # @date 2021-04-13 # @version 1.0 # # ÏêϸÃèÊö: ¹¦ÄÜϵͳÌØȨ½±Àø # #------------------------------------------------------------------------------- #"""Version = 2021-04-13 16:00""" #------------------------------------------------------------------------------- import GameWorld import IpyGameDataPY import PlayerControl import ItemControler import ChPyNetSendPack import NetPackCommon import IPY_GameWorld import ShareDefine import ChConfig import time def OnPlayerLogin(curPlayer): Sync_FuncSysPrivilege(curPlayer) return #// B2 11 ¼¤»î¹¦ÄÜϵͳÌØȨ½±Àø #tagCMActivateFuncSysPrivilege # #struct tagCMActivateFuncSysPrivilege #{ # tagHead Head; # BYTE ActivateCount; // ¼¤»î¸öÊý # BYTE ActivateFuncSysIDList[ActivateCount]; // ¼¤»î¹¦ÄÜϵͳIDÁÐ±í£¬È«²¿¼¤»îÔòÐèÒª·¢ËùÓÐIDÁбí #}; def OnActivateFuncSysPrivilege(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) activateFuncSysIDList = clientData.ActivateFuncSysIDList GameWorld.DebugLog("ÇëÇ󼤻ÄÜϵͳÌØȨ: %s" % activateFuncSysIDList) curTime = int(time.time()) canActivateList = [] for funcSysID in activateFuncSysIDList: ipyDatList = IpyGameDataPY.GetIpyGameDataList("FuncSysPrivilege", funcSysID) if not ipyDatList: continue actTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FuncSysPrivilegeActTime % funcSysID) if actTime: maxDays = len(ipyDatList) diffDays = GameWorld.GetDiff_Day(curTime, actTime) if diffDays < maxDays: GameWorld.DebugLog(" 䳬¹ý½±Àø×î´óÌ죬²»¿É¼¤»î: funcSysID=%s,diffDays(%s) < maxDays(%s)" % (funcSysID, diffDays, maxDays)) continue isGetAll = True awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FuncSysPrivilegeAward % funcSysID) for ipyData in ipyDatList: dayNum = ipyData.GetDayNum() if not awardState & pow(2, dayNum): isGetAll = False GameWorld.DebugLog(" »¹ÓÐδÁìÈ¡µÄ½±Àø£¬²»¿É¼¤»î: funcSysID=%s,dayNum=%s" % (funcSysID, dayNum)) break if not isGetAll: continue canActivateList.append(funcSysID) GameWorld.DebugLog(" ¿É¼¤»îµÄ¹¦ÄÜϵͳÌØȨ: %s" % canActivateList) if not canActivateList: return needMoney = len(canActivateList) # ¿ªÍ¨1¸ö»¨·Ñ1 infoDict = {ChConfig.Def_Cost_Reason_SonKey:canActivateList} if not PlayerControl.PayMoney(curPlayer, ShareDefine.TYPE_Price_FuncSysPrivilege, needMoney, infoDict=infoDict): GameWorld.DebugLog(" »õ±Ò²»×ã! needMoney=%s" % needMoney) return for funcSysID in canActivateList: PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FuncSysPrivilegeActTime % funcSysID, curTime) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FuncSysPrivilegeAward % funcSysID, 0) Sync_FuncSysPrivilege(curPlayer, canActivateList) return #// B2 12 ÁìÈ¡¹¦ÄÜϵͳÌØȨ½±Àø #tagCMGetFuncSysPrivilegeAward # #struct tagCMGetFuncSysPrivilegeAward #{ # tagHead Head; # BYTE FuncSysID; // ¹¦ÄÜϵͳID # BYTE DayNum; // µÚXÌ죬1ΪµÚ1Ìì #}; def OnGetFuncSysPrivilegeAward(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) funcSysID = clientData.FuncSysID dayNum = clientData.DayNum actTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FuncSysPrivilegeActTime % funcSysID) if not actTime: GameWorld.DebugLog("δ¼¤»î£¬²»¿ÉÁì½±£¡funcSysID=%s" % (funcSysID)) return curTime = int(time.time()) canGetMaxDayNum = GameWorld.GetDiff_Day(curTime, actTime) + 1 if dayNum > canGetMaxDayNum: GameWorld.DebugLog("δ´ïµ½Áì½±Ì죬²»¿ÉÁì½±£¡funcSysID=%s,dayNum(%s) > canGetMaxDayNum(%s), actTime=%s" % (funcSysID, dayNum, canGetMaxDayNum, GameWorld.ChangeTimeNumToStr(actTime))) return awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FuncSysPrivilegeAward % funcSysID) if awardState & pow(2, dayNum): GameWorld.DebugLog("ÒÑÁìÈ¡¹ý¸ÃÌì½±Àø£¡funcSysID=%s,dayNum=%s,awardState=%s" % (funcSysID, dayNum, awardState)) return ipyDatList = IpyGameDataPY.GetIpyGameDataList("FuncSysPrivilege", funcSysID) if not ipyDatList: return findIpyData = None for ipyData in ipyDatList: if ipyData.GetFuncSysID() == funcSysID and ipyData.GetDayNum() == dayNum: findIpyData = ipyData break if not findIpyData: GameWorld.DebugLog("ÕÒ²»µ½¸ÃÌì½±Àø£¡funcSysID=%s,dayNum=%s" % (funcSysID, dayNum)) return awardItemList = findIpyData.GetDayAwardItemInfo() if not ItemControler.CheckPackSpaceEnough(curPlayer, awardItemList): return updAwardState = awardState | pow(2, dayNum) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FuncSysPrivilegeAward % funcSysID, updAwardState) for itemID, itemCount, isAuctionItem in awardItemList: ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem], event=["FuncSysPrivilegeAward", False, {}]) Sync_FuncSysPrivilege(curPlayer, [funcSysID]) return def Sync_FuncSysPrivilege(curPlayer, syncIDList=None): if syncIDList == None: syncIDList = [] ipyDataMgr = IpyGameDataPY.IPY_Data() lastIpyData = ipyDataMgr.GetFuncSysPrivilegeByIndex(ipyDataMgr.GetFuncSysPrivilegeCount() - 1) maxFuncID = lastIpyData.GetFuncSysID() for funcSysID in xrange(1, maxFuncID + 1): if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FuncSysPrivilegeActTime % funcSysID): syncIDList.append(funcSysID) if not syncIDList: return clientPack = ChPyNetSendPack.tagMCFuncSysPrivilegeInfoList() clientPack.PrivilegeInfoList = [] for funcSysID in syncIDList: info = ChPyNetSendPack.tagMCFuncSysPrivilegeInfo() info.FuncSysID = funcSysID info.ActivateTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FuncSysPrivilegeActTime % funcSysID) info.AwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FuncSysPrivilegeAward % funcSysID) clientPack.PrivilegeInfoList.append(info) clientPack.PrivilegeCount = len(clientPack.PrivilegeInfoList) NetPackCommon.SendFakePack(curPlayer, clientPack) return