| | |
| | | import PlayerControl
|
| | | import ItemControler
|
| | | import ChPyNetSendPack
|
| | | import Operate_EquipStone
|
| | | import PlayerFeastWeekParty
|
| | | import DataRecordPack
|
| | | import PlayerGodWeapon
|
| | | import NetPackCommon
|
| | | import ShareDefine
|
| | | import PyGameData
|
| | |
| | | state = actWeekPartyInfo.get(ShareDefine.ActKey_State, 0)
|
| | | cfgID = actWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)
|
| | | passlv = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_TrialTower_PassLV)
|
| | | isOk = AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Tower, passlv, False)
|
| | | AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Login, 1)
|
| | | |
| | | playerWeekPartyID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyID, 0, ChConfig.Def_PDictType_WeekParty) # 玩家身上的活动ID
|
| | | if not isOk and state:
|
| | | if state:
|
| | | #每天都要触发
|
| | | AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Tower, passlv, False, True, False)
|
| | | AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Login, 1, False, False)
|
| | | AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Stone, Operate_EquipStone.GetTotalStoneLV(curPlayer), False, True, False)
|
| | | AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_GodWeapon, PlayerGodWeapon.GetGodWeaponTotalLV(curPlayer), False, True, False)
|
| | | SyncWeekPartyPlayerInfo(curPlayer)
|
| | | playerWeekPartyID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyID, 0, ChConfig.Def_PDictType_WeekParty) # 玩家身上的活动ID
|
| | | # 活动ID 相同的话不处理
|
| | | if cfgID == playerWeekPartyID:
|
| | | #GameWorld.DebugLog("周狂欢活动ID不变,不处理!", curPlayer.GetPlayerID())
|
| | | return
|
| | | CheckWeekPartyActionCnt(curPlayer)
|
| | | # 未领取的奖励邮件发放
|
| | | __SendWeekPartyMail(curPlayer, playerWeekPartyID)
|
| | | if playerWeekPartyID:
|
| | | __SendWeekPartyMail(curPlayer, playerWeekPartyID)
|
| | |
|
| | | if not cfgID:
|
| | | GameWorld.DebugLog(' 周狂欢活动重置!')
|
| | |
| | | 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()]
|
| | |
| | | return
|
| | |
|
| | |
|
| | | def AddWeekPartyActionCnt(curPlayer, actionID, addCnt=1, isAdd=True):
|
| | | def AddWeekPartyActionCnt(curPlayer, actionID, addCnt=1, isAdd=True, isCompatible=False, isSync=True):
|
| | | '''增加周狂欢相关活动完成次数'''
|
| | | PlayerFeastWeekParty.AddFeastWeekPartyActionCnt(curPlayer, actionID, addCnt, isAdd, isCompatible, isSync)
|
| | | #判断活动是否开启
|
| | | if not addCnt:
|
| | | return
|
| | |
| | | state = actWeekPartyInfo.get(ShareDefine.ActKey_State, 0)
|
| | | cfgID = actWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)
|
| | |
|
| | | if not state or not cfgID:
|
| | | if not cfgID:
|
| | | return
|
| | | if not state and actionID not in ChConfig.AheadFinishWPActList:
|
| | | return
|
| | | |
| | | actBossIpyData = IpyGameDataPY.GetIpyGameData("ActWeekParty", cfgID)
|
| | | if not actBossIpyData:
|
| | | return
|
| | |
| | | dayIndex = actWeekPartyInfo.get(ShareDefine.ActKey_DayIndex, 0)
|
| | | if dayIndex >= len(templateIDList):
|
| | | return
|
| | | if actionID in ChConfig.AheadFinishWPActList:
|
| | | isFind = False
|
| | | for day, dayTidList in enumerate(templateIDList[dayIndex:]):
|
| | | findTid = 0
|
| | | for tid in dayTidList:
|
| | | if tid / 100 == actionID:
|
| | | findTid = tid
|
| | | break
|
| | | if not findTid:
|
| | | continue
|
| | | ipyData = IpyGameDataPY.GetIpyGameData('WeekParty', findTid)
|
| | | if not ipyData:
|
| | | continue
|
| | | totalTimes = ipyData.GetTotalTimes()
|
| | | if addCnt != totalTimes:
|
| | | continue
|
| | | dayIndex = day + dayIndex
|
| | | isFind = True
|
| | | break
|
| | | if not isFind:
|
| | | return
|
| | | |
| | | dayTidList = templateIDList[dayIndex]
|
| | | findTid = 0
|
| | | findTidList = []
|
| | | for tid in dayTidList:
|
| | | if tid / 100 == actionID:
|
| | | findTid = tid
|
| | | break
|
| | | if not findTid:
|
| | | findTidList.append(tid)
|
| | | if not findTidList:
|
| | | return
|
| | | ipyData = IpyGameDataPY.GetIpyGameData('WeekParty', findTid)
|
| | | if not ipyData:
|
| | | return
|
| | | totalTimes = ipyData.GetTotalTimes()
|
| | | curTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyCurTimes % (dayIndex, findTid), 0, ChConfig.Def_PDictType_WeekParty)
|
| | | if isAdd:
|
| | | addCnt = addCnt if totalTimes == 0 else min(totalTimes - curTimes, addCnt)
|
| | | if addCnt <= 0:
|
| | | return
|
| | | updTimes = curTimes + addCnt
|
| | | else:
|
| | | updTimes = min(addCnt, totalTimes)
|
| | | realAddCnt = updTimes - curTimes
|
| | | if realAddCnt <= 0:
|
| | | return
|
| | | 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, realAddCnt=%s,addPoint=%s' % (dayIndex, findTid, realAddCnt, addPoint))
|
| | | SyncWeekPartyPlayerInfo(curPlayer, dayIndex, findTid)
|
| | | 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, realAddCnt=%s,addPoint=%s' % (dayIndex, findTid, realAddCnt, addPoint))
|
| | | if isSync:
|
| | | SyncWeekPartyPlayerInfo(curPlayer, dayIndex, findTid)
|
| | | return True
|
| | |
|
| | |
|
| | | def CheckWeekPartyActionCnt(curPlayer):
|
| | | ipyDataMgr = IpyGameDataPY.IPY_Data()
|
| | | for actionType in ChConfig.AheadFinishWPActList:
|
| | | if actionType == ChConfig.Def_WPAct_Horse:
|
| | | for i in xrange(ipyDataMgr.GetHorseCount()):
|
| | | ipyData = ipyDataMgr.GetHorseByIndex(i)
|
| | | index = ipyData.GetHorseID()
|
| | | lv = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Horser_LV % index, 0, ChConfig.Def_PDictType_Horse)
|
| | | if lv:
|
| | | AddWeekPartyActionCnt(curPlayer, actionType, index, False)
|
| | | elif actionType == ChConfig.Def_WPAct_Pet:
|
| | | 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, actionType, petNPCID, False)
|
| | | elif actionType == ChConfig.Def_WPAct_Dogz:
|
| | | for i in xrange(ipyDataMgr.GetDogzCount()):
|
| | | ipyData = ipyDataMgr.GetDogzByIndex(i)
|
| | | if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_DogzFightState, i):
|
| | | AddWeekPartyActionCnt(curPlayer, actionType, ipyData.GetDogzID(), False)
|
| | | elif actionType == ChConfig.Def_WPAct_Rune:
|
| | | 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, actionType, itemColor, False)
|
| | | return
|
| | |
|
| | | def GetWeekPartyActionAward(curPlayer, day, templateID):
|
| | | '''领取周狂欢活动奖励'''
|
| | |
| | | #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, 1, [IPY_GameWorld.rptItem])
|
| | | ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem])
|
| | | SyncWeekPartyPlayerInfo(curPlayer, day, templateID)
|
| | | return
|
| | |
|
| | |
| | | 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, isBind, [IPY_GameWorld.rptItem])
|
| | | ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem])
|
| | | SyncWeekPartyPlayerInfo(curPlayer, day)
|
| | | DataRecordPack.DR_WeekPartyPoint(curPlayer, day, getPoint)
|
| | | return
|
| | |
|
| | |
|
| | | def __GetAwardItem(curPlayer, ipyData, times=1):
|
| | | awardDict = {}
|
| | | for itemID, itemCnt, isbind in ipyData.GetReward():
|
| | | awardItemList = __GetAwardItemListByJob(curPlayer, ipyData)
|
| | | 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, ipyData):
|
| | | ## 根据职业获取对应奖励
|
| | | rewardItemInfo = ipyData.GetReward()
|
| | | if isinstance(rewardItemInfo, dict):
|
| | | return rewardItemInfo.get(curPlayer.GetJob(), [])
|
| | | return rewardItemInfo
|
| | |
|
| | | def SyncWeekPartyPlayerInfo(curPlayer, day=-1, templateID=-1):
|
| | | #通知当前次数、已领次数
|
| | |
| | | tInfo.SingleTimes = ipyData.GetSingleTimes()
|
| | | tInfo.Point = ipyData.GetPoint()
|
| | | tInfo.ItemInfo = []
|
| | | for itemID, itemCnt, isBind in ipyData.GetReward():
|
| | | awardItemList = __GetAwardItemListByJob(curPlayer, ipyData)
|
| | | for itemID, itemCnt, isBind in awardItemList:
|
| | | awardItem = ChPyNetSendPack.tagMCWeekPartyItem()
|
| | | awardItem.ItemID = itemID
|
| | | awardItem.ItemCnt = itemCnt
|