xdh
2019-07-01 e815ab83417d55c5009681832463fba2833cfe0d
7687 【后端】【主干】娲皇遗迹增加首次S级奖励
2个文件已修改
38 ■■■■ 已修改文件
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_QueenRelics.py 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py
@@ -90,6 +90,7 @@
Over_grade = 'grade' #评级(5-S,4-A,3-B,2-C,1-D)
Over_itemInfo = 'itemInfo' #物品列表 [{"ItemID":101, "ItemCount":10, "IsBind":1, "IsSuite":1, "UserData":"自定义属性字符串"}]
Over_succItemInfo = 'succItemInfo' #物品列表
Over_firstPassItem = 'firstPassItem' #物品列表
Over_score = 'score' #已获得积分
Over_extrScore = 'extrScore' #已获得额外积分
Over_enterLV = 'enterLV' #进入时等级
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_QueenRelics.py
@@ -503,20 +503,25 @@
    needSyncFBData = False
    overDict = {}
    if isPass:
        overDict = {FBCommon.Over_costTime:costTime, FBCommon.Over_grade:grade}
        curGrade = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineID, False, [dataMapID])
        if curGrade < grade:
            GameWorld.DebugLog("    更新过关评级: dataMapID=%s,lineID=%s,curGrade=%s,rewardGrade=%s" 
                               % (dataMapID, lineID, curGrade, grade), curPlayer.GetPlayerID())
            GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineID, grade, False, [dataMapID])
            needSyncFBData = True
            if grade >= maxGrade: #首次S级奖励
                lineReward = FBCommon.GetFBLineReward(dataMapID, lineID)
                firstrewardItemList = [[itemID,itemCnt,0] for itemID,itemCnt in lineReward[0]]
                ItemControler.GivePlayerItemOrMail(curPlayer, firstrewardItemList, 'QueenRelicsMail', event=["QueenRelics", False, {}])
                overDict[FBCommon.Over_firstPassItem] = FBCommon.GetJsonItemList(firstrewardItemList)
        
        overDict = {FBCommon.Over_costTime:costTime, FBCommon.Over_grade:grade}
        if not nextLineID:#没有下一层则给奖励!!
            rewardRet = __GivePlayerQueenRelicsReward(curPlayer, dataMapID, rewardLine - 1, lineID, grade, maxGrade, rewardRateList)
            if rewardRet:
                startRewardLineID, totalSP, rewardItemList = rewardRet
                overDict.update({FBCommon.Over_sp:totalSP, FBCommon.Over_itemInfo:FBCommon.GetJsonItemList(rewardItemList),
                startRewardLineID, rewardItemList = rewardRet
                overDict.update({FBCommon.Over_itemInfo:FBCommon.GetJsonItemList(rewardItemList),
                                 "startRewardLineID":startRewardLineID})
        if lineID+1 > curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBHistoryMaxLine % dataMapID):
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FBHistoryMaxLine % dataMapID, lineID+1)
@@ -561,9 +566,7 @@
def __GivePlayerQueenRelicsReward(curPlayer, dataMapID, rewardLineID, curLineID, passGrade, maxGrade, rewardRateList):
    ## 给玩家过关奖励
    
    totalSP = 0
    totalItemCountDict = {}
    # 一般是不可能,这里做个理论数值防范
    if rewardLineID >= curLineID:
        GameWorld.ErrLog("玩家重复结算娲皇过关奖励!rewardLineID=%s >= curLineID=%s" % (rewardLineID, curLineID), curPlayer.GetPlayerID())
@@ -577,8 +580,7 @@
        rewardGrade = maxGrade if giveLineID < curLineID else passGrade
                    
        lineReward = FBCommon.GetFBLineReward(dataMapID, giveLineID)
        rewardSP = lineReward[0]
        rewardItemList = lineReward[1:]
        rewardItemList = lineReward[1]
        rewardRateIndex = 0 if rewardGrade >= maxGrade else maxGrade - rewardGrade
        if rewardRateIndex < 0 or rewardRateIndex >= len(rewardRateList):
            GameWorld.ErrLog("    评级对应奖励比例索引异常: giveLineID=%s,rewardGrade=%s,rewardRateList=%s,maxGrade=%s,rewardRateIndex=%s" 
@@ -587,29 +589,26 @@
        rewardRate = rewardRateList[rewardRateIndex]
        
        if rewardRate < 100:
            addSP = int(round(rewardSP * rewardRate / 100.0))
            giveItemList = []
            for itemID, itemCount in rewardItemList:
                rewardCount = max(1, int(round(itemCount * rewardRate / 100.0))) # 确保至少1个
                giveItemList.append([itemID, rewardCount])
        else:
            addSP = rewardSP
            giveItemList = rewardItemList
            
        GameWorld.DebugLog("    给关卡奖励: giveLineID=%s,rewardGrade=%s,rewardRateList=%s,rewardRate=%s,addSP=%s,giveItemList=%s"
                           % (giveLineID, rewardGrade, rewardRateList, rewardRate, addSP, giveItemList), curPlayer.GetPlayerID())
        GameWorld.DebugLog("    给关卡奖励: giveLineID=%s,rewardGrade=%s,rewardRateList=%s,rewardRate=%s,giveItemList=%s"
                           % (giveLineID, rewardGrade, rewardRateList, rewardRate, giveItemList), curPlayer.GetPlayerID())
        
        totalSP += addSP
        for itemID, itemCount in giveItemList:
            totalItemCountDict[itemID] = totalItemCountDict.get(itemID, 0) + itemCount
    
    # 给奖励
    PlayerControl.PlayerAddZhenQi(curPlayer, totalSP, eventName="QueenRelics")
    rewardItemList = []
    for itemID, itemCount in totalItemCountDict.items():
        rewardItemList.append([itemID, itemCount, 1])
        rewardItemList.append([itemID, itemCount, 0])
    needSpace = len(rewardItemList)
    emptySpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
    if emptySpace < needSpace:
@@ -618,8 +617,8 @@
        for itemID, itemCount, isBind in rewardItemList:
            ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem], event=["QueenRelics", False, {}])
            
    GameWorld.DebugLog("    总奖励:totalSP=%s,rewardItemList=%s" % (totalSP, rewardItemList), curPlayer.GetPlayerID())
    return startRewardLineID, totalSP, rewardItemList
    GameWorld.DebugLog("    总奖励:rewardItemList=%s" % (rewardItemList), curPlayer.GetPlayerID())
    return startRewardLineID, rewardItemList
## 副本行为