#!/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
|
|
|