xdh
2018-08-10 e334d90099846d5eaf0ec42fb294b63db3932468
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBossReborn.py
@@ -38,7 +38,9 @@
        # 活动中同步活动信息
        if actCostRebateInfo.get(ShareDefine.ActKey_State):
            SyncBossRebornInfo(curPlayer)
            SyncBossRebornPlayerInfo(curPlayer)
    return
def RefreshOperationAction_BossReborn():
    playerManager = GameWorld.GetPlayerManager()
@@ -58,43 +60,48 @@
    bossRebornID = actBossRebornInfo.get(ShareDefine.ActKey_ID, 0)
    state = actBossRebornInfo.get(ShareDefine.ActKey_State, 0)
    
    playerBossRebornID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossRebornID) # 玩家身上的活动ID
    playerBossRebornID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossRebornID)  # 玩家身上的活动ID
    
    # 活动ID 相同的话不处理
    if bossRebornID == playerBossRebornID:
        #GameWorld.DebugLog("BOSS复活活动ID不变,不处理!", curPlayer.GetPlayerID())
        return
    BRWorldLV = actBossRebornInfo.get(ShareDefine.ActKey_WorldLV, 0)
    playerBRWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BRActionWorldLV)
    GameWorld.DebugLog("BOSS复活重置! costRebateID=%s,playerCostRebateID=%s,state=%s,BRWorldLV=%s,playerBRWorldLV=%s"
                       % (bossRebornID, playerBossRebornID, state, BRWorldLV, playerBRWorldLV), playerID)
    templateID = actBossRebornInfo.get(ShareDefine.ActKey_TemplateID, 0)
    playerTemplateID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossRebornTemplateID)
    GameWorld.DebugLog("BOSS复活重置! costRebateID=%s,playerCostRebateID=%s,state=%s,templateID=%s,playerTemplateID=%s"
                       % (bossRebornID, playerBossRebornID, state, templateID, playerTemplateID), playerID)
    
    # 未领取的奖励邮件发放
    __SendBossRebornMail(curPlayer, playerBRWorldLV)
    __SendBossRebornMail(curPlayer, playerTemplateID)
    
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossRebornID, bossRebornID)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BRActionWorldLV, BRWorldLV)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossRebornTemplateID, templateID)
    for brid in ChConfig.BossRebornActIDList:
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BRActionCurTimes % brid, 0)
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BRActionGotTimes % brid, 0)
    SyncBossRebornInfo(curPlayer)
    SyncBossRebornPlayerInfo(curPlayer)
    return True
def __SendBossRebornMail(curPlayer, playerBRWorldLV):
    #未领取的奖励邮件发放
def __SendBossRebornMail(curPlayer, playerTemplateID):
    # 未领取的奖励邮件发放
    ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition("BossReborn", {'TemplateID':playerTemplateID}, True)
    if not ipyDataList:
        return
    totalItemDict = {}
    for brid in ChConfig.BossRebornActIDList:
        ipyData = IpyGameDataPY.GetIpyGameData('BossReborn', brid)
        if not ipyData:
            continue
    for ipyData in ipyDataList:
        brid = ipyData.GetID()
        singleTimes = ipyData.GetSingleTimes()
        curTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BRActionCurTimes % brid)
        gotTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BRActionGotTimes % brid)
        canGotCnt = (curTimes - gotTimes) / singleTimes
        if not canGotCnt:
            continue
        itemDict = __GetAwardItem(curPlayer, playerBRWorldLV, ipyData, canGotCnt)
        itemDict = __GetAwardItem(curPlayer, ipyData, canGotCnt)
        GameWorld.AddDictValue(totalItemDict, itemDict)
    
    #去掉复活点道具
@@ -104,6 +111,7 @@
    totalItemList = [[itemID, itemCnt, 1] for itemID, itemCnt in totalItemDict.items()]
    PlayerControl.SendMailByKey('BossFHUnGetMail', [curPlayer.GetID()], totalItemList)
    return
def AddBossRebornActionCnt(curPlayer, actionID, addCnt=1):
    '''增加boss复活相关活动完成次数'''
@@ -123,12 +131,14 @@
    
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BRActionCurTimes % actionID, curTimes + addCnt)
    
    SyncBossRebornInfo(curPlayer, actionID)
    SyncBossRebornPlayerInfo(curPlayer, actionID)
    return
def GetBossRebornActionAward(curPlayer, actionID):
    '''领取boss复活活动奖励'''
    ipyData = IpyGameDataPY.GetIpyGameData('BossReborn', actionID)
    playerTemplateID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossRebornTemplateID)
    ipyData = IpyGameDataPY.GetIpyGameData('BossReborn', playerTemplateID, actionID)
    if not ipyData:
        return
    singleTimes = ipyData.GetSingleTimes()
@@ -138,8 +148,7 @@
        return
    
    #给奖励
    curWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BRActionWorldLV)
    awardDict = __GetAwardItem(curPlayer, curWorldLV, ipyData)
    awardDict = __GetAwardItem(curPlayer, ipyData)
    # 检查背包
    needSpace = len(awardDict)
    packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
@@ -153,40 +162,25 @@
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BRActionGotTimes % actionID, newGotTimes)
    for itemID, itemCnt in awardDict.items():
        ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 1, [IPY_GameWorld.rptItem])
    SyncBossRebornInfo(curPlayer, actionID)
    SyncBossRebornPlayerInfo(curPlayer, actionID)
    return
def __GetAwardItem(curPlayer, worldLV, ipyData, times=1):
    worldLVList = ipyData.GetWorldLVList()
    playerLV = curPlayer.GetLV()
    awardIndex = len(worldLVList) - 1
    for i, lv in enumerate(worldLVList):
        prelv = 0 if i ==0 else worldLVList[i-1]
        if prelv<=playerLV < lv:
            awardIndex = i
            break
def __GetAwardItem(curPlayer, ipyData, times=1):
    awardDict = {}
    for i in xrange(3): #目前配置3个奖励
        if not hasattr(ipyData, 'GetRewardItemID%s' % (i + 1)):
            break
        itemIDList = getattr(ipyData, 'GetRewardItemID%s' % (i + 1))()
        itemCntList = getattr(ipyData, 'GetRewardItemCnt%s' % (i + 1))()
        if awardIndex >= len(itemIDList) or awardIndex >= len(itemCntList):
            GameWorld.ErrLog('BOSS复活表奖励配置错误!')
            return awardDict
        itemID, itemCnt = itemIDList[awardIndex], itemCntList[awardIndex]
    for itemID, itemCnt, isbind in ipyData.GetAward():
        if not itemID or not itemCnt:
            continue
        awardDict[itemID] = awardDict.get(itemID, 0) + itemCnt * times
        
    return awardDict
def SyncBossRebornInfo(curPlayer, actID= -1):
def SyncBossRebornPlayerInfo(curPlayer, actID=-1):
    #通知当前次数、已领次数 
    packData = ChPyNetSendPack.tagMCBossRebornPlayerInfo()
    packData.DataList = []
    if actID !=-1:
    if actID != -1:
        syneActIDList = [actID]
    else:
        syneActIDList = []
@@ -207,3 +201,39 @@
    packData.Count = len(packData.DataList)
    NetPackCommon.SendFakePack(curPlayer, packData)
    return
def SyncBossRebornInfo(curPlayer):
    actBossRebornInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_BossReborn, {})
    state = actBossRebornInfo.get(ShareDefine.ActKey_State, 0)
    if not state:
        return
    templateID = actBossRebornInfo.get(ShareDefine.ActKey_TemplateID, 0)
    if not templateID:
        return
    ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition("BossReborn", {'TemplateID':templateID}, True)
    if not ipyDataList:
        return
    actInfo = ChPyNetSendPack.tagMCBossRebornInfo()
    actInfo.Clear()
    actInfo.StartDate = actBossRebornInfo.get(ShareDefine.ActKey_StartDate, "")
    actInfo.EndtDate = actBossRebornInfo.get(ShareDefine.ActKey_EndDate, "")
    actInfo.LimitLV = actBossRebornInfo.get(ShareDefine.ActKey_LVLimit, 0)
    actInfo.TaskInfo = []
    for ipyData in ipyDataList:
        taskInfo = ChPyNetSendPack.tagMCBossRebornTaskInfo()
        taskInfo.TaskID = ipyData.GetID()
        taskInfo.TotalTimes = ipyData.GetTotalTimes()
        taskInfo.SingleTimes = ipyData.GetSingleTimes()
        taskInfo.AwardItem = []
        for itemID, itemCnt, isBind in ipyData.GetReward():
            awardItem = ChPyNetSendPack.tagMCBossRebornAwardItem()
            awardItem.ItemID = itemID
            awardItem.ItemCount = itemCnt
            awardItem.IsBind = isBind
            taskInfo.AwardItem.append(awardItem)
        taskInfo.AwardItemCount = len(taskInfo.AwardItem)
        actInfo.TaskInfo.append(taskInfo)
    actInfo.TaskCnt = len(actInfo.TaskInfo)
    NetPackCommon.SendFakePack(curPlayer, actInfo)
    return