#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
#-------------------------------------------------------------------------------
|
#
|
##@package Player.PlayerWeekParty
|
#
|
# @todo:ÖÜ¿ñ»¶
|
# @author xdh
|
# @date 2018-07-12 16:50
|
# @version 1.0
|
#
|
#
|
# ÏêϸÃèÊö: ÖÜ¿ñ»¶
|
#
|
#---------------------------------------------------------------------
|
"""Version = 2018-07-12 16:50"""
|
#---------------------------------------------------------------------
|
|
import IPY_GameWorld
|
import GameWorld
|
import ChConfig
|
import IpyGameDataPY
|
import PlayerControl
|
import ItemControler
|
import ChPyNetSendPack
|
import Operate_EquipStone
|
import PlayerFeastWeekParty
|
import DataRecordPack
|
import PlayerGodWeapon
|
import NetPackCommon
|
import ShareDefine
|
import PyGameData
|
import ItemCommon
|
|
|
def OnLogin(curPlayer):
|
isReset = __CheckPlayerWeekPartyAction(curPlayer)
|
if not isReset:
|
actCostRebateInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_WeekParty, {})
|
# »î¶¯ÖÐͬ²½»î¶¯ÐÅÏ¢
|
SyncWeekPartyInfo(curPlayer)
|
if actCostRebateInfo.get(ShareDefine.ActKey_State):
|
AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Login, 1, False, False, False)
|
SyncWeekPartyPlayerInfo(curPlayer)
|
return
|
|
|
def RefreshOperationAction_WeekParty():
|
playerManager = GameWorld.GetPlayerManager()
|
for i in xrange(playerManager.GetPlayerCount()):
|
curPlayer = playerManager.GetPlayerByIndex(i)
|
if not GameWorld.IsNormalPlayer(curPlayer):
|
continue
|
__CheckPlayerWeekPartyAction(curPlayer)
|
return
|
|
|
def __CheckPlayerWeekPartyAction(curPlayer):
|
## ¼ì²éÍæ¼ÒÖÜ¿ñ»¶»î¶¯Êý¾ÝÐÅÏ¢
|
playerID = curPlayer.GetPlayerID()
|
|
actWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_WeekParty, {})
|
state = actWeekPartyInfo.get(ShareDefine.ActKey_State, 0)
|
actID = actWeekPartyInfo.get(ShareDefine.ActKey_ID, 0)
|
cfgID = actWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)
|
playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyActID, 0, ChConfig.Def_PDictType_WeekParty) # Íæ¼ÒÉíÉϵĻID
|
playerWeekPartyID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyID, 0, ChConfig.Def_PDictType_WeekParty) # Íæ¼ÒÉíÉϵĻÅäÖÃID
|
playerWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyWorldLV, 0, ChConfig.Def_PDictType_WeekParty) # Íæ¼ÒÉíÉϵĻÊÀ½çµÈ¼¶
|
# »î¶¯ID ÏàͬµÄ»°²»´¦Àí
|
if actID == playerActID:
|
GameWorld.DebugLog("ÖÜ¿ñ»¶»î¶¯ID²»±ä£¬²»´¦Àí£¡playerActID=%s" % playerActID, curPlayer.GetPlayerID())
|
if state:
|
CheckWeekPartyActionCnt(curPlayer, True)
|
return
|
# δÁìÈ¡µÄ½±ÀøÓʼþ·¢·Å
|
if playerWeekPartyID:
|
__SendWeekPartyMail(curPlayer, playerWeekPartyID, playerWorldLV)
|
|
GameWorld.DebugLog('ÖÜ¿ñ»¶»î¶¯ÖØÖÃ!')
|
curPlayer.ClearNomalDict(ChConfig.Def_PDictType_WeekParty)
|
|
worldLV = actWeekPartyInfo.get(ShareDefine.ActKey_WorldLV, 0)
|
GameWorld.DebugLog("ÖÜ¿ñ»¶±ä¸ü! state=%s,actID=%s,cfgID=%s,playerWeekPartyID=%s,worldLV=%s" % (state, actID, cfgID, playerWeekPartyID, worldLV), playerID)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyActID, actID, ChConfig.Def_PDictType_WeekParty)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyID, cfgID, ChConfig.Def_PDictType_WeekParty)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyWorldLV, worldLV, ChConfig.Def_PDictType_WeekParty)
|
if state:
|
CheckWeekPartyActionCnt(curPlayer, False)
|
SyncWeekPartyInfo(curPlayer)
|
SyncWeekPartyPlayerInfo(curPlayer)
|
|
return True
|
|
def __SendWeekPartyMail(curPlayer, cfgID, playerWorldLV):
|
# δÁìÈ¡µÄ½±ÀøÓʼþ·¢·Å
|
actBossIpyData = IpyGameDataPY.GetIpyGameData("ActWeekParty", cfgID)
|
if not actBossIpyData:
|
return
|
templateIDList = actBossIpyData.GetTemplateID()
|
if not templateIDList:
|
return
|
|
totalItemDict = {}
|
for day, tidList in enumerate(templateIDList):
|
for tid in tidList:
|
ipyData = IpyGameDataPY.GetIpyGameData('WeekParty', tid)
|
if not ipyData:
|
continue
|
singleTimes = ipyData.GetSingleTimes()
|
curTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyCurTimes % (day, tid), 0, ChConfig.Def_PDictType_WeekParty)
|
gotTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyGotTimes % (day, tid), 0, ChConfig.Def_PDictType_WeekParty)
|
canGotCnt = (curTimes - gotTimes) / singleTimes
|
if not canGotCnt:
|
continue
|
itemDict = __GetAwardItem(curPlayer, ipyData, playerWorldLV, canGotCnt)
|
GameWorld.AddDictValue(totalItemDict, itemDict)
|
#»ý·Ö½±Àø
|
pointAwardInfo = __GetPointAwardInfo(actBossIpyData.GetPointAward(), playerWorldLV)
|
for day, awardDict in pointAwardInfo.items():
|
pointList = awardDict.keys()
|
pointList.sort()
|
for i, point in enumerate(pointList):
|
curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyPoint % day, 0, ChConfig.Def_PDictType_WeekParty)
|
if curPoint < point:
|
continue
|
awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyAwardRecord % day, 0, ChConfig.Def_PDictType_WeekParty)
|
if awardRecord & pow(2, i):
|
continue
|
itemList = awardDict[point]
|
for itemID, itemCnt, isBind in itemList:
|
totalItemDict[itemID] = totalItemDict.get(itemID, 0) + itemCnt
|
DataRecordPack.DR_WeekPartyPoint(curPlayer, day, point)
|
if not totalItemDict:
|
return
|
totalItemList = [[itemID, itemCnt, 1] for itemID, itemCnt in totalItemDict.items()]
|
PlayerControl.SendMailByKey('SecondWeekReward', [curPlayer.GetID()], totalItemList)
|
return
|
|
def __GetPointAwardInfo(cfgPointAwardInfo, worldLV):
|
return GameWorld.GetDictValueByRangeKey(cfgPointAwardInfo, worldLV, {})
|
|
def AddWeekPartyActionCnt(curPlayer, actionID, addCnt=1, isAdd=True, isCompatible=False, isSync=True):
|
'''Ôö¼ÓÖÜ¿ñ»¶Ïà¹Ø»î¶¯Íê³É´ÎÊý'''
|
PlayerFeastWeekParty.AddFeastWeekPartyActionCnt(curPlayer, actionID, addCnt, isAdd, isCompatible, isSync)
|
#ÅжϻÊÇ·ñ¿ªÆô
|
if not addCnt:
|
return
|
actWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_WeekParty, {})
|
state = actWeekPartyInfo.get(ShareDefine.ActKey_State, 0)
|
cfgID = actWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)
|
|
if not cfgID:
|
return
|
if not state:
|
return
|
|
actBossIpyData = IpyGameDataPY.GetIpyGameData("ActWeekParty", cfgID)
|
if not actBossIpyData:
|
return
|
templateIDList = actBossIpyData.GetTemplateID()
|
dayIndex = actWeekPartyInfo.get(ShareDefine.ActKey_DayIndex, 0)
|
if dayIndex >= len(templateIDList):
|
return
|
if actionID in [ChConfig.Def_WPAct_Login]:
|
addDayIndexList = [dayIndex]
|
else:
|
addDayIndexList = range(dayIndex + 1)
|
for dayIndex in addDayIndexList:
|
dayTidList = templateIDList[dayIndex]
|
findTidList = []
|
for tid in dayTidList:
|
if tid / 100 == actionID:
|
findTidList.append(tid)
|
if not findTidList:
|
continue
|
for findTid in findTidList:
|
ipyData = IpyGameDataPY.GetIpyGameData('WeekParty', findTid)
|
if not ipyData:
|
continue
|
totalTimes = ipyData.GetTotalTimes()
|
curTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyCurTimes % (dayIndex, findTid), 0, ChConfig.Def_PDictType_WeekParty)
|
if isAdd:
|
curAddCnt = addCnt if totalTimes == 0 else min(totalTimes - curTimes, addCnt)
|
if curAddCnt <= 0:
|
continue
|
updTimes = curTimes + curAddCnt
|
else:
|
if not isCompatible and addCnt != totalTimes:
|
continue
|
updTimes = min(addCnt, totalTimes)
|
realAddCnt = updTimes - curTimes
|
if realAddCnt <= 0:
|
continue
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyCurTimes % (dayIndex, findTid), updTimes, ChConfig.Def_PDictType_WeekParty)
|
#¼Ó»ý·Ö
|
singleTimes = ipyData.GetSingleTimes()
|
addPoint = (curTimes % singleTimes + realAddCnt) / singleTimes * ipyData.GetPoint()
|
curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyPoint % dayIndex, 0, ChConfig.Def_PDictType_WeekParty)
|
updPoint = curPoint + addPoint
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyPoint % dayIndex, updPoint, ChConfig.Def_PDictType_WeekParty)
|
GameWorld.DebugLog(' Ôö¼ÓÖÜ¿ñ»¶Ïà¹Ø»î¶¯Íê³É´ÎÊý dayIndex=%s, findTid=%s, curTimes=%s, updTimes=%s, realAddCnt=%s,addPoint=%s' % (dayIndex, findTid, curTimes, updTimes, realAddCnt, addPoint))
|
if isSync:
|
SyncWeekPartyPlayerInfo(curPlayer, dayIndex, findTid)
|
return True
|
|
def CheckWeekPartyActionCnt(curPlayer, isSync):
|
## ͬ²½»î¶¯×´Ì¬Ê±ÐèÒª´¥·¢µÄ
|
|
# Áé³è¼¤»î
|
petDataPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptPet)
|
for petDataIndex in range(petDataPack.GetCount()):
|
petItem = petDataPack.GetAt(petDataIndex)
|
if petItem.IsEmpty():
|
continue
|
petNPCID = petItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)
|
AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Pet, petNPCID, False, isSync=isSync)
|
|
# ³öÕ½ÉñÊÞ
|
ipyDataMgr = IpyGameDataPY.IPY_Data()
|
for i in xrange(ipyDataMgr.GetDogzCount()):
|
ipyData = ipyDataMgr.GetDogzByIndex(i)
|
if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_DogzFightState, i):
|
AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Dogz, ipyData.GetDogzID(), False, isSync=isSync)
|
|
# ´©´÷ijƷÖÊ·ûÓ¡
|
runeHoleCnt = IpyGameDataPY.GetFuncCfg("RuneUnlock", 4)
|
for holeNum in xrange(1, runeHoleCnt + 1):
|
runeData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Rune_Data % holeNum, 0)
|
if not runeData:
|
continue
|
runeItemID = ItemControler.GetRuneItemID(runeData)
|
itemData = GameWorld.GetGameData().GetItemByTypeID(runeItemID)
|
if not itemData:
|
continue
|
itemColor = itemData.GetItemColor()
|
AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Rune, itemColor, False, isSync=isSync)
|
|
AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Login, 1, False, False, isSync)
|
passlv = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_TrialTower_PassLV)
|
AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Tower, passlv, False, True, isSync)
|
AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Stone, Operate_EquipStone.GetTotalStoneLV(curPlayer), False, True, isSync)
|
AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_GodWeapon, PlayerGodWeapon.GetGodWeaponTotalLV(curPlayer), False, True, isSync)
|
return
|
|
def GetWeekPartyActionAward(curPlayer, day, templateID):
|
'''ÁìÈ¡ÖÜ¿ñ»¶»î¶¯½±Àø'''
|
templateID = GameWorld.ToIntDef(templateID, 0)
|
actWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_WeekParty, {})
|
state = actWeekPartyInfo.get(ShareDefine.ActKey_State, 0)
|
cfgID = actWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)
|
if not state or not cfgID:
|
return
|
actBossIpyData = IpyGameDataPY.GetIpyGameData("ActWeekParty", cfgID)
|
if not actBossIpyData:
|
return
|
templateIDList = actBossIpyData.GetTemplateID()
|
if not templateIDList:
|
return
|
if day >= len(templateIDList):
|
return
|
dayTempIDList = templateIDList[day]
|
if templateID not in dayTempIDList:
|
return
|
ipyData = IpyGameDataPY.GetIpyGameData('WeekParty', templateID)
|
if not ipyData:
|
return
|
singleTimes = ipyData.GetSingleTimes()
|
curTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyCurTimes % (day, templateID), 0, ChConfig.Def_PDictType_WeekParty)
|
gotTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyGotTimes % (day, templateID), 0, ChConfig.Def_PDictType_WeekParty)
|
if curTimes - gotTimes < singleTimes:
|
return
|
|
#¸ø½±Àø
|
playerWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyWorldLV, 0, ChConfig.Def_PDictType_WeekParty)
|
awardDict = __GetAwardItem(curPlayer, ipyData, playerWorldLV)
|
# ¼ì²é±³°ü
|
needSpace = len(awardDict)
|
packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
|
if needSpace > packSpace:
|
PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")
|
return
|
#¸üдÎÊý ÿ´ÎÁì½±Ö»ÁìÒ»´Î
|
newGotTimes = gotTimes + singleTimes
|
|
#GameWorld.Log(' actionID=%s,curTimes=%s,gotTimes=%s,singleTimes=%s,newGotTimes=%s'%(actionID, curTimes, gotTimes,singleTimes, newGotTimes))
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyGotTimes % (day, templateID), newGotTimes, ChConfig.Def_PDictType_WeekParty)
|
for itemID, itemCnt in awardDict.items():
|
ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem])
|
ItemControler.NotifyGiveAwardInfo(curPlayer, awardDict, "WeekParty")
|
SyncWeekPartyPlayerInfo(curPlayer, day, templateID)
|
return
|
|
|
def GetWeekPartyPointAward(curPlayer, day, getPoint):
|
##ÁìÈ¡ÖÜ¿ñ»¶»ý·Ö½±Àø
|
getPoint = GameWorld.ToIntDef(getPoint, 0)
|
actWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_WeekParty, {})
|
state = actWeekPartyInfo.get(ShareDefine.ActKey_State, 0)
|
cfgID = actWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)
|
if not state or not cfgID:
|
return
|
actBossIpyData = IpyGameDataPY.GetIpyGameData("ActWeekParty", cfgID)
|
if not actBossIpyData:
|
return
|
curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyPoint % day, 0, ChConfig.Def_PDictType_WeekParty)
|
if curPoint < getPoint:
|
return
|
worldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyWorldLV, 0, ChConfig.Def_PDictType_WeekParty)
|
pointAwardInfo = __GetPointAwardInfo(actBossIpyData.GetPointAward(), worldLV)
|
pointAwardDict = pointAwardInfo.get(day, {})
|
pointList = pointAwardDict.keys()
|
pointList.sort()
|
if getPoint not in pointList:
|
return
|
getIndex = pointList.index(getPoint)
|
awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyAwardRecord % day, 0, ChConfig.Def_PDictType_WeekParty)
|
if awardRecord & pow(2, getIndex):
|
GameWorld.Log(' ÁìÈ¡ÖÜ¿ñ»¶»ý·Ö½±Àø£¬ ÒÑÁìÈ¡ day=%s, getPoint=%s' % (day, getPoint))
|
return
|
itemList = pointAwardDict[getPoint]
|
needSpace = len(itemList)
|
packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
|
if needSpace > packSpace:
|
PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")
|
return
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyAwardRecord % day, awardRecord | pow(2, getIndex), ChConfig.Def_PDictType_WeekParty)
|
for itemID, itemCnt, isBind in itemList:
|
ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem])
|
ItemControler.NotifyGiveAwardInfo(curPlayer, itemList, "WeekParty")
|
SyncWeekPartyPlayerInfo(curPlayer, day)
|
DataRecordPack.DR_WeekPartyPoint(curPlayer, day, getPoint)
|
return
|
|
|
def __GetAwardItem(curPlayer, ipyData, worldLV, times=1):
|
awardDict = {}
|
awardItemList = __GetAwardItemListByJob(curPlayer, ipyData.GetReward(), worldLV)
|
for itemID, itemCnt, isbind in awardItemList:
|
if not itemID or not itemCnt:
|
continue
|
awardDict[itemID] = awardDict.get(itemID, 0) + itemCnt * times
|
|
return awardDict
|
|
def __GetAwardItemListByJob(curPlayer, rewardItemInfo, worldLV):
|
## ¸ù¾ÝÖ°Òµ»ñÈ¡¶ÔÓ¦½±Àø
|
if not rewardItemInfo:
|
return []
|
if isinstance(rewardItemInfo, dict):
|
keyList = rewardItemInfo.keys()
|
# ÅäÊÀ½çµÈ¼¶·¶Î§µÄ
|
if isinstance(keyList[0], tuple) and len(keyList[0]) == 2:
|
return __GetAwardItemListByJob(curPlayer, GameWorld.GetDictValueByRangeKey(rewardItemInfo, worldLV), worldLV)
|
return rewardItemInfo.get(curPlayer.GetJob(), [])
|
return rewardItemInfo
|
|
def SyncWeekPartyPlayerInfo(curPlayer, day= -1, templateID= -1):
|
#֪ͨµ±Ç°´ÎÊý¡¢ÒÑÁì´ÎÊý
|
actWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_WeekParty, {})
|
state = actWeekPartyInfo.get(ShareDefine.ActKey_State, 0)
|
cfgID = actWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)
|
if not state or not cfgID:
|
return
|
actBossIpyData = IpyGameDataPY.GetIpyGameData("ActWeekParty", cfgID)
|
if not actBossIpyData:
|
return
|
templateIDList = actBossIpyData.GetTemplateID()
|
if not templateIDList:
|
return
|
if day != -1:
|
if day >= len(templateIDList):
|
return
|
syncDayList = [day]
|
else:
|
syncDayList = range(len(templateIDList))
|
|
packData = ChPyNetSendPack.tagMCWeekPartyPlayerInfo()
|
packData.DayInfoList = []
|
for cday in syncDayList:
|
tiemInfo = ChPyNetSendPack.tagMCWeekPartyDayPlayerInfo()
|
tiemInfo.DayIndex = cday
|
tiemInfo.Point = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyPoint % cday, 0, ChConfig.Def_PDictType_WeekParty)
|
tiemInfo.AwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyAwardRecord % cday, 0, ChConfig.Def_PDictType_WeekParty)
|
tiemInfo.TaskList = []
|
for tID in templateIDList[cday]:
|
if templateID != -1 and tID != templateID:
|
continue
|
tipyData = IpyGameDataPY.GetIpyGameData('WeekParty', tID)
|
if not tipyData:
|
continue
|
taskInfo = ChPyNetSendPack.tagMCWeekPartyTaskInfo()
|
taskInfo.TemplateID = tID
|
taskInfo.CurTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyCurTimes % (cday, tID), 0, ChConfig.Def_PDictType_WeekParty)
|
taskInfo.GotTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyGotTimes % (cday, tID), 0, ChConfig.Def_PDictType_WeekParty)
|
tiemInfo.TaskList.append(taskInfo)
|
tiemInfo.ACount = len(tiemInfo.TaskList)
|
packData.DayInfoList.append(tiemInfo)
|
packData.Count = len(packData.DayInfoList)
|
NetPackCommon.SendFakePack(curPlayer, packData)
|
return
|
|
|
def SyncWeekPartyInfo(curPlayer):
|
actWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_WeekParty, {})
|
state = actWeekPartyInfo.get(ShareDefine.ActKey_State, 0)
|
cfgID = actWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)
|
if not cfgID:
|
return
|
actBossIpyData = IpyGameDataPY.GetIpyGameData("ActWeekParty", cfgID)
|
if not actBossIpyData:
|
return
|
templateIDList = actBossIpyData.GetTemplateID()
|
if not templateIDList:
|
return
|
worldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyWorldLV, 0, ChConfig.Def_PDictType_WeekParty)
|
pointAwardDict = __GetPointAwardInfo(actBossIpyData.GetPointAward(), worldLV)
|
startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(actBossIpyData)
|
actInfo = ChPyNetSendPack.tagMCWeekPartyInfo()
|
actInfo.Clear()
|
actInfo.StartDate = startDateStr
|
actInfo.EndtDate = endDateStr
|
actInfo.AdvanceMinutes = actBossIpyData.GetAdvanceMinutes()
|
actInfo.IsDayReset = actBossIpyData.GetIsDayReset()
|
actInfo.ResetType = actBossIpyData.GetResetType()
|
actInfo.LimitLV = actBossIpyData.GetLVLimit()
|
actInfo.DayInfoList = []
|
tidList = []
|
for day, dayActList in enumerate(templateIDList):
|
dayInfo = ChPyNetSendPack.tagMCWeekPartyDayInfo()
|
dayInfo.TemplateList = dayActList
|
dayInfo.ActCnt = len(dayActList)
|
for tid in dayActList:
|
if tid not in tidList:
|
tidList.append(tid)
|
dayInfo.PItemInfo = []
|
for point, itemList in pointAwardDict.get(day, {}).items():
|
for itemID, itemCnt, isBind in itemList:
|
awardItem = ChPyNetSendPack.tagMCWeekPartyItem()
|
awardItem.ItemID = itemID
|
awardItem.ItemCnt = itemCnt
|
awardItem.IsBind = isBind
|
awardItem.NeedPoint = point
|
dayInfo.PItemInfo.append(awardItem)
|
dayInfo.PCount = len(dayInfo.PItemInfo)
|
actInfo.DayInfoList.append(dayInfo)
|
actInfo.DayCnt = len(actInfo.DayInfoList)
|
actInfo.ActionInfo = []
|
for tid in tidList:
|
ipyData = IpyGameDataPY.GetIpyGameData('WeekParty', tid)
|
if not ipyData:
|
GameWorld.ErrLog(' ÖÜ¿ñ»¶Ä£°å±íÕÒ²»µ½Ä£°å%s' % tid)
|
continue
|
tInfo = ChPyNetSendPack.tagMCWeekPartyAction()
|
tInfo.TemplateID = tid
|
tInfo.ActionType = ipyData.GetActionType()
|
tInfo.TotalTimes = ipyData.GetTotalTimes()
|
tInfo.SingleTimes = ipyData.GetSingleTimes()
|
tInfo.Point = ipyData.GetPoint()
|
tInfo.ItemInfo = []
|
awardItemList = __GetAwardItemListByJob(curPlayer, ipyData.GetReward(), worldLV)
|
for itemID, itemCnt, isBind in awardItemList:
|
awardItem = ChPyNetSendPack.tagMCWeekPartyItem()
|
awardItem.ItemID = itemID
|
awardItem.ItemCnt = itemCnt
|
awardItem.IsBind = isBind
|
awardItem.NeedPoint = 0
|
tInfo.ItemInfo.append(awardItem)
|
tInfo.Count = len(tInfo.ItemInfo)
|
actInfo.ActionInfo.append(tInfo)
|
actInfo.TCount = len(actInfo.ActionInfo)
|
NetPackCommon.SendFakePack(curPlayer, actInfo)
|
return
|