From 5054ef8e509abc644c37bc349adbe448ed4f49a5 Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期一, 28 一月 2019 15:23:06 +0800
Subject: [PATCH] 5926 【后端】【1.5.100】新增节日巡礼

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFeastWeekParty.py   |  447 +++++++++++++++++++++++++++++++++++++++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerNewFairyCeremony.py |    4 
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerNewFairyCeremony.py                      |    6 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DataRecordPack.py                |    7 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py               |    9 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWeekParty.py        |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py     |    5 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                      |   17 +
 8 files changed, 488 insertions(+), 9 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerNewFairyCeremony.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerNewFairyCeremony.py
index 77e34a0..6f89de4 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerNewFairyCeremony.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerNewFairyCeremony.py
@@ -51,7 +51,7 @@
     billboardCnt = billBoard.GetCount()
     
     for index in range(0, billboardCnt):
-        ipyData = IpyGameDataPY.GetIpyGameData('UniquenessArrive', worldLvNum, index + 1)
+        ipyData = IpyGameDataPY.GetIpyGameData('NewUniquenessArrive', worldLvNum, index + 1)
         if not ipyData:
             break
         objBillboard = billBoard.At(index)
@@ -63,7 +63,7 @@
             continue
         
         awardList = awardInfoDict[str(job)]
-        PlayerCompensation.SendMailByKey('CeremonyRank', [playerID], awardList, [objBillboard.GetName1(), index + 1])
+        PlayerCompensation.SendMailByKey('NewCeremonyRank', [playerID], awardList, [objBillboard.GetName1(), index + 1])
         
     GameWorld.DebugLog('    活动结束  绝版降临给奖励  worldLvNum=%s, billboardCnt=%s' % (worldLvNum, billboardCnt))
     return
@@ -71,7 +71,7 @@
 def __GetFCWorldLVIndex(fcType):
     #获取活动世界等级档
     playerFCWorldLV = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_OActWorldLV % ShareDefine.OperationActionName_NewFairyCeremony)
-    fcWorldlvDict = IpyGameDataPY.GetFuncEvalCfg('CeremonyWorldLv', 1, {})
+    fcWorldlvDict = IpyGameDataPY.GetFuncEvalCfg('NewCeremonyWorldLv', 1, {})
     if str(fcType) not in fcWorldlvDict:
         return 0
     worldLVIndex = 0
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index f9b54c8..bb4a99f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3291,8 +3291,8 @@
 Def_PDictType_LVAward,  # 等级奖励领取信息记录5
 Def_PDictType_GoldGift,  # 充值豪礼
 Def_PDictType_OpenServerCampaign,  # 开服活动
-Def_PDictType_WeekParty,
-Def_PDictType_Family_Contribution,    # 战盟贡献度
+Def_PDictType_WeekParty, #周狂欢
+Def_PDictType_FeastWeekParty,    # 节日巡礼
 Def_PDictType_LoginAward,    # 登录奖励运营活动
 Def_PDictType_OfficialRank,    # 官爵
 Def_PDictType_Horse,    # 坐骑
@@ -3757,11 +3757,18 @@
 Def_PDict_FBRealHelpCount = "FBRealHelpCount_%s" #副本真实助战次数,仅针对真实进去打的副本,参数mapID
 
 #周狂欢
-Def_PDict_WeekPartyID = "WeekPartyID"  # 玩家身上的BOSS复活活动ID,唯一标识,取活动开始日期time值
+Def_PDict_WeekPartyID = "WeekPartyID"  # 玩家身上的活动ID,唯一标识,取活动开始日期time值
 Def_PDict_WeekPartyCurTimes = "WeekPartyCurTimes_%s_%s" #当前完成次数 参数(第X天,模板ID)
 Def_PDict_WeekPartyGotTimes = "WeekPartyGotTimes_%s_%s" #当前已领次数 参数(第X天,模板ID)
 Def_PDict_WeekPartyAwardRecord = "WeekPartyAwardRecord_%s" #积分领奖记录  参数(第X天)
 Def_PDict_WeekPartyPoint = "WeekPartyPoint_%s" #当天积分  参数(第X天)
+
+#节日巡礼周狂欢
+Def_PDict_FeastWeekPartyID = "FeastWeekPartyID"  # 玩家身上的活动ID,唯一标识,取活动开始日期time值
+Def_PDict_FeastWeekPartyCurTimes = "FeastWPCurTimes_%s_%s" #当前完成次数 参数(第X天,模板ID)
+Def_PDict_FeastWeekPartyGotTimes = "FeastWPGotTimes_%s_%s" #当前已领次数 参数(第X天,模板ID)
+Def_PDict_FeastWeekPartyAwardRecord = "FeastWPAward_%s" #积分领奖记录  参数(第X天)
+Def_PDict_FeastWeekPartyPoint = "FeastWPPoint_%s" #当天积分  参数(第X天)
 
 #登录奖励运营活动
 Def_PDict_LoginAwardID = "LoginAwardID"  # 玩家身上的BOSS复活活动ID,唯一标识,取活动开始日期time值
@@ -5206,7 +5213,9 @@
 Def_RewardType_ActLoginAwardAct, # 领取登录奖励活动奖励22
 Def_RewardType_NewFairyCRecharge, # 新仙界盛典充值大礼23
 Def_RewardType_NewFairyCParty, # 新仙界盛典全民来嗨24
-)= range(25)
+Def_RewardType_FeastWeekPartyAct, # 领取周狂欢活动奖励25
+Def_RewardType_FeastWeekPartyPoint, # 领取周狂欢积分奖励26
+)= range(27)
 
 
 #boss复活相关活动定义
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DataRecordPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DataRecordPack.py
index 933c0ee..56e109b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DataRecordPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/DataRecordPack.py
@@ -1628,4 +1628,11 @@
     
     #发送封包
     SendEventPack("WeekPartyPoint", dataDict, curPlayer)
+    return
+def DR_FeastWeekPartyPoint(curPlayer, dayIndex, point):
+    ##节日巡礼
+    dataDict = {'PlayerID':curPlayer.GetPlayerID(), 
+                'AccID':curPlayer.GetAccID(), 'dayIndex':dayIndex, 'point':point}
+    #发送封包
+    SendEventPack("FeastWeekPartyPoint", dataDict, curPlayer)
     return
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
index 605e94c..dcc2219 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -79,6 +79,7 @@
 import GameLogic_FamilyWar
 import PlayerBossReborn
 import PlayerWeekParty
+import PlayerFeastWeekParty
 import PlayerActLogin
 import Operate_EquipWash
 import PlayerTreasure
@@ -708,6 +709,8 @@
     PlayerBossReborn.OnLogin(curPlayer)
     # 周狂欢活动
     PlayerWeekParty.OnLogin(curPlayer)
+    # 节日巡礼活动
+    PlayerFeastWeekParty.OnLogin(curPlayer)
     # 登录奖励活动
     PlayerActLogin.OnLogin(curPlayer)
     # 仙界盛典活动
@@ -5353,6 +5356,12 @@
     # 领取新仙界盛典全民来嗨
     elif rewardType == ChConfig.Def_RewardType_NewFairyCParty:
         PlayerNewFairyCeremony.GetFCPartyAward(curPlayer, dataEx)
+    # 领取节日巡礼活动奖励
+    elif rewardType == ChConfig.Def_RewardType_FeastWeekPartyAct:
+        PlayerWeekParty.GetWeekPartyActionAward(curPlayer, dataEx, dataExStr)
+    # 领取节日巡礼积分奖励
+    elif rewardType == ChConfig.Def_RewardType_FeastWeekPartyPoint:
+        PlayerFeastWeekParty.GetFeastWeekPartyPointAward(curPlayer, dataEx, dataExStr)
     return
     
     
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
index 884e9a0..aee1e7a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -80,6 +80,7 @@
 import PlayerSpringSale
 import PlayerBossReborn
 import PlayerWeekParty
+import PlayerFeastWeekParty
 import PlayerActLogin
 import PlayerFlashGiftbag
 import PlayerFairyCeremony
@@ -1312,6 +1313,10 @@
                 
             elif actionName == ShareDefine.OperationActionName_LoginAward:
                 PlayerActLogin.RefreshOperationAction_LoginAward()
+                
+            elif actionName == ShareDefine.OperationActionName_FeastWeekParty:
+                PlayerFeastWeekParty.RefreshOperationAction_FeastWeekParty()
+            
             return
         
         if msgValue.isdigit():
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFeastWeekParty.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFeastWeekParty.py
new file mode 100644
index 0000000..5b253f4
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFeastWeekParty.py
@@ -0,0 +1,447 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+#-------------------------------------------------------------------------------
+#
+##@package Player.PlayerFeastWeekParty
+#
+# @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 DataRecordPack
+import PlayerGodWeapon
+import NetPackCommon
+import ShareDefine
+import PyGameData
+import ItemCommon
+
+
+def OnLogin(curPlayer):
+    isReset = __CheckPlayerFeastWeekPartyAction(curPlayer)
+    if not isReset:
+        actCostRebateInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastWeekParty, {})
+        # 活动中同步活动信息
+        SyncFeastWeekPartyInfo(curPlayer)
+        if actCostRebateInfo.get(ShareDefine.ActKey_State):
+            SyncFeastWeekPartyPlayerInfo(curPlayer)
+    return
+
+
+def RefreshOperationAction_FeastWeekParty():
+    playerManager = GameWorld.GetPlayerManager()
+    for i in xrange(playerManager.GetPlayerCount()):
+        curPlayer = playerManager.GetPlayerByIndex(i)
+        if curPlayer == None or not curPlayer.GetInitOK():
+            continue
+        __CheckPlayerFeastWeekPartyAction(curPlayer)
+    return
+
+
+def __CheckPlayerFeastWeekPartyAction(curPlayer):
+    ## 检查玩家节日巡礼活动数据信息
+    playerID = curPlayer.GetPlayerID()
+    
+    actFeastWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastWeekParty, {})
+    #FeastWeekPartyID = actFeastWeekPartyInfo.get(ShareDefine.ActKey_ID, 0)
+    state = actFeastWeekPartyInfo.get(ShareDefine.ActKey_State, 0)
+    cfgID = actFeastWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)
+    passlv = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_TrialTower_PassLV)
+    if state:
+        #每天都要触发
+        AddFeastWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Tower, passlv, False, True, False)
+        AddFeastWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Login, 1, False, False)
+        AddFeastWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Stone, Operate_EquipStone.GetTotalStoneLV(curPlayer), False, True, False)
+        AddFeastWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_GodWeapon, PlayerGodWeapon.GetGodWeaponTotalLV(curPlayer), False, True, False)
+        SyncFeastWeekPartyPlayerInfo(curPlayer)
+    playerFeastWeekPartyID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyID, 0, ChConfig.Def_PDictType_FeastWeekParty)  # 玩家身上的活动ID
+    # 活动ID 相同的话不处理
+    if cfgID == playerFeastWeekPartyID:
+        #GameWorld.DebugLog("节日巡礼活动ID不变,不处理!", curPlayer.GetPlayerID())
+        return
+    CheckFeastWeekPartyActionCnt(curPlayer)
+    # 未领取的奖励邮件发放
+    if playerFeastWeekPartyID:
+        __SendFeastWeekPartyMail(curPlayer, playerFeastWeekPartyID)
+    
+    if not cfgID:
+        GameWorld.DebugLog('    节日巡礼活动重置!')
+        curPlayer.ClearNomalDict(ChConfig.Def_PDictType_FeastWeekParty)
+    
+    GameWorld.DebugLog("节日巡礼变更! state=%s,cfgID=%s,playerFeastWeekPartyID=%s" % (state, cfgID, playerFeastWeekPartyID), playerID)
+    
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastWeekPartyID, cfgID, ChConfig.Def_PDictType_FeastWeekParty)
+        
+    SyncFeastWeekPartyInfo(curPlayer)
+    return True
+
+
+def __SendFeastWeekPartyMail(curPlayer, cfgID):
+    # 未领取的奖励邮件发放
+    actBossIpyData = IpyGameDataPY.GetIpyGameData("ActFeastWeekParty", 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('FeastWeekParty', tid)
+            if not ipyData:
+                continue
+            singleTimes = ipyData.GetSingleTimes()
+            curTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyCurTimes % (day, tid), 0, ChConfig.Def_PDictType_FeastWeekParty)
+            gotTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyGotTimes % (day, tid), 0, ChConfig.Def_PDictType_FeastWeekParty)
+            canGotCnt = (curTimes - gotTimes) / singleTimes
+            if not canGotCnt:
+                continue
+            itemDict = __GetAwardItem(curPlayer, ipyData, canGotCnt)
+            GameWorld.AddDictValue(totalItemDict, itemDict)
+    #积分奖励
+    for day, awardDict in actBossIpyData.GetPointAward().items():
+        pointList = awardDict.keys()
+        pointList.sort()
+        for i, point in enumerate(pointList):
+            curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyPoint % day, 0, ChConfig.Def_PDictType_FeastWeekParty)
+            if curPoint < point:
+                continue
+            awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyAwardRecord % day, 0, ChConfig.Def_PDictType_FeastWeekParty)
+            if awardRecord & pow(2, i):
+                continue
+            itemList = awardDict[point]
+            for itemID, itemCnt, isBind in itemList:
+                totalItemDict[itemID] = totalItemDict.get(itemID, 0) + itemCnt
+            DataRecordPack.DR_FeastWeekPartyPoint(curPlayer, day, point)
+    if not totalItemDict:
+        return
+    totalItemList = [[itemID, itemCnt, 1] for itemID, itemCnt in totalItemDict.items()]
+    PlayerControl.SendMailByKey('SecondWeekReward2', [curPlayer.GetID()], totalItemList)
+    return
+
+
+def AddFeastWeekPartyActionCnt(curPlayer, actionID, addCnt=1, isAdd=True, isCompatible=False, isSync=True):
+    '''增加节日巡礼相关活动完成次数'''
+    #判断活动是否开启
+    if not addCnt:
+        return
+    actFeastWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastWeekParty, {})
+    state = actFeastWeekPartyInfo.get(ShareDefine.ActKey_State, 0)
+    cfgID = actFeastWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)
+    
+    if not state or not cfgID:
+        return
+    actBossIpyData = IpyGameDataPY.GetIpyGameData("ActFeastWeekParty", cfgID)
+    if not actBossIpyData:
+        return
+    templateIDList = actBossIpyData.GetTemplateID()
+    dayIndex = actFeastWeekPartyInfo.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('FeastWeekParty', 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
+    for tid in dayTidList:
+        if tid / 100 == actionID:
+            findTid = tid
+            break
+    if not findTid:
+        return
+    ipyData = IpyGameDataPY.GetIpyGameData('FeastWeekParty', findTid)
+    if not ipyData:
+        return
+    totalTimes = ipyData.GetTotalTimes()
+    curTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyCurTimes % (dayIndex, findTid), 0, ChConfig.Def_PDictType_FeastWeekParty)
+    if isAdd:
+        addCnt = addCnt if totalTimes == 0 else min(totalTimes - curTimes, addCnt)
+        if addCnt <= 0:
+            return
+        updTimes = curTimes + addCnt
+    else:
+        if not isCompatible and addCnt != totalTimes:
+            return
+        updTimes = min(addCnt, totalTimes)
+    realAddCnt = updTimes - curTimes
+    if realAddCnt <= 0:
+        return
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastWeekPartyCurTimes % (dayIndex, findTid), updTimes, ChConfig.Def_PDictType_FeastWeekParty)
+    #加积分
+    singleTimes = ipyData.GetSingleTimes()
+    addPoint = (curTimes % singleTimes + realAddCnt)/singleTimes* ipyData.GetPoint()
+    curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyPoint % dayIndex, 0, ChConfig.Def_PDictType_FeastWeekParty)
+    updPoint = curPoint + addPoint
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastWeekPartyPoint % dayIndex, updPoint, ChConfig.Def_PDictType_FeastWeekParty)
+    GameWorld.DebugLog('   增加节日巡礼相关活动完成次数 dayIndex=%s, findTid=%s, realAddCnt=%s,addPoint=%s' % (dayIndex, findTid, realAddCnt, addPoint))
+    if isSync:
+        SyncFeastWeekPartyPlayerInfo(curPlayer, dayIndex, findTid)
+    return True
+
+
+def CheckFeastWeekPartyActionCnt(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:
+                    AddFeastWeekPartyActionCnt(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)
+                AddFeastWeekPartyActionCnt(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):
+                    AddFeastWeekPartyActionCnt(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()
+                AddFeastWeekPartyActionCnt(curPlayer, actionType, itemColor, False)
+    return
+
+def GetFeastWeekPartyActionAward(curPlayer, day, templateID):
+    '''领取节日巡礼活动奖励'''
+    templateID = GameWorld.ToIntDef(templateID, 0)
+    ipyData = IpyGameDataPY.GetIpyGameData('FeastWeekParty', templateID)
+    if not ipyData:
+        return
+    singleTimes = ipyData.GetSingleTimes()
+    curTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyCurTimes % (day, templateID), 0, ChConfig.Def_PDictType_FeastWeekParty)
+    gotTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyGotTimes % (day, templateID), 0, ChConfig.Def_PDictType_FeastWeekParty)
+    if curTimes - gotTimes < singleTimes:
+        return
+    
+    #给奖励
+    awardDict = __GetAwardItem(curPlayer, ipyData)
+    # 检查背包
+    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_FeastWeekPartyGotTimes % (day, templateID), newGotTimes, ChConfig.Def_PDictType_FeastWeekParty)
+    for itemID, itemCnt in awardDict.items():
+        ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 1, [IPY_GameWorld.rptItem])
+    SyncFeastWeekPartyPlayerInfo(curPlayer, day, templateID)
+    return
+
+
+def GetFeastWeekPartyPointAward(curPlayer, day, getPoint):
+    ##领取节日巡礼积分奖励
+    getPoint = GameWorld.ToIntDef(getPoint, 0)
+    actFeastWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastWeekParty, {})
+    state = actFeastWeekPartyInfo.get(ShareDefine.ActKey_State, 0)
+    cfgID = actFeastWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)
+    if not state or not cfgID:
+        return
+    actBossIpyData = IpyGameDataPY.GetIpyGameData("ActFeastWeekParty", cfgID)
+    if not actBossIpyData:
+        return
+    curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyPoint % day, 0, ChConfig.Def_PDictType_FeastWeekParty)
+    if curPoint < getPoint:
+        return
+    pointAwardDict = actBossIpyData.GetPointAward().get(day, {})
+    pointList = pointAwardDict.keys()
+    pointList.sort()
+    if getPoint not in pointList:
+        return
+    getIndex = pointList.index(getPoint)
+    awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyAwardRecord % day, 0, ChConfig.Def_PDictType_FeastWeekParty)
+    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_FeastWeekPartyAwardRecord % day, awardRecord | pow(2, getIndex), ChConfig.Def_PDictType_FeastWeekParty)
+    for itemID, itemCnt, isBind in itemList:
+        ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, isBind, [IPY_GameWorld.rptItem])
+    SyncFeastWeekPartyPlayerInfo(curPlayer, day)
+    DataRecordPack.DR_FeastWeekPartyPoint(curPlayer, day, getPoint)
+    return
+
+
+def __GetAwardItem(curPlayer, ipyData, times=1):
+    awardDict = {}
+    for itemID, itemCnt, isbind in ipyData.GetReward():
+        if not itemID or not itemCnt:
+            continue
+        awardDict[itemID] = awardDict.get(itemID, 0) + itemCnt * times
+        
+    return awardDict
+
+
+def SyncFeastWeekPartyPlayerInfo(curPlayer, day=-1, templateID=-1):
+    #通知当前次数、已领次数 
+    actFeastWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastWeekParty, {})
+    state = actFeastWeekPartyInfo.get(ShareDefine.ActKey_State, 0)
+    cfgID = actFeastWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)
+    if not state or not cfgID:
+        return
+    actBossIpyData = IpyGameDataPY.GetIpyGameData("ActFeastWeekParty", 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.tagMCFeastWeekPartyPlayerInfo()
+    packData.DayInfoList = []
+    for cday in syncDayList:
+        tiemInfo = ChPyNetSendPack.tagMCFeastWeekPartyDayPlayerInfo()
+        tiemInfo.DayIndex = cday
+        tiemInfo.Point = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyPoint % cday, 0, ChConfig.Def_PDictType_FeastWeekParty)
+        tiemInfo.AwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyAwardRecord % cday, 0, ChConfig.Def_PDictType_FeastWeekParty)
+        tiemInfo.TaskList = []
+        for tID in templateIDList[cday]:
+            if templateID != -1 and tID != templateID:
+                continue
+            tipyData = IpyGameDataPY.GetIpyGameData('FeastWeekParty', tID)
+            if not tipyData:
+                continue
+            taskInfo = ChPyNetSendPack.tagMCFeastWeekPartyTaskInfo()
+            taskInfo.TemplateID = tID
+            taskInfo.CurTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyCurTimes % (cday, tID), 0, ChConfig.Def_PDictType_FeastWeekParty)
+            taskInfo.GotTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyGotTimes % (cday, tID), 0, ChConfig.Def_PDictType_FeastWeekParty)
+            tiemInfo.TaskList.append(taskInfo)
+        tiemInfo.ACount = len(tiemInfo.TaskList)
+        packData.DayInfoList.append(tiemInfo)
+    packData.Count = len(packData.DayInfoList)
+    NetPackCommon.SendFakePack(curPlayer, packData)
+    return
+
+
+def SyncFeastWeekPartyInfo(curPlayer):
+    actFeastWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastWeekParty, {})
+    state = actFeastWeekPartyInfo.get(ShareDefine.ActKey_State, 0)
+    cfgID = actFeastWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)
+    if not cfgID:
+        return
+    actBossIpyData = IpyGameDataPY.GetIpyGameData("ActFeastWeekParty", cfgID)
+    if not actBossIpyData:
+        return
+    templateIDList = actBossIpyData.GetTemplateID()
+    if not templateIDList:
+        return
+    pointAwardDict = actBossIpyData.GetPointAward()
+    actInfo = ChPyNetSendPack.tagMCFeastWeekPartyInfo()
+    actInfo.Clear()
+    actInfo.StartDate = actBossIpyData.GetStartDate()
+    actInfo.EndtDate = actBossIpyData.GetEndDate()
+    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.tagMCFeastWeekPartyDayInfo()
+        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.tagMCFeastWeekPartyItem()
+                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('FeastWeekParty', tid)
+        if not ipyData:
+            GameWorld.ErrLog('    节日巡礼模板表找不到模板%s' % tid)
+            continue
+        tInfo = ChPyNetSendPack.tagMCFeastWeekPartyAction()
+        tInfo.TemplateID = tid
+        tInfo.ActionType = ipyData.GetActionType()
+        tInfo.TotalTimes = ipyData.GetTotalTimes()
+        tInfo.SingleTimes = ipyData.GetSingleTimes()
+        tInfo.Point = ipyData.GetPoint()
+        tInfo.ItemInfo = []
+        for itemID, itemCnt, isBind in ipyData.GetReward():
+            awardItem = ChPyNetSendPack.tagMCFeastWeekPartyItem()
+            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
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerNewFairyCeremony.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerNewFairyCeremony.py
index bb5f56f..c3bb551 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerNewFairyCeremony.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerNewFairyCeremony.py
@@ -108,7 +108,7 @@
             GameWorld.ErrLog('    邮件发放充值大礼奖励 CeremonyRecharge 未配置奖励 worldLvNum=%s' % worldLvNum)
         else:
             awardList = awardInfoDict[str(worldLvNum)]
-            PlayerControl.SendMailByKey('CeremonyPayPack', [playerID], awardList, [playerName])
+            PlayerControl.SendMailByKey('NewCeremonyPayPack', [playerID], awardList, [playerName])
     #全民来嗨
     worldLvNum = __GetFCWorldLVIndex(curPlayer, Def_FC_Party)
     curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_NewFCPartyCurPoint)
@@ -134,7 +134,7 @@
         awardList = awardInfoDict[str(job)]
         partyAwardList += awardList
     if partyAwardList:
-        PlayerControl.SendMailByKey('CeremonyHaiPoint', [playerID], partyAwardList, [playerName])
+        PlayerControl.SendMailByKey('NewCeremonyHaiPoint', [playerID], partyAwardList, [playerName])
     return
 
 def __IsAtFCAction():
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWeekParty.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWeekParty.py
index 100ed76..96d051c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWeekParty.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerWeekParty.py
@@ -26,6 +26,7 @@
 import ItemControler
 import ChPyNetSendPack
 import Operate_EquipStone
+import PlayerFeastWeekParty
 import DataRecordPack
 import PlayerGodWeapon
 import NetPackCommon
@@ -140,6 +141,7 @@
 
 def AddWeekPartyActionCnt(curPlayer, actionID, addCnt=1, isAdd=True, isCompatible=False, isSync=True):
     '''增加周狂欢相关活动完成次数'''
+    PlayerFeastWeekParty.AddFeastWeekPartyActionCnt(curPlayer, actionID, addCnt, isAdd, isCompatible, isSync)
     #判断活动是否开启
     if not addCnt:
         return

--
Gitblit v1.8.0